JackRabbit在WAS上为我们的一个REST应用程序设置

时间:2017-03-21 05:56:11

标签: java linux websphere jackrabbit-oak

enter image description here我们正试图在我们的一台带有IBM WAS应用服务器的Linux机器上设置JackRabbit Oak,并面临在WAS上启动服务器的一些问题。

Apache JackRabbit是一个内容存储库,它是一个分层内容存储库,支持结构化和非结构化内容,全文搜索,版本控制,事务,观察等。我们正在使用它按照我们的要求以结构化形式(特别是作为树)存储数字资产。

我们有一个REST应用程序和另一个应用程序DAM(数字资产管理),它处理存储库的创建,在存储库中提供与请求(Singleton),创建节点等的repo的连接。在我们的本地开发设置中,我们已将此DAM导出为JAR,例如dam.jar,并将其放在REST应用程序的类路径中。我们有JackRabbit Oak的JAR(oak-run-1.4.11.jar),我们把它放在了DAM应用的类路径中。

在WAS应用服务器上的Linux机器上进行类似的设置时,我们使用相同的dam.jar,它是通过在Windows机器上的eclipse中将项目导出为JAR而创建的。我们通过在部署了REST应用程序的服务器中配置它,将它放在WAS上的REST应用程序类路径中。

在调试时我们发现应用程序能够访问dam.jar中的类,但是当DAM的类试图调用JackRabbit的类时,它无法抛出java.lang.NoClassDefFoundError。我们尝试将JackRabbit的JAR(oak-run-1.4.11.jar)放在WAS的类路径中,方法是为REST应用程序的服务器配置它,但是服务器无法启动。

附件是日志文件:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/servers/RESTAPP/configuration/1489493294429.log 来自/ opt / IBM / WebSphere / AppServer / profiles / AppSrv01 / logs / RESTAPP(RESTAPP是我们的REST应用程序的服务器名称)的服务器日志中没有任何内容,下面是代码片段:

[3/14/17 17:38:04:872 IST] 00000001 ModelMgr I WSVR0801I:初始化所有服务器配置模型 [3/14/17 17:38:08:564 IST] 00000001 WorkSpaceMana A WKSP0500I:禁用工作区配置一致性检查。 [3/14/17 17:38:08:834 IST] 00000001 AdminTool A ADMU3200I:已启动服务器。等待初始化状态。 [3/14/17 17:38:18:241 IST] 00000001 AdminTool A ADMU3011E:服务器已启动但初始化失败。 / opt / IBM / WebSphere / AppServer / profiles / AppSrv01 / logs / RESTAPP下的服务器日志,startServer.log和其他日志文件应包含失败信息。

我们怀疑dam.jar,因为这是通过将它作为JAR文件导出而从我们的eclipse工作区创建的,这可能需要一些额外的信息来包含这个JackRabbit Oak库。

我们将类路径条目放在应用程序服务器中&gt; RESTAPP&gt; <处理定义> WAS的Java虚拟机。

由于

2 个答案:

答案 0 :(得分:0)

我会尝试创建一个&#34;共享库&#34;在Websphere中,将JackRabbit依赖项放在那里:

环境 - &gt;共享库 - &gt;新建...

然后设置名称&#34; Jackrabbit&#34;,然后在Classpath框中添加到jar的路径。

然后在您的REST应用程序中(应用程序 - &gt;应用程序类型 - &gt; WebSphere企业应用程序 - &gt; [您的应用程序名称])

点击&#34;共享库引用&#34;在&#34;参考文献&#34;

选择应用程序,然后单击&#34;参考共享库&#34;

选择Jackrabbit共享库,然后单击向右箭头以从应用程序引用该共享库。

WebSphere中的类加载非常复杂 - 有关完整描述,请参阅 WebSphere Application Server V8.5管理和配置指南的第22章。尝试在JVM定义级别添加类路径条目肯定不会起作用。

答案 1 :(得分:0)

要依靠安德鲁上面的答案,真正的关键是要确保dam.jar和oak-run-1.4.11.jar都在同一个类加载器中,并且它们不在服务器级类加载器 - 将自定义代码放在服务器JVM类路径中使其对服务器运行时可见,并且实际上可以覆盖服务器类(这可能是服务器init在执行此操作后失败的原因)。

假设这是一个简单的Web应用程序,最简单的答案是将两个jar放在WAR模块的WEB-INF目录中。两者都将由Web应用程序类加载器加载,并且它们能够彼此看到。如果您在应用程序本身中不想要它们,那么Andrew的共享库建议将具有相同的实际效果。