Glassfish本地库加载(.dll,.so)

mgl*_*mnc 8 java java-native-interface glassfish

我正在使用最近发布的Glassfish v3,在使用本地库时,glassfish会间歇性地抱怨

glassfish SEVERE: java.lang.UnsatisfiedLinkError: 
Native Library already loaded in another classloader

在之前的glassfish发行版(v2.2)中加载本机库的过程就是将.dll文件放在GLASSFISH_HOME\lib中.现在我不知道v3中是否有这样一个神奇的文件夹,如果有的话.我还检查了管理界面,我认为有两个与我的问题有关的变量:Native Library Path Prefix和Native Library Path Suffix.我一直在网上搜索,找到他们做什么以及如何使用它们的充分描述,但显然没有人喜欢谈论它们.

bma*_*ies 3

第一件事:给定的本机类只能加载到一个类加载器中。

第二件事:Servlet 容器中的每个 Web 应用程序都有自己的类加载器。

第三件事:在编码本机代码时必须非常小心,以允许其类被垃圾收集。

结果:将本机代码加载到 Web 应用程序中后,如果尝试卸载并重新加载它,则可能会收到这些错误。

在某种程度上,我跳过了这个主题的非常简单的变体:简单地加载具有相同本机类的两个不同的网络应用程序。

有些人更喜欢在系统类加载器中加载本机代码以避免出现此问题。