dll已经使用tomcat加载到netbeans中的另一个类加载器中

时间:2013-05-15 08:45:15

标签: tomcat spring-mvc netbeans classloader unsatisfiedlinkerror

目前我使用spring mvc开发了一个java web应用程序,netbeans开发为IDE,tomcat开发为web服务器。

我想使用第三方jar,当我在简单的java应用程序中使用jar时似乎没有问题。但是当我在我的webapp中使用它时,它会触发错误,这是错误消息:

Caused by: java.lang.UnsatisfiedLinkError: Native Library C:\Program Files (x86)\SafeNet\Protect Toolkit C SDK\bin\jcprov.dll already loaded in another classloader

这是调用jar中的类的代码:

    CryptokiEx.C_Initialize(new CK_C_INITIALIZE_ARGS(CKF.OS_LOCKING_OK));
//below code cause error
    CryptokiEx.C_OpenSession(0, CKF.RW_SESSION, null, null, session);

代码的第二行将导致错误。

第一次执行代码时,它没有触发错误,之后buat,它总是触发错误。我试图从netbeans停止tomcat,关闭netbeans并再次重新打开,它仍然会触发错误。

我用Google搜索答案,它指出了这个链接:

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

但是它说加载本机库的类应放在$ CATALINA_HOME / shared / lib中。我将jar放在目录中,但错误仍然存​​在。

然后我在命令行运行:mvn tomcat:在我的项目目录上运行,这次没有发生错误,我不知道为什么。但是,我仍然希望从netbeans运行它,而不是从命令行运行它。

我假设即使我已将jar放在共享$ CATALINA_HOME / shared / lib中,我的webapp仍然依赖于放在我的webapp项目的lib文件夹中的jar,而不是放在$ CATALINA_HOME / shared / lib中的jar 。我使用项目内存储库来包含jar,但是如何包含放在$ CATALINA_HOME / shared / lib中的jar?

我真的很感谢你们的任何帮助, 谢谢!

1 个答案:

答案 0 :(得分:0)

甚至可以a static-dll-bootstrapper project以适当的方式完成所有事情。

只需几个简单的步骤即可解决您的麻烦。

  • 将jar放到shared.loader路径
  • 在jar
  • 附近的dll-bootstrapper.properties中定义lib名称
  • Class.forName("msm.DLLBootstrapper");放在项目代码中
  • 享受