java - Tomcat DLL 已加载到另一个类加载器中

标签 java java-native-interface tomcat7

我有一个 DLL,它提供对 Window 的 LoadLibrary 和 FreeLibrary 的访问(以解决 Java 无法卸载它的问题)。我需要这个 DLL 在每个 Web 应用程序之间保留,因为它不能加载两次。

我已按照以下步骤操作:

http://wiki.apache.org/tomcat/HowTo#I.27m_encountering_classloader_problems_when_using_JNI_under_Tomcat

并使用 static { System.loadLibrary() } 调用在 ${TOMCAT}/lib 下放置一个单例类(作为 jar)。当我的Tomcat webapp访问这个Singleton时,它仍然抛出错误

UnsatisfiedLinkError: native 库 ${TOMCAT}\lib\Native.dll 已在另一个类加载器中加载

认为 Tomcat 的通用类加载器正在加载此类、实例化它(按照: http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html )然后将引用传递给 web 应用程序从而绕过 web 应用程序类加载器,这是错误的吗?

有没有办法告诉 Tomcat 实例化我的单例(强制公共(public)类加载器执行此操作),然后提供该实例来满足我的 Web 应用程序的依赖关系?

非常感谢任何讨论。

最佳答案

点击此链接卸载 dll:

http://www.codethesis.com/blog/unload-java-jni-dll

( web archive version )

我在 Tomcat 上运行的 Web 应用程序上进行了尝试,它有效!

简单地说,我从由我的自定义类加载器使用反射加载的类中调用 System.loadLibrary。然后这个类会被垃圾收集器删除。

关于java - Tomcat DLL 已加载到另一个类加载器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15009201/

相关文章:

java - 简单的递归减法返回意外结果

java - 为 NewObjectA() 函数创建 jvalues args 数组时出错 - JNI 调用 API

html - web-app 上下文和 FORM ACTION 属性?

java - Spring Boot APP部署到外部tomcat

java - 如何将/ibm_security_logout 的外部 JSP/HTML 片段嵌入到 JSF 中?

java - 将文本文件从 Java 服务器发送到 C 客户端

java - 平均类(class)不工作

java - Linux 上 Maven exec/debug 插件下的 Unsatisfied link 错误

Android NDK JNI 构建错误 : undefined reference to 'function_name'

jersey - Java 类型类 com.sun.jersey.multipart.FormDataMultiPart,未找到 MIME 媒体类型 multipart/form-data