我的Web应用程序使用本机dll来实现其部分功能(其位置在PATH中提供)。一切正常,直到我对WAR进行更改并且JBoss hot部署此WAR。此时,不再找到dll,我需要手动重启服务器。
热部署后将dll加载到应用程序的最佳方法是什么?
答案 0 :(得分:1)
可能不那么容易。通常,DLL绑定到特定的类加载器。重新部署时,这意味着销毁用于应用程序的原始类加载器。不幸的是,Java虚拟机不允许第二个类加载器再次重新加载DLL。
您必须拥有一些静态的东西,永远不会被虚拟机卸载。也许有第二个加载DLL的应用程序将是一个解决方案,因为重新部署第一个应用程序不会影响DLL。我想也可以创建一个Jar文件来加载DLL并将其添加到JBoss本身的类路径中,而不是将其添加到您的应用程序中。通常,此类服务器具有“共享”目录,其中可以添加将由所有应用程序共享的jar文件。
来自SUN的以下错误在这个问题上有所启发,这比仅加载servlet更通用: