您的位置:首页 > 运维架构 > Tomcat

(转) JNI 重载的问题

2005-02-24 17:37 134 查看
Web项目中用到JNI时应该注意的问题
作者:刘冬 发文时间:2004.12.20

    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}/common/lib目录下,并删除web项目中的这个JNI类即可解决前面提到的问题。(T111)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息