diff --git a/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java b/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
index 006d65bf85..230f5b1cb7 100644
--- a/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
+++ b/activemq-core/src/main/java/org/apache/activemq/broker/BrokerService.java
@@ -197,7 +197,7 @@ public class BrokerService implements Service {
static {
String localHostName = "localhost";
try {
- localHostName = java.net.InetAddress.getLocalHost().getHostName();
+ localHostName = InetAddressUtil.getLocalHostName();
} catch (UnknownHostException e) {
LOG.error("Failed to resolve localhost");
}
diff --git a/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java b/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java
index 213af6814b..f8aacaac72 100755
--- a/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java
+++ b/activemq-core/src/main/java/org/apache/activemq/broker/region/RegionBroker.java
@@ -64,6 +64,7 @@ import org.apache.activemq.thread.TaskRunnerFactory;
import org.apache.activemq.usage.SystemUsage;
import org.apache.activemq.util.BrokerSupport;
import org.apache.activemq.util.IdGenerator;
+import org.apache.activemq.util.InetAddressUtil;
import org.apache.activemq.util.LongSequenceGenerator;
import org.apache.activemq.util.ServiceStopper;
import org.apache.commons.logging.Log;
@@ -615,7 +616,7 @@ public class RegionBroker extends EmptyBroker {
public String getBrokerName() {
if (brokerName == null) {
try {
- brokerName = java.net.InetAddress.getLocalHost().getHostName().toLowerCase();
+ brokerName = InetAddressUtil.getLocalHostName().toLowerCase();
} catch (Exception e) {
brokerName = "localhost";
}
diff --git a/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java b/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
index 974d83d0b8..fca1ff37ad 100755
--- a/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
+++ b/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransport.java
@@ -40,6 +40,7 @@ import org.apache.activemq.Service;
import org.apache.activemq.transport.Transport;
import org.apache.activemq.transport.TransportLoggerFactory;
import org.apache.activemq.transport.TransportThreadSupport;
+import org.apache.activemq.util.InetAddressUtil;
import org.apache.activemq.util.IntrospectionSupport;
import org.apache.activemq.util.ServiceStopper;
import org.apache.activemq.wireformat.WireFormat;
@@ -400,7 +401,7 @@ public class TcpTransport extends TransportThreadSupport implements Transport, S
// -------------------------------------------------------------------------
protected String resolveHostName(String host) throws UnknownHostException {
if (isUseLocalHost()) {
- String localName = InetAddress.getLocalHost().getHostName();
+ String localName = InetAddressUtil.getLocalHostName();
if (localName != null && localName.equals(host)) {
return "localhost";
}
diff --git a/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java b/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java
index 4fc61b65e6..8a3e249974 100755
--- a/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java
+++ b/activemq-core/src/main/java/org/apache/activemq/transport/tcp/TcpTransportServer.java
@@ -43,6 +43,7 @@ import org.apache.activemq.transport.TransportLoggerFactory;
import org.apache.activemq.transport.TransportServer;
import org.apache.activemq.transport.TransportServerThreadSupport;
import org.apache.activemq.util.IOExceptionSupport;
+import org.apache.activemq.util.InetAddressUtil;
import org.apache.activemq.util.IntrospectionSupport;
import org.apache.activemq.util.ServiceListener;
import org.apache.activemq.util.ServiceStopper;
@@ -332,7 +333,7 @@ public class TcpTransportServer extends TransportServerThreadSupport implements
if (socket.isBound()) {
if (socket.getInetAddress().isAnyLocalAddress()) {
// make it more human readable and useful, an alternative to 0.0.0.0
- result = InetAddress.getLocalHost().getHostName();
+ result = InetAddressUtil.getLocalHostName();
} else {
result = socket.getInetAddress().getCanonicalHostName();
}
diff --git a/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java b/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
index c98a76b9b3..e7664f74e0 100755
--- a/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
+++ b/activemq-core/src/main/java/org/apache/activemq/transport/udp/UdpTransport.java
@@ -39,6 +39,7 @@ import org.apache.activemq.transport.reliable.ExceptionIfDroppedReplayStrategy;
import org.apache.activemq.transport.reliable.ReplayBuffer;
import org.apache.activemq.transport.reliable.ReplayStrategy;
import org.apache.activemq.transport.reliable.Replayer;
+import org.apache.activemq.util.InetAddressUtil;
import org.apache.activemq.util.IntSequenceGenerator;
import org.apache.activemq.util.ServiceStopper;
import org.apache.commons.logging.Log;
@@ -340,7 +341,7 @@ public class UdpTransport extends TransportThreadSupport implements Transport, S
}
protected String resolveHostName(String host) throws UnknownHostException {
- String localName = InetAddress.getLocalHost().getHostName();
+ String localName = InetAddressUtil.getLocalHostName();
if (localName != null && isUseLocalHost()) {
if (localName.equals(host)) {
return "localhost";
diff --git a/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java b/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
index cf2ae6d531..79ff3511da 100755
--- a/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
+++ b/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
@@ -16,7 +16,6 @@
*/
package org.apache.activemq.util;
-import java.net.InetAddress;
import java.net.ServerSocket;
import java.util.concurrent.atomic.AtomicLong;
@@ -51,7 +50,7 @@ public class IdGenerator {
if (canAccessSystemProps) {
try {
- hostName = InetAddress.getLocalHost().getHostName();
+ hostName = InetAddressUtil.getLocalHostName();
ServerSocket ss = new ServerSocket(0);
stub = "-" + ss.getLocalPort() + "-" + System.currentTimeMillis() + "-";
Thread.sleep(100);
diff --git a/activemq-core/src/main/java/org/apache/activemq/util/InetAddressUtil.java b/activemq-core/src/main/java/org/apache/activemq/util/InetAddressUtil.java
new file mode 100644
index 0000000000..a55131aec2
--- /dev/null
+++ b/activemq-core/src/main/java/org/apache/activemq/util/InetAddressUtil.java
@@ -0,0 +1,41 @@
+package org.apache.activemq.util;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+public class InetAddressUtil {
+
+ /**
+ * When using the {@link java.net.InetAddress#getHostName()} method in an
+ * environment where neither a proper DNS lookup nor an /etc/hosts
+ * entry exists for a given host, the following exception will be thrown:
+ *
+ * java.net.UnknownHostException: <hostname>: <hostname>
+ * at java.net.InetAddress.getLocalHost(InetAddress.java:1425)
+ * ...
+ *
+ * Instead of just throwing an UnknownHostException and giving up, this
+ * method grabs a suitable hostname from the exception and prevents the
+ * exception from being thrown. If a suitable hostname cannot be acquired
+ * from the exception, only then is the UnknownHostException thrown.
+ *
+ * @return The hostname
+ * @throws UnknownHostException
+ * @see {@link java.net.InetAddress#getLocalHost()}
+ * @see {@link java.net.InetAddress#getHostName()}
+ */
+ public static String getLocalHostName() throws UnknownHostException {
+ try {
+ return (InetAddress.getLocalHost()).getHostName();
+ } catch (UnknownHostException uhe) {
+ String host = uhe.getMessage(); // host = "hostname: hostname"
+ if (host != null) {
+ int colon = host.indexOf(':');
+ if (colon > 0) {
+ return host.substring(0, colon);
+ }
+ }
+ throw uhe;
+ }
+ }
+}