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