JDK-8031753: JMXServiceURL should not use getLocalHost or its usage should be enhanced
Rob McKenna
rob.mckenna at oracle.com
Mon Jan 27 16:50:23 PST 2014
Hi Maryan,
I'm cc'ing the jmx-dev folks. (and bcc'ing the jdk7u-dev alias)
Hopefully they'll help move this conversation forward.
-Rob
On 27/01/14 20:42, Maryan Bagnyuk (aka Maryan Bahnyuk) wrote:
> Hello
>
> As a reporter of JI-9009639 / JDK-8031753
> <https://bugs.openjdk.java.net/browse/JDK-8031753> bug I'd like to
> inform you about the following.
>
>
> Jaroslav Bachorík
> <https://bugs.openjdk.java.net/secure/ViewProfile.jspa?name=jbachorik>added
> a comment -2014-01-22 04:32
> Not a regression.
>
> Oops. Sorry. Indeed I should have left this field blank.
> I'd understood the meaning of 'Regression' field incorrectly and had
> filled it in bug report by mistake. :(
>
>
> Jaroslav Bachorík
> <https://bugs.openjdk.java.net/secure/ViewProfile.jspa?name=jbachorik>added
> a comment -2014-01-22 04:32
> If you insist on this issue being a regression, please, provide the
> exact version where the behavior was as expected.
>
> As I see all branches have this code for ages...
>
> [marbug at server1 jdk]$ pwd && hg annotate -f -a -u -d -n -c
> ./src/share/classes/javax/management/remote/JMXServiceURL.java | grep
> 'local = InetAddress.getLocalHost();'
> /home/marbug/cpp/jab/tmp/jdk6/jdk
> ohair 9 2d585507a41b Fri Jan 30 16:27:33 2009 -0800
> src/share/classes/javax/management/remote/JMXServiceURL.java: local =
> InetAddress.getLocalHost();
> [marbug at server1 jdk]$ pwd && hg annotate -r 0 -f -a -u -d -n -c
> ./src/share/classes/javax/management/remote/JMXServiceURL.java | grep
> 'local = InetAddress.getLocalHost();'
> /home/marbug/cpp/jab/tmp/jdk6/jdk
> duke 0 0c738a3e5791 Fri Jan 30 16:00:53 2009 -0800
> src/share/classes/javax/management/remote/JMXServiceURL.java: local =
> InetAddress.getLocalHost();
> [marbug at server1 jdk]$ cd ../../jdk7u/jdk/
> [marbug at server1 jdk]$ pwd && hg annotate -f -a -u -d -n -c
> ./src/share/classes/javax/management/remote/JMXServiceURL.java | grep
> 'local = InetAddress.getLocalHost();'
> /home/marbug/cpp/jab/tmp/jdk7u/jdk
> duke 0 37a05a11f281 Sat Dec 01 00:00:00 2007 +0000
> src/share/classes/javax/management/remote/JMXServiceURL.java: local =
> InetAddress.getLocalHost();
> [marbug at server1 jdk]$ cd ../../jdk8/jdk/
> [marbug at server1 jdk]$ pwd && hg annotate -f -a -u -d -n -c
> ./src/share/classes/javax/management/remote/JMXServiceURL.java | grep
> 'local = InetAddress.getLocalHost();'
> /home/marbug/cpp/jab/tmp/jdk8/jdk
> duke 0 37a05a11f281 Sat Dec 01 00:00:00 2007 +0000
> src/share/classes/javax/management/remote/JMXServiceURL.java: local =
> InetAddress.getLocalHost();
> [marbug at server1 jdk]$ cd ../../jdk9/jdk/
> [marbug at server1 jdk]$ pwd && hg annotate -f -a -u -d -n -c
> ./src/share/classes/javax/management/remote/JMXServiceURL.java | grep
> 'local = InetAddress.getLocalHost();'
> /home/marbug/cpp/jab/tmp/jdk9/jdk
> duke 0 37a05a11f281 Sat Dec 01 00:00:00 2007 +0000
> src/share/classes/javax/management/remote/JMXServiceURL.java: local =
> InetAddress.getLocalHost();
>
> So the expected behaviour is just my conslusion/suggestion.
>
>
> Jaroslav Bachorík
> <https://bugs.openjdk.java.net/secure/ViewProfile.jspa?name=jbachorik>added
> a comment -2014-01-22 04:32
> I would argue that workaround should be L - it is easy to fix the
> hostname and the solution is persistent. If the reporter can describe
> a situation where fixing the hostname is not an option the workaround
> should stay at M.
>
> As I understand you suggest to fix hostname and/or an appropriate
> record in /etc/hosts (under Linux).
> Everyone suggest this in 'google search'... :( But IMHO it's not an
> option because:
>
> 1) As far as I know no one must have root access to run programs with
> JMX agent.
> 1.1) With this suggestion everyone must have root access (because only
> root or sudo-ed user may change hostname and/or /etc/hosts)
> 1.1.1) What if someone do not have root access to his PC (some
> companies do not allow to install additional software without their
> permissions)?
> 1.1.2) Will you add the appropriate note to the 'Install' section in
> Java manual/documentation? Or should everyone just google this
> exception to find the fix of this issue? :)
>
> 2) Indeed Agent does not use hostname or it's IP to run JMX server
> (please take a look at my original post)
> 2.1) If Agent does not use it (i.e. hostname/IP) then why should it
> depend on it?
>
> 3) Why should I change hostname if other services work correctly
> without it?
> 3.1) OS ignores that hostname can't be resolved to some IP and is
> started successfully
> 3.2) Apache does so too (because it listens on 0.0.0.0 in IPv4)
> 3.3) SSH server as well ...
> 3.4) etc., etc., etc.
> 3.5) but java throws an exception
> IMHO this does not follow the 'general' scheme ;)
>
> 4) How about JMX client (i.e. "Connecting to the JMX Agent
> Programmatically ")?
> http://docs.oracle.com/javase/7/docs/technotes/guides/management/agent.html#gdevg
>
> STR:
> 4.1) server1 is behind NAT (example 1: on my VM, example 2: in Amazon
> Cloud)
> 4.2) port mapping is configured from external IP to the local one
> (i.e. there is only local network IP on interface)
> 4.3) I have associated my hostname (for instance,
> server1.customer22.example.com) with 127.0.0.1 ( Is it a good idea to
> do this in Amazon Cloud? IMHO no. ;) )
> 4.4) I start a program (Cassandra, Program4STR, etc.) via Agent
> 4.5) if someone will change a record for
> server1.customer22.example.com to the correct external IP then why
> should agent connect to external IP instead of local one? :)
> 4.5.1) if I run client on server1 then it's enough to connect to
> localhost instead of external IP. Isn't it?
> 4.5.2) if I start client on another PC then in any case I'll pass the
> needed value in 'host' parameter to JMXServiceURL(...)
>
> 5) etc., etc., etc. (see examples from my original post and imagine
> how client will connect to JMX server in each case)
>
>
> Indeed the decision is 'up to you' but IMHO making the suggested
> change will simplify everything, save time of many people (they will
> not need to change hostname and/or /etc/hosts), google will deprecate
> search of ' Error: Exception thrown by the agent :
> java.net.MalformedURLException: Local host name unknown:' string and
> at least several developers and system administrators will be happy
> not to take care about hostname ... At least for Java and programs
> which use Agent ;)
>
>
> Thanks
>
More information about the jdk7u-dev
mailing list