2009-10-20 110 views
2

我的web應用程序使用本機dll的部分功能(其位置在PATH中提供)。一切正常,直到我對WAR進行更改並且JBoss熱部署此WAR。在這一點上,該DLL不再被發現,我需要手動重新啓動服務器。在JBoss(熱點)重新部署後尋找所需的dll?

什麼是在熱部署後將dll加載迴應用程序的最佳方式?

回答

1

這可能不是那麼容易。通常一個DLL綁定到一個特定的類加載器。重新部署時,這意味着用於應用程序的原始類加載器被銷燬。不幸的是,Java虛擬機不允許第二個類加載器重新加載DLL。

您必須擁有靜態的東西,永遠不會被虛擬機卸載。也許有第二個應用程序加載該DLL將是一個解決方案,因爲重新部署第一個應用程序將不會影響該DLL。我想也可以創建一個加載DLL的Jar文件,並將它添加到JBoss本身的類路徑中,而不是將它添加到應用程序中。通常這些服務器有一個「共享」目錄,可以添加這些jar文件,這些文件將被所有應用程序共享。

從SUN以下錯誤帶來了曙光在這個問題上,這是方式更普遍的不僅僅是加載Servlet:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4225434