程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Web項目中用到JNI時應該注意的問題

Web項目中用到JNI時應該注意的問題

編輯:關於JAVA

JNI(Java Native

Interface)應用程序一般是一個Java類,在這個類中定義了幾個native方法,並在類的初始化過程中加載動態庫,例如下面這個類

public class SystemInfo{
  static {
   System.loadLibrary("SystemInfo");
  }
  public static native long getPhysicalMemory();
}

當Web項目用到該類並由於其他類的修改導致項目(context)重新加載,這個時候SystemInfo的初始化就會出異常,直接導致SystemInfo這個不可用,因為JNI中不允許一個動態庫被加載兩次,而且也沒法通過程序來卸載前面所加載的動態庫。

怎麼來解決因為context重新加載而導致JNI類無法試用的問題呢?

其實這個問題不難,我們只要不讓JNI類重新加載即可。但是一般的應用服務器對Web項目中文件都是默認重新加載的,例如WEB-INF/classes以及WEB-INF/lib目錄。如此我們便不能將JNI類放在這兩個目錄下,但是我們又必須保證這個JNI類能被Web項目的其他類引用到,因此這就需要參照不同應用服務器的類路徑的說明進行設置,對於Tomcat而言,我們可以把這個JNI類單獨打包並放在{tomcat}commonlib目錄下,並刪除web項目中的這個JNI類即可解決前面提到的問題。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved