我有一个DLL,可以访问Window的LoadLibrary和FreeLibrary(以解决Java无法卸载它的问题)。我需要这个DLL在每个webapp之间保持,因为它无法加载两次。
我已按照以下步骤操作:
并在$ {TOMCAT} / lib下调用static { System.loadLibrary() }
调用单个类(作为jar)。当我的Tomcat webapp访问此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类加载器,这是错误的吗?
有没有办法告诉Tomcat实例化我的单例(强制公共类加载器执行它)然后提供该实例以满足我的webapp的依赖?
任何讨论都非常感激。
答案 0 :(得分:0)
点击此链接卸载dll:
http://www.codethesis.com/blog/unload-java-jni-dll
我尝试使用在Tomcat上运行的Web应用程序,它可以工作!
简单地说,我从使用反射的自定义类加载器加载的类中调用System.loadLibrary。然后垃圾收集器删除该类。