分享

Unable to load sqlite_jni: java.lang.UnsatisfiedLinkError: already loaded in another classloader

 跃来跃去 2009-05-05

问题:web每次请求都会动态连接数据库;dbname是个数据库名参数,

private Connection getConn() throws SQLException{
        Connection conn=null;
        try {
            Class.forName("SQLite.JDBCDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        if(dbName!=null&&dbName.length()>4){
                conn=DriverManager.getConnection("jdbc:sqlite:/c:\\sqlite3\\"+dbName+".db");
        }
        return conn;
    }

原因:重重加载同一个文件;

 

错误表明sqlite_jni.dll已经被JVM的ClassLoader load了。通过查阅资料发现Web


      Server的自动重启机制是产 生这一问题的根源。当Resin重启包含sqlite_jni.dll的这个Web应用时,会因为Variant类的语句而自动执行 jsqlite_jni.dll的加载。但重启Web应用并不是重启整个resin(即:上一次启动的JVM仍然存在),也就是说 sqlite_jni.dll已经被加载过了,因此系统将抛出错误。而当我们手工重启resin时,则会将上一次启动的JVM关闭并重新启动,这时会正常 加载sqlite_jni.dll。

 

 

解决:把sqlite.jar即sqlite jdbc驱动放到resion/tomcat中的公共lib目录下;而不是放在应用即:web-inf/lib下;

       因为sqlite.jar中,有sqlite_jni.dll文件加载的调用类;



原文章地址:http://blog.csdn.net/yangsp1/archive/2009/04/23/4103065.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多