[ 
https://issues.apache.org/activemq/browse/AMQ-2771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=60023#action_60023
 ] 

Dave Lindquist commented on AMQ-2771:
-------------------------------------

The comments in the code seem to indicate that this is done to handle certain 
O/S (Mac) that do not let you connect to the local name?

I'm thinking that the code should look more like:

{code:title=TcpTransport.java}
...
protected String resolveHostName(String host) throws UnknownHostException {
        String localName = InetAddress.getLocalHost().getHostName();
        if (localName != null && isUseLocalHost()) {
            if (localName.equals(host) && 
InetAddress.getByName(host).getHostAddress().equals(InetAddress.getByName("localhost").getHostAddress()))
 {
                return "localhost";
            }
        }
        return host;
    }
...
{code}

The added portion is:
{code}... && 
InetAddress.getByName(host).getHostAddress().equals(InetAddress.getByName("localhost").getHostAddress())
 ...{code}
which will make sure that changing the host to 'localhost' does not change the 
RESOLUTION of the name.  However, I'm not sure if this will then 'break' the 
MacOS case...

To me, the MacOS case sounds like an operating system bug?


Finally, there is an option on TcpTransport called 'setUseLocalHost' -- 
unfortunately, this does not seem to be accessible anywhere?

> Side effect from AMQ-2094, server listens on host name address, client 
> connects to localhost with the same URI
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-2771
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2771
>             Project: ActiveMQ
>          Issue Type: Wish
>    Affects Versions: 5.3.0, 5.3.1, 5.3.2
>            Reporter: Przemek Bruski
>         Attachments: BrokerServiceResolveHostTest.java
>
>
> TcpTransport.java contains the following code:
> {code}
>     protected String resolveHostName(String host) throws UnknownHostException 
> {
>         String localName = InetAddress.getLocalHost().getHostName();
>         if (localName != null && isUseLocalHost()) {
>             if (localName.equals(host)) {
>                 return "localhost";
>             }
>         }
>         return host;
>     }
> {code}
> TcpTransportServer.java contains the following code:
> {code}
>         InetAddress addr = InetAddress.getByName(host);
>         try {
>             this.serverSocket = 
> serverSocketFactory.createServerSocket(bind.getPort(), backlog, addr);
> {code}
> /etc/hosts looks like this:
> {code}
> 127.0.0.1       localhost.localdomain   localhost
> someip       myhostname.mydomain myhostname
> {code}
> Now, if I start server with uri: myhostname.mydomain, the server will listen 
> on someip but the client started on the same host with the same uri will try 
> connect to localhost (and fail).
> I know that useLocalHost can be used to avoid it, but silently connecting to 
> localhost is counterintuitive and does not sound like a valid default 
> behaviour (according to documentation, using localhost instead of the host 
> name is a workaround, the workaround is now effectively default behaviour and 
> breaks valid setups that used to work with 5.2).
> This worked fine on 5.2, since the server bound to all interfaces - but 
> fixing this was obviously the right thing to do.
> Questions:
> 1. Can the default behaviour be changed to one that would work on majority of 
> systems?
> 2. Is the workaround really needed? Maybe it's the local network settings 
> that should be corrected?
> 3. The debug messages are misleading and probably should be changed:
> [ActiveMQ Task] [FailoverTransport:604] urlList 
> connectionList:[tcp://hostname:54663?wireFormat.maxInactivityDuration=300000]
> [ActiveMQ Task] [FailoverTransport:723] Attempting connect to: 
> tcp://hostname:54663?wireFormat.maxInactivityDuration=300000
> [ActiveMQ Task] [FailoverTransport:764] Connect fail to: 
> tcp://hostname:54663?wireFormat.maxInactivityDuration=300000, reason: 
> java.net.ConnectException: Connection refused
> In fact, it was the connection to localhost:54663 that was refused.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to