我有一个DLL提供对Window的LoadLibrary和FreeLibrary的访问(以避免Java无法卸载它)。我需要这个DLL在每个webapp之间保持,因为它不能被加载两次。Tomcat DLL已经加载到另一个类加载器
我已经按照下列步骤操作:
,并在$ {} TOMCAT/lib目录与static { System.loadLibrary() }
呼叫放在一个单独的类(如一个jar)。当我的Tomcat Web应用程序访问此Singleton,它仍然抛出的错误
UnsatisfiedLinkError: Native Library ${TOMCAT}\lib\Native.dll already loaded in another classloader
这是错误的认为Tomcat的普通类加载器加载这个类,实例化它(按:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html),然后使参考webapp因此绕过了webapp classloader?
有没有办法告诉Tomcat实例化我的单例(迫使普通的类加载器做到这一点),然后提供该实例来满足我的webapp的依赖性?
任何讨论非常赞赏。
如果您尝试在链接提及中创建'$ CATALINA_HOME/shared/lib'并将dll放在那里,您是否也遇到同样的问题?您的类也只有静态初始化器,对不对? – Cratylus 2013-02-21 18:29:31
因此,在那个链接中,他们描述了Tomcat6及以下的共享/ lib。目前,在Tomcat7中,这只是简单地移动到$ CATALINA_HOME/lib。在配置中你可以看到common.loader属性包含了这个。不,该类具有单一访问函数实例()以及定义JNI本机函数。 – 2013-02-26 15:52:38