docker - 使用 Eclipse 进行 JRebel 远程处理导致 Docker 上的 WebSphere 崩溃

标签 docker crash websphere remoting jrebel

我已在 Windows 计算机上的 Eclipse maven 项目中配置了 JRebel 远程处理模式,并在 Linux docker 容器中运行 WebSphere。

在 JVM 参数中,它正在设置

-agentpath:/opt/jrebel/lib/libjrebel64.dll -Drebel.remoting_plugin=true

当我更改源代码时,jrebel 开始更新代码,并且出现错误:

2018-02-27 23:32:14.066 ERROR [rebel-CancellableExecutorService-1] c.z.jrebel.remoting.Transaction - [OUT] [tr_36] [Project <maven-module-name>, server websphere] Synchronization failed! Read timed out
com.zeroturnaround.jrebel.remoting.RemotingException: Read timed out
    at com.zeroturnaround.jrebel.remoting.net.RemotingClient.tryMakePostRequest(JRebelRemoting:189)
    at com.zeroturnaround.jrebel.remoting.net.RemotingClient.sendTransactionCommand(JRebelRemoting:147)
    at com.zeroturnaround.jrebel.remoting.net.RemotingClient.commitTransaction(JRebelRemoting:101)
    at com.zeroturnaround.jrebel.remoting.Transaction.commit(JRebelRemoting:487)
    at com.zeroturnaround.jrebel.remoting.Transaction.synchronize(JRebelRemoting:231)
    at com.zeroturnaround.jrebel.remoting.RemoteServer$1.run(JRebelRemoting:56)
    at org.zeroturnaround.common.util.ExecutorUtil$RunnableWrapper.run(ExecutorUtil.java:153)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.net.SocketTimeoutException: Read timed out

此后,Web 应用程序和 WebSphere 崩溃了。

最佳答案

错误消息表明 IDE 与 Linux Docker 容器内运行的 WebSphere 应用程序服务器之间的连接失败。

首先,如果您在 Linux 机器上启动 WebSphere 服务器,则应该使用为 Linux 编译的 JRebel 代理库。也就是说,您应该在 -agentpath 参数的路径值中使用 libjrebel64.so,而不是 libjrebel64.dll。在 Linux 环境中使用 .dll 可能会导致服务器在启动时崩溃。目前,我的假设是服务器没有响应,因为它甚至没有正确启动。

此外,请确保可以通过您在 IDE 端的远程服务器配置中输入的地址访问该服务器。

如果在执行前面的建议后仍然存在相同的问题,请重现此问题并向我们发送来自 jrebel.logjrebel-eclipse.log 文件~/.jrebel/ 目录到 support@zeroturnaround.com。

关于docker - 使用 Eclipse 进行 JRebel 远程处理导致 Docker 上的 WebSphere 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49021378/

相关文章:

docker - 如何在 docker 机器上挂载本地卷

android 方向 - Intent 问题(相机)

python - 如何在python中循环2个函数?

javascript - 我的网站老是 IE 崩溃,无法调试

python - 通过 wsadmin 获取 WAS 7 上已安装应用程序的上下文根

windows - 如何在 Windows 10 Pro 中完全卸载 Minikube? (巧克力)

r - 如何保持软件包在Google Cloud VM上安装的RStudio上的完整性

mongodb - 失败 : mongorestore target 'dump' invalid: stat dump: no such file or directory

java - JNDI 问题

c# - 将 ibm mq 客户端连接到较低版本的问题