2009-10-20 84 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