我有一个在 Tomcat 3.2.1 下运行的 web 应用程序,需要进行 JNI 调用
为了访问遗留 C++ 代码中的数据和方法。 servlet 已加载
在
webapp 的启动,作为其一部分init
方法,产生一个数据集
特定于要加载到 C++ 数据中的 webapp 实例
结构。
该 servlet 的 Java 代码包含以下内容:
static
{
try {
System.loadLibrary("JCoreImpl");
System.out.println("JCoreImpl loaded");
m_bLibraryLoaded = true;
} catch (UnsatisfiedLinkError e) {
m_bLibraryLoaded = false;
System.out.println("JCoreImpl NOT loaded " + e);
}
}
如果只有一个 Web 应用程序(我们称之为
“webapps/aaa”)。
如果我有第二个与 webapps/aaa 相同的 Web 应用程序(“webapps/bbb”)
除了C++数据结构中使用的数据集,然后是webapps/aaa
启动得很好,但是当启动 webapps/bbb 时出现错误
陈述
那:
JCoreImpl NOT loaded java.lang.UnsatisfiedLinkError: Native Library
E:\WebStation\binDebug\JCoreImpl.dll already loaded in another classloader
我需要为我的每个项目都有一个单独的本机库实例
webapps,因为每个实例都需要包含该实例唯一的数据
特定的网络应用程序。我搜索了邮件档案并阅读了
Craig McLanahan 的电子邮件解释了类加载器层次结构。但是我
有
无法找到任何特定于加载 a 的唯一实例的内容
每个网络应用程序的本机库。
您不能两次加载相同的本机库。
将类放入jar文件中<tomcat>/lib/
,它将在所有战争中共享。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)