我已经在使用Tomcat 3.2.1下运行的Web应用程序,需要作出JNI,以访问传统的C ++代码,数据和方法调用。 一个servlet装载在web应用程序,作为其的一部分的启动init
方法,使得数据设定特定于该web应用实例被加载到C ++的数据结构。
对于这个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”)。
如果我有第二个web应用(“webapps /下BBB”)是相同的web应用,除了在C ++数据结构使用的数据集/ AAA,那么的webapps / AAA启动就好了,但是当的webapps / BBB开始我得到错误,指出:
JCoreImpl NOT loaded java.lang.UnsatisfiedLinkError: Native Library
E:\WebStation\binDebug\JCoreImpl.dll already loaded in another classloader
我需要为我的每一个Web应用程序的本机库的一个单独的实例,因为每个实例都需要包含所特有的特定的web应用程序的数据。 我已经通过邮件归档检索和阅读由Craig McLanahan电子邮件,解释类加载器的层次结构。 但我一直没能找到具体到加载本地库的唯一实例为每个web应用什么。