0

在此处输入图像描述我们正在尝试在我们的一台带有 IBM WAS 应用程序服务器的 Linux 机器上设置 JackRabbit Oak,并且在 WAS 上启动服务器时遇到了一些问题。

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

我们有一个 REST 应用程序和另一个应用程序 DAM(数字资产管理),它处理存储库的创建,在请求时提供与存储库的连接(单例),在存储库上创建节点等。在我们的本地开发设置中,我们将此 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 库包含在其中。

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

谢谢

4

2 回答 2

0

搭载 Andrew 上面的回答,真正的关键是确保 dam.jar 和 Oak-run-1.4.11.jar 都在同一个类加载器中,并且它们不在服务器级类加载器中 - 把服务器 JVM 类路径中的自定义代码使其对服务器运行时可见,并且实际上可以覆盖服务器类(这可能是服务器初始化失败的原因)。

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

于 2017-03-21T11:54:38.590 回答
0

我会尝试在 Websphere 中创建一个“共享库”并将你的 JackRabbit 依赖 jar 放在那里:

环境 -> 共享库 -> 新建...

设置然后命名为“Jackrabbit”,然后在 Classpath 框中添加路径到你的 jars。

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

单击“参考”下的“共享库参考”

选择应用程序并单击“引用共享库”

选择 Jackrabbit 共享库并单击右箭头以从应用程序中引用该共享库。

WebSphere 中的类加载非常复杂——完整的描述请参见WebSphere Application Server V8.5 Administration and Configuration Guide的第 22 章。尝试在 JVM 定义级别添加类路径条目肯定是行不通的。

于 2017-03-21T09:22:46.167 回答