[hornetq-commits] JBoss hornetq SVN: r11782 - branches/Branch_2_2_EAP/src/main/org/hornetq/core/client/impl.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Nov 28 23:01:26 EST 2011


Author: clebert.suconic
Date: 2011-11-28 23:01:26 -0500 (Mon, 28 Nov 2011)
New Revision: 11782

Modified:
   branches/Branch_2_2_EAP/src/main/org/hornetq/core/client/impl/ServerLocatorImpl.java
Log:
JBPAPP-7606 - fixing NPE that happened on the replicator

Modified: branches/Branch_2_2_EAP/src/main/org/hornetq/core/client/impl/ServerLocatorImpl.java
===================================================================
--- branches/Branch_2_2_EAP/src/main/org/hornetq/core/client/impl/ServerLocatorImpl.java	2011-11-28 19:19:19 UTC (rev 11781)
+++ branches/Branch_2_2_EAP/src/main/org/hornetq/core/client/impl/ServerLocatorImpl.java	2011-11-29 04:01:26 UTC (rev 11782)
@@ -58,6 +58,7 @@
 public class ServerLocatorImpl implements ServerLocatorInternal, DiscoveryListener, Serializable
 {
    /*needed for backward compatibility*/
+   @SuppressWarnings("unused")
    private final Set<ClusterTopologyListener> topologyListeners = new HashSet<ClusterTopologyListener>();
 
    /*end of compatibility fixes*/
@@ -82,7 +83,7 @@
 
    private final Set<ClientSessionFactoryInternal> connectingFactories = new HashSet<ClientSessionFactoryInternal>();
 
-   private TransportConfiguration[] initialConnectors;
+   private volatile TransportConfiguration[] initialConnectors;
 
    private DiscoveryGroupConfiguration discoveryGroupConfiguration;
 
@@ -583,12 +584,15 @@
 
    public ClientSessionFactoryInternal connect() throws Exception
    {
-      // static list of initial connectors
-      if (initialConnectors != null && discoveryGroup == null)
+      synchronized (this)
       {
-         ClientSessionFactoryInternal sf = (ClientSessionFactoryInternal)staticConnector.connect();
-         addFactory(sf);
-         return sf;
+         // static list of initial connectors
+         if (initialConnectors != null && discoveryGroup == null)
+         {
+            ClientSessionFactoryInternal sf = (ClientSessionFactoryInternal)staticConnector.connect();
+            addFactory(sf);
+            return sf;
+         }
       }
       // wait for discovery group to get the list of initial connectors
       return (ClientSessionFactoryInternal)createSessionFactory();
@@ -1454,6 +1458,7 @@
              "]";
    }
 
+   @SuppressWarnings("unchecked")
    private synchronized void updateArraysAndPairs()
    {
       Collection<TopologyMember> membersCopy = topology.getMembers();
@@ -1472,13 +1477,14 @@
    {
       List<DiscoveryEntry> newConnectors = discoveryGroup.getDiscoveryEntries();
 
-      this.initialConnectors = (TransportConfiguration[])Array.newInstance(TransportConfiguration.class,
+      
+      TransportConfiguration[] newInitialconnectors = (TransportConfiguration[])Array.newInstance(TransportConfiguration.class,
                                                                            newConnectors.size());
 
       int count = 0;
       for (DiscoveryEntry entry : newConnectors)
       {
-         this.initialConnectors[count++] = entry.getConnector();
+         newInitialconnectors[count++] = entry.getConnector();
 
          if (ha && topology.getMember(entry.getNodeID()) == null)
          {
@@ -1487,18 +1493,35 @@
             topology.updateMember(0, entry.getNodeID(), member);
          }
       }
+      
+      this.initialConnectors = newInitialconnectors;
 
       if (clusterConnection && !receivedTopology && initialConnectors.length > 0)
       {
-         // FIXME the node is alone in the cluster. We create a connection to the new node
+         // The node is alone in the cluster. We create a connection to the new node
          // to trigger the node notification to form the cluster.
-         try
+         
+         Runnable connectRunnable = new Runnable()
          {
-            connect();
+            public void run()
+            {
+               try
+               {
+                  connect();
+               }
+               catch (Exception e)
+               {
+                  log.warn(e.getMessage(), e);
+               }
+            }
+         };
+         if (startExecutor != null)
+         {
+            startExecutor.execute(connectRunnable);
          }
-         catch (Exception e)
+         else
          {
-            e.printStackTrace(); // To change body of catch statement use File | Settings | File Templates.
+            connectRunnable.run();
          }
       }
    }



More information about the hornetq-commits mailing list