2

我的 Web 应用程序使用本机 dll 来实现其部分功能(其位置在 PATH 中提供)。在我对 WAR 进行更改并且 JBoss 热部署此 WAR 之前,一切正常。此时找不到dll,需要手动重启服务器。

热部署后将 dll 加载回应用程序的最佳方法是什么?

4

1 回答 1

1

这可能不是那么容易。通常,DLL 与特定的类加载器相关联。当您重新部署时,这意味着用于您的应用程序的原始类加载器被破坏。不幸的是,Java 虚拟机不允许第二个类加载器再次重新加载 DLL。

你必须有一些静态的东西,它永远不会被虚拟机卸载。也许拥有加载 DLL 的第二个应用程序将是一个解决方案,因为重新部署第一个应用程序不会影响 DLL。我想也可以创建一个加载 DLL 的 Jar 文件并将其添加到 JBoss 本身的类路径中,而不是将其添加到您的应用程序中。通常这样的服务器有一个“共享”目录,可以添加这样的 jar 文件,这些文件将被所有应用程序共享。

以下来自 SUN 的错误揭示了这个问题,这比仅仅加载 servlet 更普遍:

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

于 2009-10-20T12:31:05.463 回答