Hostname should be explicitly configured for RMI/JMX connections to work 
remotely with DHCP addresses
-----------------------------------------------------------------------------------------------------

                 Key: KARAF-1138
                 URL: https://issues.apache.org/jira/browse/KARAF-1138
             Project: Karaf
          Issue Type: Improvement
         Environment: ServiceMix 4.3
            Reporter: metatech
            Priority: Minor


JVM RMI logic to auto-guess its own IP address does not work well with default 
hostname settings (IP obtained via DHCP, but defined in /etc/hosts as 
"localhost") on Linux. When trying to call JMX remotely from a different 
machine, the caller receives "127.0.0.1" as server address, with the error 
below.
A workaround is to define the system property "java.rmi.server.hostname" to the 
real hostname.

This can be easily automated by adding in the script bin/karaf the following 
lines :
    IP_LOOKUP=`getent hosts \`hostname\` | wc -l`
    if [ $IP_LOOKUP -eq 0 ]; then
        JAVA_OPTS="$JAVA_OPTS -Djava.rmi.server.hostname=`hostname`"
    fi

Another solution is to define manually the property in 
$KARAF_HOME/etc/system.properties.

A third possibility is to extend the hinted solution in 
ActiveMQCommandSupport.java

{code}
smx@root> activemq:list --jmxurl 
service:jmx:rmi:///jndi/rmi://172.16.159.1:1099/karaf-root --jmxuser smx 
--jmxpassword smx
ERROR: java.lang.RuntimeException: Failed to execute list task. Reason: 
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested 
exception is: 
        java.net.ConnectException: Connection refused
java.lang.RuntimeException: Failed to execute list task. Reason: 
java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested 
exception is: 
        java.net.ConnectException: Connection refused
        at 
org.apache.activemq.console.command.ListCommand.runTask(ListCommand.java:53)
        at 
org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
        at 
org.apache.activemq.console.command.AbstractJmxCommand.execute(AbstractJmxCommand.java:316)
        at 
org.apache.activemq.karaf.commands.ActiveMQCommandSupport.doExecute(ActiveMQCommandSupport.java:46)
        at 
org.apache.karaf.shell.console.OsgiCommandSupport.execute(OsgiCommandSupport.java:38)
        at 
org.apache.felix.gogo.commands.basic.AbstractCommand.execute(AbstractCommand.java:35)
        at 
org.apache.felix.gogo.runtime.shell.CommandProxy.execute(CommandProxy.java:50)
        at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:229)
        at 
org.apache.felix.gogo.runtime.shell.Closure.executeStatement(Closure.java:162)
        at org.apache.felix.gogo.runtime.shell.Pipe.run(Pipe.java:101)
        at org.apache.felix.gogo.runtime.shell.Closure.execute(Closure.java:79)
        at 
org.apache.felix.gogo.runtime.shell.CommandSessionImpl.execute(CommandSessionImpl.java:71)
        at org.apache.karaf.shell.console.jline.Console.run(Console.java:170)
        at java.lang.Thread.run(Thread.java:662)

Could not connect to JMX server.  This command requires that the remote JMX 
server be enabled.
This is typically done by adding the following JVM arguments: 
   -Dcom.sun.management.jmxremote.port=1099 
-Dcom.sun.management.jmxremote.authenticate=false 
   -Dcom.sun.management.jmxremote.ssl=false 

The connection error was: java.net.ConnectException: Connection refused
{code}

http://forum.springsource.org/showthread.php?64670-Why-do-I-need-to-define-java-rmi-server-hostname&s=cd088bea049ead95d2cb3ff186babaef&p=219304#post219304


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to