Native Library Jawin already loaded in another classloader解決辦法[Weblogic10.3]

如果Weblogic上的兩個web應用需要使用相同的JNI本地庫(Jawin),當第二個web應用加載JNIJawin)本地庫時,就會出現Native Library Jawin already loaded in another classloader錯誤

 

 

 

 

因此爲了解決這個問題需要做如下配置

 

一.jawin.jar jawin.dll放到你在第一步配置的JDKjre/lib/ext目錄下去(我的:C:/bea/jrockit_160_05/jre/lib/ext)。

二.jawin.jar jawin.dll放到你新建域的Lib目錄(我的C:/bea/user_projects/domains/base_domain/lib)下。

紅色標註的爲您新建的域名

做好以上兩步配置後就可以部署程序了,完成!

 

 

 

 

 

下在則在網上找到的原因分析

1、症狀

如果JBoss上的兩個web應用需要使用相同的JNI本地庫,當第二個web應用加載JNI本地庫時,就會出現Native Library xxx.so already loaded in another classloader錯誤

2、原因

 Java虛擬機爲了在JNI本地庫中確保基於classloader的命名空間隔離,因而不允許一個JNI本地庫被兩個不同的classloader加載。而JBoss中web應用的classloader是獨立的,也就是說每個web應用都有一個專屬的classloader,這樣就出現兩個classloader加載同一JNI本地庫的情況

3、解決方法

在JBoss AS中,雖然不同的web應用使用不同的classloader,但是web應用classloader的父classloader是相同的,這樣根據雙親委託模型只要讓父classloader加載JNI本地庫就可以避免被多個classloader加載。父classloader的classpath爲JBoss AS配置(default、all或minimal)的lib目錄,因而只要將JNI class單獨發佈成jar包,並放在配置(default、all或minimal)的lib目錄中,問題就可以解決

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章