【问题标题】:Websphere 8.5 reboot breaks classLoader codeWebsphere 8.5 重新启动会破坏 classLoader 代码
【发布时间】:2019-02-06 17:31:28
【问题描述】:

我在 Websphere 上部署了一个 JAVA 应用程序。此应用程序正在寻找一个本地 WSDL 文件来执行 SOAP 请求。然而,每当 Websphere 重新启动时(每晚安排),下面这行会抛出一个 NullPointer,因为它找不到 WSDL 的路径。当我们循环 JVM 时,一切正常,直到下一次重新启动。

Url baseUrl = MyJavaClass.class.getClassLoader().getResource("MyInterface.wsdl");  

稍后我将需要这个 baseUrl 来继续我的 SOAP 请求。

service = new ServiceInstance(baseUrl, new QName("http://myinterface.blah","ServiceInstance"));  

当然,baseUrl 为 Null 会引发错误。但是一旦 JVM 循环,一切都会正常工作,直到它再次随机中断。我的 src/main/resources 文件夹中有 WSDL,我将其设置为源文件夹。
下面是如何在 Websphere 中设置我的 classLoading 选项以使其工作。我已经尝试了所有其他失败的可能性。
有任何想法吗?

【问题讨论】:

  • 您所说的“Websphere 重新启动”指的是什么?这和你后面提到的重启 JVM 有什么不同吗?
  • 每当我们遇到这个问题时,我们都会从控制台循环 JVM。实际的服务器本身每晚都会重新启动。
  • “实际服务器”在物理机(或虚拟机,我猜)中?我不确定为什么重新启动服务器会在随后的 JVM 重新启动时触发类似的事情,除非可能存在网络存储位置不可用或系统重新启动时应用部署损坏的问题。
  • 设置baseUrl的代码在哪里?在构造函数/初始化程序中?类对象?在什么样的班级? (Servlet等)
  • MyJavaClass 是设置baseUrl 的类。它位于 com.common.service 包中的我的 src\main\java 源文件夹中。

标签: websphere java-7


【解决方案1】:

我不能确定,但​​是...如果这在 JVM 回收时没有发生,但在重新启动时确实发生了,这表明某些文件在重新启动时丢失了。

在大多数非 Windows 平台上,临时目录都挂载在内存支持的存储上,这就是为什么 /tmp 等目录的内容在重新启动时会被丢弃。

WebSphere 保留已编译 WSDL 工件的缓存。它将它们保存在配置文件目录内名为wstemp 的目录中。 wstemp 有可能(虽然我不确定)持有指向 /tmp 中文件的指针。在这种情况下,重启肯定会导致您的问题。

(或者,也许您的系统管理员进行了配置更改,使wstemp 目录本身指向内存支持的存储?)

您可以尝试的是:下次机器重启时,在重启 WebSphere 之前,将wstemp 目录完全删除。然后尝试您的应用程序。如果它有效,那么这意味着我上面写的内容有些真实。如果没有,那么也许是时候与 IBM 建立 PMR 了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2020-09-21
    • 2011-02-25
    相关资源
    最近更新 更多