2012-05-31 17 views
6

पर NoRouteToHostException/NoSuchHostException मुझे Centos 5.6 सर्वर पर JBoss 6 को रिमोट जेएमएक्स कॉल करने में परेशानी हो रही है। एक डेबियन सर्वर पर एक ही ऐप चलाने के दौरान मैं पहले ऐसा करने में सक्षम हूं।रिमोट जेएमएक्स कॉल

./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) 

यदि मैं इसे स्थानीय रूप से सर्वर पर चलाता हूं तो वही कॉल सफल होता है। मैंने iptables के साथ पोर्ट 10 9 0 खोला है, और मैं टेलर के माध्यम से सर्वर से कनेक्ट कर सकता हूं: 10 9 0। hostname -i सही आईपी पता देता है।

मैंने जेबॉस को -Djava.rmi.server.hostname=localhost के साथ शुरू करने का भी प्रयास किया है।

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) 
+0

क्या होता है यदि आप सर्वर के आईपी पते का उपयोग कर जेएमएक्स कॉल करते हैं तो क्या होता है? –

+0

@ सैमगोल्डबर्ग वही बात, दुर्भाग्यवश –

उत्तर

4

यह बंदरगाह 1090 के अलावा, JMX/RMI भी एक गतिशील आवंटित बंदरगाह है, जो फ़ायरवॉल द्वारा अवरुद्ध हो जाता है का उपयोग करता है पता चला है: मैं ऐसा करते हैं, तो मैं एक अलग अपवाद मिलता है। तो, अगर यह उपयुक्त है, पूरी तरह फ़ायरवॉल को निष्क्रिय है, वरना यह एक विकल्प (जो मैं अभी तक की कोशिश की नहीं है) हो रहा है:

http://olegz.wordpress.com/2009/03/23/jmx-connectivity-through-the-firewall/

+2

एक विकल्प है कि पूर्ण पोर्ट रेंज को एक सुरंग के माध्यम से एक विशिष्ट आईपी पते पर रूट करने के लिए एक प्रकार का वीपीएन सेट करना है। मेरे एक ग्राहक ने एसएसएच के माध्यम से जेएमएक्स प्रोटोकॉल को सुरंग करने में सक्षम होने के लिए सी में अपना स्वयं का जेवीएम एजेंट लागू किया है ... तो वास्तव में एक आम समस्या है। –

+0

आपने मेरा दिन बचाया –

1

मैं था यह क्या किया:

अद्यतन activemq.xml फ़ाइल करें और rmiServerPort निर्दिष्ट करें।

<managementContext createConnector="true" connectorPort="SOME_PORT" rmiServerPort="SOME_OTHER" jmxDomainName="org.apache.activemq"/> 

, अपने iptables प्रविष्टि को अपडेट करके दोनों बंदरगाहों की अनुमति दें ActiveMQ को पुनः आरंभ और यह काम करना चाहिए।

संबंधित मुद्दे