Tomcat 6.0.35上有两个Web应用程序需要库(jar文件)。而且jar文件中的一个类需要运行一个本地库。如何处理Tomcat上多个Web应用程序中的共享本地库
正如预期的那样,我如果两个应用程序在同一时间deplayed我得到异常
java.lang.UnsatisfiedLinkError: Native Library my-native-library.so already loaded in another classloader
。
在jar文件,本机库使用静态块
static { try { System.loadLibrary("my-native-library.so"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } }
和类,使用本机库可配置使用XML加载。
jar库是由我们构建的搜索引擎,所以我们可以在必要时重建它。
所以我的问题是我们如何告诉Tomcat my-native-library.so已被另一个web应用程序加载,并且该应用程序的静态块可以被忽略。
编辑: jar库和web应用程序都使用maven。
谢谢。
编辑: 按照我的理解:
的搜索引擎库需要我的母语,library.jar文件构建成一个JAR库。然后,搜索引擎jar库托管在我们的资源库中,并使用maven构建到我们的Web应用程序中。当服务器启动时,具有共享库路径的LD_LIBRARY_PATH和JAVA_OPTS被公开,服务器能够加载my-native-library.so一次。但是,这两个Web应用程序都包含搜索引擎jar,而my-native-library.jar将包含在WEB_INF/lib中,并包含异常。
要从WEB_INF/lib中删除my-native-library.jar,搜索引擎库需要重建而没有必要的依赖关系(my-native-library.jar)。
有此问题的几个DUP的,具有良好的信息,但没有公认的答案。我会建议开始[这里](http://stackoverflow.com/questions/3724421/native-library-already-loaded-in-another-classloader)。 – Perception 2013-03-26 10:54:12