Java错误:本地库已在另一个类加载器中加载

3

我正在使用java bonjour库(dns_sd.jar)在Jboss web服务器上运行的web应用程序中。

当我启动服务器时,一个Servlet使用bonjour查找网络上的每个资源并返回给用户。第一次一切都很好,但是当我重新部署web应用程序时,出现以下错误:

java.lang.UnsatisfiedLinkError:本机库C:\ Windows \ System32 \ jdns_sd.dll已在另一个classloader中加载。

我已经尝试删除.dll文件,但仍然出现相同的问题。

为什么它会引用.dll文件,如果我在我的web应用程序中有.jar库呢?

有没有人有任何修复这个问题的想法?

2个回答

0

如果您正在使用JBoss 7,请尝试将使用dll的jar文件移动到JBoss模块中。重新启动JBoss以便它可以获取该模块。修改您的MANIFEST.MF文件,使其包含“Dependencies: theNameYouGaveIt”。

其中,“theNameYouGaveIt”是您在模块的“yourModule/main/module.xml”文件中选择的名称。

这样,JBoss就不会一遍又一遍地重新加载库。然后反复卸载/部署您的.ear或.war文件。


0

在重新部署之前,您需要取消部署。 您无需删除dll文件,它与您的错误根本没有关系。这是Java和JBoss的错误。问题在于当您重新部署时,它无法卸载您在初始部署时加载的库。因此,在下一次加载库之前,请检查库是否已加载,如果已加载,请勿再次加载库。


1
非常感谢您的帮助......但我确实尝试过取消部署并重新部署,但只有重新启动服务器才有效......这相当痛苦,考虑到我需要部署其他应用程序所需的时间。如果Java函数中已经运行了该库,是否有任何方法来卸载它?因为我不知道如何告诉Bonjour不要再次加载它。 - out_sid3r
1
虽然我没有得到完整的答案...但至少我得到了确认...尽管没有解决方案。 - out_sid3r
1
你找到解决方案了吗? - thd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接