0

我正在将一个应用程序从 jboss 4.2 迁移到 wildfly 13。该应用程序公开了 EJB,成功迁移,并且这些 EJB 被一些独立客户端(使用 tanuki 包装器包装为服务)使用,这些客户端与 wildfly 运行在同一台机器上。这些独立客户端使用 JMX 进行监控。启动代码尝试取消绑定服务名称,以防客户端在之前的运行中使用

Naming.unbind("//localhost:1099/myService");

在正常启动时(不是在崩溃后)

java.rmi.NotBoundException

是期待。

我的问题是我得到以下堆栈跟踪

Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)

端口 1099 是命名 javadoc 中所述的默认“众所周知”端口:

Naming 类提供了在远程对象注册表中存储和获取对远程对象的引用的方法。Naming 类的每个方法都将一个名称作为其参数之一,该名称是 URL 格式(没有方案组件)的 java.lang.String,格式为: //host:port/name 其中 host 是主机(远程或local) 注册表所在的位置,port 是注册表接受调用的端口号,其中 name 是注册表未解释的简单字符串。主机和端口都是可选的。如果省略host,则主机默认为本地主机。如果省略端口,则端口默认为 1099,这是 RMI 的注册表 rmiregistry 使用的“众所周知”端口。

我也尝试使用wildfly管理端口,因为它使用http端口升级,我得到了

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
    java.net.SocketTimeoutException: Read timed out

有以下根本原因

Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
    at java.net.SocketInputStream.read(SocketInputStream.java:171)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
    at java.io.DataInputStream.readByte(DataInputStream.java:265)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:246)

我错过了什么和/或做错了什么?

4

1 回答 1

0

我发现rmiregistry不是wildfly启动的。我被我们的旧环境误导了,它在操作系统启动时由 init.d 启动 rmiregistry。

所以启动 rmiregistry 解决了我的问题。

由于 rmiregistry 是一个独立的进程,因此 rmi 和 wildfly http 升级功能互不相关。

于 2018-09-11T07:11:18.167 回答