У меня есть webapp, работающий под Tomcat 3.2.1, который должен делать вызовы JNI в
для доступа к данным и методам в устаревшем коде С++. Загружен сервлет
на
запуск webapp, который как часть своего метода init
вызывает набор данных
специфичный для этого экземпляра webapp для загрузки в данные С++
структуры.
Этот код 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);
}
}
Все работает нормально, если есть только один webapp (позвольте ему позвонить "WebApps/ааа" ).
Если у меня есть второй webapp ( "webapps/bbb" ), который идентичен webapps/aaa за исключением набора данных, используемого в структурах данных С++, затем webapps/aaa запускается просто отлично, но когда запускается webapps/bbb, я получаю сообщение об ошибке о том, что:
JCoreImpl NOT loaded java.lang.UnsatisfiedLinkError: Native Library
E:\WebStation\binDebug\JCoreImpl.dll already loaded in another classloader
Мне нужно иметь отдельный экземпляр родной библиотеки для каждого из моих webapps, поскольку каждый экземпляр должен содержать данные, которые уникальны для этого конкретный webapp. Я просматривал почтовые архивы и читал электронной почты Крейга Макланахана, объясняющего иерархию загрузчиков классов. Но я иметь не удалось найти ничего конкретного для загрузки уникального экземпляра родную библиотеку для каждого webapp.