2014-02-25 81 views
2

我有一个定时器进程,它读取lotus notes 5并转储在modeshape存储库中读取的文档。该过程将时间戳和其他相关信息写入数据库表中,并使用它来获取停止的位置,然后读取其余文档。UnsatisfiedLinkError:原生库C: Domino nlsxbe.dll已经加载到另一个类加载器中

问题出现在应用程序被部署并重新部署时。当我这样做,虽然会话与Lotus Notes的创造,它抛出我的异常:

ava.lang.UnsatisfiedLinkError:本地库C:\多米诺\ nlsxbe.dll已装入另一个类加载器

这因为重新部署并没有从JVM中移除依赖的dll和Jars。 我需要一个解决方案,我可以从JVM中删除依赖项,或者在下次尝试创建会话时引用相同的dll和资源。

注 - 我没有LOTUS注释api尝试加载依赖项的代码,我甚至不知道创建连接所需的依赖API和DLL,因此我移动了整个安装文件夹莲花笔记多米诺客户端到我的java.library.path

请帮忙,这只是让我疯了。可能是一个非常简单的问题,但我需要一些专家建议如何以更好的方式实现这一点。

+0

该问题不适用于Notes。加载相同的库两次应该没有限制(至少从我知道的R6版本开始)。 –

回答

2

我修好了。我感染了NotesThread类,发现它总是试图在导致问题的类加载器中加载nlsxbe.dll。我抛弃了使用NotesThreads(以及将来的任何IBM API)并使用java线程并解决问题的想法。

+2

NotesThreads的原因是Notes/Domino在关闭时可以终止一个线程。如果你只扩展Thread,那么Notes/Domino无法正确终止JVM(也不能清理后端对象)......除了Notes版本之外,它听起来像是无论如何设置了无效安装,所以它不会影响你,除非你必须运行Notes/Domino作为应用程序。 –

+0

谢谢西蒙的抬头。应用程序与莲花笔记交互的服务器部署后,没有莲花笔记部署,也不会有这样的安装。所以我想我在这方面很安全。我现在得到的新问题是莲花笔记会话在一段时间后超时,这限制了回收对象的莲花笔记。为此,我在每1000条记录之后实例化会话和数据库对象。这应该可以做到这一点。如果没有,那么你可能会很快得到一个新的问题:) – TusharPanda

相关问题