通过Notes-UpdateSite数据库将部署的jar部署到Domino服务器,以NoClassDefFoundException结尾

时间:2012-08-24 09:58:12

标签: java osgi lotus-notes xpages lotus-domino

我们有几个.jar文件要部署到我们的8.5.3 Domino服务器。

控制台命令“tell http osgi diag <bundle name>”有效,并显示捆绑包在那里。但是,当我启动一个带有jar语言导入语句的Notes Java代理时,多米诺控制台会为这些类打印 NoClassDefFoundError 错误。

最初名为saxon9he.jar的.jar示例:

[1834:0036-1E84] 24.08.2012 11:21:14   HTTP JVM: Exception in thread "AgentThread:JavaAgent"
[1834:0037-1E84] 24.08.2012 11:21:14   HTTP JVM: java.lang.NoClassDefFoundError:net.sf.saxon.Version
[1834:0039-1E84] 24.08.2012 11:21:14   HTTP JVM: at JavaAgent.NotesMain(Unknown Source)
[1834:003B-1E84] 24.08.2012 11:21:14   HTTP JVM: at lotus.domino.AgentBase.runNotes(Unknown Source)
[1834:003D-1E84] 24.08.2012 11:21:14   HTTP JVM: at lotus.domino.NotesThread.run(Unknown Source)
[1834:003F-1E84] 24.08.2012 11:21:14   HTTP JVM: Caused by:
[1834:0040-1E84] 24.08.2012 11:21:14   HTTP JVM: java.lang.ClassNotFoundException: net.sf.saxon.Version
[1834:0042-1E84] 24.08.2012 11:21:14   HTTP JVM: at lotus.domino.AgentLoader.loadClass(Unknown Source)
[1834:0044-1E84] 24.08.2012 11:21:14   HTTP JVM: at java.lang.ClassLoader.loadClass(ClassLoader.java:619)
[1834:0046-1E84] 24.08.2012 11:21:14   HTTP JVM: ... 3 more

其中一些.jar文件由自己完整编写,而其他文件则由开源项目提供。这些罐子。文件只是通过几个Java代理,XPage和在“WebContent”中的Domino Designer中的Java-Views中创建的类中的导入指令使用。我们在各种设计元素中使用这些包,并且有大约100个domino服务器必须获取这些文件和补丁,这就是为什么我们不想将它们放入每个服务器的本地文件系统中。

这是我到目前为止所做的事情。文件到我的多米诺骨牌服务器:

我已经进口了这些罐子。将我的Eclipse 4.2客户端中的文件转换为新的“现有Jar中的插件项目”并配置导入和导出包。 (我甚至尝试从这些jar.Files制作Bnd-Projects,以获得适当的OSGI-ready Manifest文件,遗憾的是它没有做得更好) 之后我创建了一个包含插件的功能项目。在Last,我将该功能导入Eclipse中的新Update-Site项目并构建它。

我在使用模板“StdEclipseUpdateSite”(版本8.5.3(04.03.2011))创建的数据库中选择了此site.xml。此数据库在Notes.ini中通过我的8.5.3上的“OSGI_HTTP_DYNAMIC_BUNDLES”参数引用在我的Windows 7 x64上本地运行的Domino服务器x64用于测试目的。

我已经解决了这个问题好几天了,阅读osgi和googl'ed很多关于类似的问题,但我自己无法完成这项工作。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

经典代理无法看到OSGI捆绑包,我建议您使用DOTS插件服务来完成这些任务。 http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=OSGI%20Tasklet%20Service%20for%20IBM%20Lotus%20Domino

答案 1 :(得分:1)

我知道这是一个老问题 - 我只是偶然发现它寻找部署问题: - )

简而言之:代理JVM和XPage JVM是不一样的。因此,“旧”代理(以及Web服务)不会通过更新站点看到任何部署到OSGi的内容。

您可以使用的唯一选项是将jar文件复制到服务器程序库中的jvm / lib / ext。这样可行。您甚至不应该考虑将jar文件添加到代理(或Java脚本库),因为在使用它之前分离jar文件的机制中存在内存泄漏。

所以考虑一下这个问题。转向“新Java世界”并不会涉及旧技术(主要是代理商)。您将不得不寻找在Domino中调度任务的新机制。我个人认为DOTS / Tasklets将成为前进的方向 - 但是仍然需要解决方案来“包装” - 并且可以轻松设置任务。

/约翰