NoRouteToHostException / NoSuchHostException auf remote-JMX-Aufruf
Ich bin Schwierigkeiten bei der Herstellung eines remote-JMX-Aufruf von JBoss 6 auf Centos 5.6 server. Ich habe vorher in der Lage gewesen, dies zu tun, wenn Sie die gleiche app auf einem Debian-server.
./twiddle.sh --server=service:jmx:rmi:///jndi/rmi://SERVER:1090/jmxconnector invoke foo:service=bar baz
Caused by: java.net.NoRouteToHostException: No route to host
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595)
Den gleichen Anruf ist erfolgreich, wenn ich es lokal auf dem SERVER. Ich habe geöffneter port 1090 mit iptables, und ich kann eine Verbindung über telnet zum SERVER:1090. hostname -i
liefert die korrekte IP-Adresse.
Habe ich auch versucht, starten von JBoss mit -Djava.rmi.server.hostname=localhost
. Wenn ich das mache, dann bekomme ich eine andere exception:
Caused by: java.rmi.NoSuchObjectException: no such object in table
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2327)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:279)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:248)
at org.jboss.console.twiddle.Twiddle.createMBeanServerConnection(Twiddle.java:322)
at org.jboss.console.twiddle.Twiddle.connect(Twiddle.java:331)
at org.jboss.console.twiddle.Twiddle.access$400(Twiddle.java:60)
at org.jboss.console.twiddle.Twiddle$1.getServer(Twiddle.java:217)
- Was passiert, wenn Sie die JMX-Aufruf über die IP-Adresse des Servers?
- Das gleiche, leider
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es stellt sich heraus, dass zusätzlich zu port 1090, JMX/RMI verwendet auch einen dynamisch zugewiesenen port, der bekommt von der firewall blockiert werden. Also, wenn es angebracht ist, deaktivieren Sie die firewall zusammen, oder anderes scheint dies zu sein eine alternative (das habe ich noch nicht ausprobiert):
http://olegz.wordpress.com/2009/03/23/jmx-connectivity-through-the-firewall/
Was ich Tat, war dies:
Update die Datei activemq.xml und geben Sie rmiServerPort.
Dass die beiden ports, die eine Aktualisierung der iptables Eintrag, activemq starten und es sollte funktionieren.