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.我一直在网上搜索,找到他们做什么以及如何使用它们的充分描述,但显然没有人喜欢谈论它们.
第一件事:给定的本机类只能加载到一个类加载器中。
第二件事:Servlet 容器中的每个 Web 应用程序都有自己的类加载器。
第三件事:在编码本机代码时必须非常小心,以允许其类被垃圾收集。
结果:将本机代码加载到 Web 应用程序中后,如果尝试卸载并重新加载它,则可能会收到这些错误。
在某种程度上,我跳过了这个主题的非常简单的变体:简单地加载具有相同本机类的两个不同的网络应用程序。
有些人更喜欢在系统类加载器中加载本机代码以避免出现此问题。
| 归档时间: |
|
| 查看次数: |
6028 次 |
| 最近记录: |