快捷搜索:

Web项目中用到JNI时应该注意的问题

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类即可办理前面提到的问题。

您可能还会对下面的文章感兴趣: