Repository: activemq Updated Branches: refs/heads/master 1c72579d7 -> e25a6aa8a
Fix for AMQ-5652: IdGenerator not optimal in port restricted environments. We now support configuring via system props activemq.idgenerator.hostname and activemq.idgenerator.localport which are used as the base part of GUIDs. Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/e25a6aa8 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/e25a6aa8 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/e25a6aa8 Branch: refs/heads/master Commit: e25a6aa8a18fbd1e0ada5bfa2b5655b80b053b9e Parents: 1c72579 Author: Hiram Chirino <hi...@hiramchirino.com> Authored: Mon Mar 9 13:45:20 2015 -0400 Committer: Hiram Chirino <hi...@hiramchirino.com> Committed: Mon Mar 9 13:50:04 2015 -0400 ---------------------------------------------------------------------- .../org/apache/activemq/util/IdGenerator.java | 25 +++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/e25a6aa8/activemq-client/src/main/java/org/apache/activemq/util/IdGenerator.java ---------------------------------------------------------------------- diff --git a/activemq-client/src/main/java/org/apache/activemq/util/IdGenerator.java b/activemq-client/src/main/java/org/apache/activemq/util/IdGenerator.java index 3bf10a5..071a35e 100755 --- a/activemq-client/src/main/java/org/apache/activemq/util/IdGenerator.java +++ b/activemq-client/src/main/java/org/apache/activemq/util/IdGenerator.java @@ -35,6 +35,8 @@ public class IdGenerator { private String seed; private final AtomicLong sequence = new AtomicLong(1); private int length; + public static final String PROPERTY_IDGENERATOR_HOSTNAME ="activemq.idgenerator.hostname"; + public static final String PROPERTY_IDGENERATOR_LOCALPORT ="activemq.idgenerator.localport"; public static final String PROPERTY_IDGENERATOR_PORT ="activemq.idgenerator.port"; static { @@ -50,15 +52,26 @@ public class IdGenerator { } if (canAccessSystemProps) { + + hostName = System.getProperty(PROPERTY_IDGENERATOR_HOSTNAME); + int localPort = Integer.parseInt(System.getProperty(PROPERTY_IDGENERATOR_LOCALPORT, "0")); + int idGeneratorPort = 0; ServerSocket ss = null; try { - idGeneratorPort = Integer.parseInt(System.getProperty(PROPERTY_IDGENERATOR_PORT, "0")); - LOG.trace("Using port {}", idGeneratorPort); - hostName = InetAddressUtil.getLocalHostName(); - ss = new ServerSocket(idGeneratorPort); - stub = "-" + ss.getLocalPort() + "-" + System.currentTimeMillis() + "-"; - Thread.sleep(100); + if( hostName!=null ) { + hostName = InetAddressUtil.getLocalHostName(); + } + if( localPort==0 ) { + idGeneratorPort = Integer.parseInt(System.getProperty(PROPERTY_IDGENERATOR_PORT, "0")); + LOG.trace("Using port {}", idGeneratorPort); + ss = new ServerSocket(idGeneratorPort); + localPort = ss.getLocalPort(); + stub = "-" + localPort + "-" + System.currentTimeMillis() + "-"; + Thread.sleep(100); + } else { + stub = "-" + localPort + "-" + System.currentTimeMillis() + "-"; + } } catch (Exception e) { if (LOG.isTraceEnabled()) { LOG.trace("could not generate unique stub by using DNS and binding to local port", e);