【问题标题】:dll already loaded in another classloader in netbeans using tomcatdll已经使用tomcat加载到netbeans中的另一个类加载器中
【发布时间】:2013-05-15 08:45:14
【问题描述】:

目前我使用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?

非常感谢你们的帮助, 谢谢!

【问题讨论】:

  • 你找到解决办法了吗?在你的 maven 依赖中使用 provided 怎么样?
  • 你使用的是 Tomcat 7 吗?
  • 我用的是Tomcat 7,还是没有找到解决办法。

标签: tomcat spring-mvc netbeans classloader unsatisfiedlinkerror


【解决方案1】:

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

只需几个简单的步骤即可解决您的问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多