0

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

我想使用 3rd 方 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);

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

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

我搜索了答案,它指向了这个链接:

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

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

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

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

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

4

1 回答 1

0

甚至还有一个 static-dll-bootstrapper 项目可以以正确的方式完成所有工作。

您的问题应该通过几个简单的步骤来解决。

  • 将jar放到shared.loader路径
  • dll-bootstrapper.properties在 jar 附近定义 lib 名称
  • 放置Class.forName("msm.DLLBootstrapper");在您的项目代码中
  • 请享用
于 2014-10-18T10:07:16.617 回答