Naming.unbind («somename») не работает против wildfly 13 - PullRequest
0 голосов
/ 10 сентября 2018

Я переношу приложение из jboss 4.2 в wildfly 13. Приложение предоставляет EJB, успешно перенесенные, и эти EJB используются некоторыми автономными клиентами (упакованными как сервисы с оболочкой tanuki), работающими на той же машине, что и wildfly. Эти автономные клиенты отслеживаются с помощью JMX. Код запуска пытается отменить привязку имени службы в случае сбоя клиента при более раннем запуске с использованием

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

При обычном запуске (не после сбоя) a

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 предоставляет методы для хранения и получения ссылок для удаленных объектов в реестре удаленных объектов. Каждый метод Класс именования принимает в качестве одного из аргументов имя, которое является java.lang.String в формате URL (без компонента схемы) форма: // хост: порт / имя где хост - это хост (удаленный или локальный), где находится реестр, порт - номер порта, на который реестр принимает вызовы, и где имя - простая строка, не интерпретируемая реестром. И то и другое хост и порт не являются обязательными. Если хост не указан, по умолчанию хост местный хозяин. Если порт не указан, по умолчанию используется порт 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)

Что я пропускаю и / или делаю неправильно?

1 Ответ

0 голосов
/ 11 сентября 2018

Я обнаружил, что rmiregistry не запускается wildfly. Я был введен в заблуждение нашей старой средой, которая запускает rmiregistry при запуске ОС init.d.

Итак, начало перерегистрации решило мою проблему.

Функция обновления Rmi и wildfly http не связана друг с другом, поскольку rmiregistry является независимым процессом.

...