[jboss-cvs] JBoss Messaging SVN: r3533 - in trunk: src/main/org/jboss/jms/client/remoting and 4 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 4 08:34:35 EST 2008


Author: jmesnil
Date: 2008-01-04 08:34:35 -0500 (Fri, 04 Jan 2008)
New Revision: 3533

Added:
   trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistrySingleton.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/ConnectorRegistryImpl.java
Modified:
   trunk/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java
   trunk/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java
   trunk/src/main/org/jboss/messaging/core/remoting/NIOConnector.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaService.java
   trunk/tests/src/org/jboss/messaging/core/remoting/test/unit/ConnectorRegistryTest.java
Log:
* extracted interface ConnectorRegistry and moved implementation to o.j.m.core.remoting.impl
* ConnectorRegistry singleton is available from ConnectorRegistrySingleton.REGISTRY

Modified: trunk/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java	2008-01-04 13:31:37 UTC (rev 3532)
+++ trunk/src/main/org/jboss/jms/client/delegate/ClientConnectionFactoryDelegate.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -21,6 +21,8 @@
  */
 package org.jboss.jms.client.delegate;
 
+import static org.jboss.messaging.core.remoting.ConnectorRegistrySingleton.REGISTRY;
+
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.Serializable;
@@ -34,7 +36,6 @@
 import org.jboss.jms.delegate.TopologyResult;
 import org.jboss.jms.exception.MessagingNetworkFailureException;
 import org.jboss.messaging.core.remoting.Client;
-import org.jboss.messaging.core.remoting.ConnectorRegistry;
 import org.jboss.messaging.core.remoting.NIOConnector;
 import org.jboss.messaging.core.remoting.ServerLocator;
 import org.jboss.messaging.core.remoting.wireformat.CreateConnectionRequest;
@@ -211,7 +212,7 @@
       try
       {
          client.disconnect();
-         NIOConnector connector = ConnectorRegistry.removeConnector(new ServerLocator(serverLocatorURI));
+         NIOConnector connector = REGISTRY.removeConnector(new ServerLocator(serverLocatorURI));
          if (connector != null)
             connector.disconnect();
       } catch (Throwable t)
@@ -280,7 +281,7 @@
       try
       {
          ServerLocator locator = new ServerLocator(serverLocatorURI);
-         NIOConnector connector = ConnectorRegistry.getConnector(locator);
+         NIOConnector connector = REGISTRY.getConnector(locator);
          client = new Client(connector, locator);
          client.connect();
       }

Modified: trunk/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java	2008-01-04 13:31:37 UTC (rev 3532)
+++ trunk/src/main/org/jboss/jms/client/remoting/JMSRemotingConnection.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -21,9 +21,10 @@
   */
 package org.jboss.jms.client.remoting;
 
+import static org.jboss.messaging.core.remoting.ConnectorRegistrySingleton.REGISTRY;
+
 import org.jboss.logging.Logger;
 import org.jboss.messaging.core.remoting.Client;
-import org.jboss.messaging.core.remoting.ConnectorRegistry;
 import org.jboss.messaging.core.remoting.NIOConnector;
 import org.jboss.messaging.core.remoting.ServerLocator;
 
@@ -80,7 +81,7 @@
 
       callbackManager = new CallbackManager();
 
-      NIOConnector connector = ConnectorRegistry.getConnector(serverLocator);
+      NIOConnector connector = REGISTRY.getConnector(serverLocator);
       client = new Client(connector, serverLocator);
       client.connect();
 
@@ -97,7 +98,7 @@
       try
       {
          client.disconnect();
-         NIOConnector connector = ConnectorRegistry.removeConnector(serverLocator);
+         NIOConnector connector = REGISTRY.removeConnector(serverLocator);
          if (connector != null)
             connector.disconnect();
       }

Added: trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistrySingleton.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistrySingleton.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistrySingleton.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -0,0 +1,42 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting;
+
+import org.jboss.messaging.core.remoting.impl.ConnectorRegistryImpl;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ * @version <tt>$Revision$</tt>
+ *
+ */
+public class ConnectorRegistrySingleton
+{
+   // Constants -----------------------------------------------------
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   public static final ConnectorRegistry REGISTRY = new ConnectorRegistryImpl();
+   
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   // Z implementation ----------------------------------------------
+
+   // Y overrides ---------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+}

Modified: trunk/src/main/org/jboss/messaging/core/remoting/NIOConnector.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/NIOConnector.java	2008-01-04 13:31:37 UTC (rev 3532)
+++ trunk/src/main/org/jboss/messaging/core/remoting/NIOConnector.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -18,17 +18,13 @@
  */
 public interface NIOConnector
 {
+   NIOSession connect() throws IOException;
 
-   public abstract NIOSession connect() throws IOException;
+   boolean disconnect();
 
-   public abstract boolean disconnect();
+   void addConnectionListener(ConsolidatedRemotingConnectionListener listener);
 
-   public abstract void addConnectionListener(
-         final ConsolidatedRemotingConnectionListener listener);
+   void removeConnectionListener(ConsolidatedRemotingConnectionListener listener);
 
-   public abstract void removeConnectionListener(
-         ConsolidatedRemotingConnectionListener listener);
-
-   public abstract String getServerURI();
-
+   String getServerURI();
 }
\ No newline at end of file

Added: trunk/src/main/org/jboss/messaging/core/remoting/impl/ConnectorRegistryImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/ConnectorRegistryImpl.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/ConnectorRegistryImpl.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -0,0 +1,230 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package org.jboss.messaging.core.remoting.impl;
+
+import static org.jboss.messaging.core.remoting.TransportType.INVM;
+import static org.jboss.messaging.core.remoting.TransportType.TCP;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.jboss.logging.Logger;
+import org.jboss.messaging.core.remoting.ConnectorRegistry;
+import org.jboss.messaging.core.remoting.NIOConnector;
+import org.jboss.messaging.core.remoting.ServerLocator;
+import org.jboss.messaging.core.remoting.TransportType;
+import org.jboss.messaging.core.remoting.impl.invm.INVMConnector;
+import org.jboss.messaging.core.remoting.impl.mina.MinaConnector;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * 
+ * @version <tt>$Revision$</tt>
+ * 
+ */
+public class ConnectorRegistryImpl implements ConnectorRegistry
+{
+   // Constants -----------------------------------------------------
+
+   public static final Logger log = Logger.getLogger(ConnectorRegistryImpl.class);
+
+   // Attributes ----------------------------------------------------
+
+   public Set<ServerLocator> locators = new HashSet<ServerLocator>();
+
+   public Map<ServerLocator, NIOConnectorHolder> connectors = new HashMap<ServerLocator, NIOConnectorHolder>();
+
+   // Static --------------------------------------------------------
+
+   /**
+    * @return <code>true</code> if this locator has not already been registered,
+    *         <code>false</code> else
+    */
+   public boolean register(ServerLocator locator)
+   {
+      return locators.add(locator);
+   }
+
+   /**
+    * @return <code>true</code> if this locator was registered,
+    *         <code>false</code> else
+    */  
+   public boolean unregister(ServerLocator locator)
+   {
+      return locators.remove(locator);
+   }
+
+   public synchronized NIOConnector getConnector(ServerLocator locator)
+   {
+      assert locator != null;
+
+      if (connectors.containsKey(locator))
+      {
+         NIOConnectorHolder holder = connectors.get(locator);
+         holder.increment();
+         NIOConnector connector = holder.getConnector();
+
+         if (log.isDebugEnabled())
+            log.debug("Reuse " + connector.getServerURI() + " to connect to "
+                  + locator + " [count=" + holder.getCount() + "]");
+
+         return connector;
+      }
+
+      // check if the server is in the same vm than the client
+      if (locators.contains(locator))
+      {
+         NIOConnector connector = new INVMConnector(locator.getHost(), locator
+               .getPort());
+
+         if (log.isDebugEnabled())
+            log.debug("Created " + connector.getServerURI() + " to connect to "
+                  + locator);
+
+         NIOConnectorHolder holder = new NIOConnectorHolder(connector);
+         connectors.put(locator, holder);
+         return connector;
+      }
+
+      NIOConnector connector = null;
+
+      TransportType transport = locator.getTransport();
+
+      if (transport == TCP)
+      {
+         connector = new MinaConnector(locator.getTransport(), locator
+               .getHost(), locator.getPort());
+      } else if (transport == INVM)
+      {
+         connector = new INVMConnector(locator.getHost(), locator.getPort());
+      }
+
+      if (connector == null)
+      {
+         throw new IllegalArgumentException(
+               "no connector defined for transport " + transport);
+      }
+
+      if (log.isDebugEnabled())
+         log.debug("Created " + connector.getServerURI() + " to connect to "
+               + locator);
+      
+      NIOConnectorHolder holder = new NIOConnectorHolder(connector);
+      connectors.put(locator, holder);
+      return connector;
+   }
+
+   /**
+    * Decrement the number of references on the NIOConnector corresponding to
+    * the locator.
+    * 
+    * If there is only one reference, remove it from the connectors Map and
+    * returns it. Otherwise return null.
+    * 
+    * @param locator
+    *           a ServerLocator
+    * @return the NIOConnector if there is no longer any references to it or
+    *         <code>null</code>
+    * @throws IllegalStateException
+    *            if no NIOConnector were created for the given locator
+    */
+   public synchronized NIOConnector removeConnector(ServerLocator locator)
+   {
+      assert locator != null;
+
+      NIOConnectorHolder holder = connectors.get(locator);
+      if (holder == null)
+      {
+         throw new IllegalStateException("No Connector were created for "
+               + locator);
+      }
+
+      if (holder.getCount() == 1)
+      {
+         if (log.isDebugEnabled())
+            log.debug("Removed connector for " + locator);
+         connectors.remove(locator);
+         return holder.getConnector();
+      } else
+      {
+         holder.decrement();
+         if (log.isDebugEnabled())
+            log.debug(holder.getCount() + " remaining reference to "
+                  + holder.getConnector().getServerURI() + " to " + locator);
+         return null;
+      }
+   }
+
+   public ServerLocator[] getRegisteredLocators()
+   {
+      Set<ServerLocator> registeredLocators = connectors.keySet();
+      return (ServerLocator[]) registeredLocators
+            .toArray(new ServerLocator[registeredLocators.size()]);
+   }
+
+   public int getConnectorCount(ServerLocator locator)
+   {
+      NIOConnectorHolder holder = connectors.get(locator);
+      if (holder == null)
+      {
+         return 0;
+      }
+      return holder.getCount();
+   }
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+   static class NIOConnectorHolder
+   {
+      private final NIOConnector connector;
+      private int count;
+
+      public NIOConnectorHolder(NIOConnector connector)
+      {
+         assert connector != null;
+
+         this.connector = connector;
+         this.count = 1;
+      }
+
+      public void increment()
+      {
+         assert count > 0;
+
+         count++;
+      }
+
+      public void decrement()
+      {
+         count--;
+
+         assert count > 0;
+      }
+
+      public int getCount()
+      {
+         return count;
+      }
+
+      public NIOConnector getConnector()
+      {
+         return connector;
+      }
+   }
+}

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaService.java	2008-01-04 13:31:37 UTC (rev 3532)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaService.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -6,6 +6,7 @@
  */
 package org.jboss.messaging.core.remoting.impl.mina;
 
+import static org.jboss.messaging.core.remoting.ConnectorRegistrySingleton.REGISTRY;
 import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addCodecFilter;
 import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addLoggingFilter;
 import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addMDCFilter;
@@ -16,7 +17,6 @@
 import org.apache.mina.filter.executor.ExecutorFilter;
 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
 import org.jboss.logging.Logger;
-import org.jboss.messaging.core.remoting.ConnectorRegistry;
 import org.jboss.messaging.core.remoting.PacketDispatcher;
 import org.jboss.messaging.core.remoting.ServerLocator;
 import org.jboss.messaging.core.remoting.TransportType;
@@ -94,7 +94,7 @@
          acceptor.setHandler(new MinaHandler(PacketDispatcher.server));
          acceptor.bind();
          
-         ConnectorRegistry.register(getLocator());
+         REGISTRY.register(getLocator());
       } 
    }
 
@@ -107,7 +107,7 @@
          acceptor.dispose();
          acceptor = null;
          
-         ConnectorRegistry.unregister(getLocator());
+         REGISTRY.unregister(getLocator());
       }    
    }
    

Modified: trunk/tests/src/org/jboss/messaging/core/remoting/test/unit/ConnectorRegistryTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/core/remoting/test/unit/ConnectorRegistryTest.java	2008-01-04 13:31:37 UTC (rev 3532)
+++ trunk/tests/src/org/jboss/messaging/core/remoting/test/unit/ConnectorRegistryTest.java	2008-01-04 13:34:35 UTC (rev 3533)
@@ -14,6 +14,7 @@
 import org.jboss.messaging.core.remoting.ConnectorRegistry;
 import org.jboss.messaging.core.remoting.NIOConnector;
 import org.jboss.messaging.core.remoting.ServerLocator;
+import org.jboss.messaging.core.remoting.impl.ConnectorRegistryImpl;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
@@ -33,30 +34,34 @@
 
    // Public --------------------------------------------------------
    
+   private ConnectorRegistry registry;
+
    @Override
    protected void setUp() throws Exception
    {
-      assertEquals(0, ConnectorRegistry.getRegisteredLocators().length);
+      registry = new ConnectorRegistryImpl();
+      assertEquals(0, registry.getRegisteredLocators().length);
    }
    
    @Override
    protected void tearDown() throws Exception
    {
-      assertEquals(0, ConnectorRegistry.getRegisteredLocators().length);
+      assertEquals(0, registry.getRegisteredLocators().length);
+      registry = null;
    }
    
    public void testLocatorRegistration() throws Exception
    {
       ServerLocator locator = new ServerLocator(TCP, "localhost", PORT);
       
-      assertTrue(ConnectorRegistry.register(locator));
-      assertFalse(ConnectorRegistry.register(locator));
+      assertTrue(registry.register(locator));
+      assertFalse(registry.register(locator));
       
-      assertTrue(ConnectorRegistry.unregister(locator));
-      assertFalse(ConnectorRegistry.unregister(locator));
+      assertTrue(registry.unregister(locator));
+      assertFalse(registry.unregister(locator));
 
-      assertTrue(ConnectorRegistry.register(locator));
-      assertTrue(ConnectorRegistry.unregister(locator));
+      assertTrue(registry.register(locator));
+      assertTrue(registry.unregister(locator));
    }
    
    public void testINVMConnectorFromTCPLocator() throws Exception
@@ -64,15 +69,15 @@
       ServerLocator locator = new ServerLocator(TCP, "localhost", PORT);
       
       // locator is registered -> client and server are in the same vm
-      assertTrue(ConnectorRegistry.register(locator));
+      assertTrue(registry.register(locator));
       
-      NIOConnector connector = ConnectorRegistry.getConnector(locator);
+      NIOConnector connector = registry.getConnector(locator);
       
       assertTrue(connector.getServerURI().startsWith(INVM.toString()));
       
-      assertTrue(ConnectorRegistry.unregister(locator));
+      assertTrue(registry.unregister(locator));
       
-      assertNotNull(ConnectorRegistry.removeConnector(locator));
+      assertNotNull(registry.removeConnector(locator));
    }
    
    
@@ -82,38 +87,38 @@
       
       // locator is not registered -> client and server are not in the same vm
       
-      NIOConnector connector = ConnectorRegistry.getConnector(locator);
+      NIOConnector connector = registry.getConnector(locator);
       
       assertNotNull(connector);
       assertEquals(locator.getURI(), connector.getServerURI());
       
-      assertNotNull(ConnectorRegistry.removeConnector(locator));
+      assertNotNull(registry.removeConnector(locator));
    }
    
    public void testConnectorCount() throws Exception
    {
       ServerLocator locator = new ServerLocator(TCP, "localhost", PORT);
-      assertEquals(0, ConnectorRegistry.getConnectorCount(locator));
+      assertEquals(0, registry.getConnectorCount(locator));
 
-      NIOConnector connector1 = ConnectorRegistry.getConnector(locator);
-      assertEquals(1, ConnectorRegistry.getConnectorCount(locator));
+      NIOConnector connector1 = registry.getConnector(locator);
+      assertEquals(1, registry.getConnectorCount(locator));
 
-      NIOConnector connector2 = ConnectorRegistry.getConnector(locator);
-      assertEquals(2, ConnectorRegistry.getConnectorCount(locator));
+      NIOConnector connector2 = registry.getConnector(locator);
+      assertEquals(2, registry.getConnectorCount(locator));
 
       assertSame(connector1, connector2);
       
-      assertNull(ConnectorRegistry.removeConnector(locator));
-      assertEquals(1, ConnectorRegistry.getConnectorCount(locator));
+      assertNull(registry.removeConnector(locator));
+      assertEquals(1, registry.getConnectorCount(locator));
 
-      NIOConnector connector3 = ConnectorRegistry.getConnector(locator);
-      assertEquals(2, ConnectorRegistry.getConnectorCount(locator));
+      NIOConnector connector3 = registry.getConnector(locator);
+      assertEquals(2, registry.getConnectorCount(locator));
 
       assertSame(connector1, connector3);
       
-      assertNull(ConnectorRegistry.removeConnector(locator));
-      assertNotNull(ConnectorRegistry.removeConnector(locator));
-      assertEquals(0, ConnectorRegistry.getConnectorCount(locator));
+      assertNull(registry.removeConnector(locator));
+      assertNotNull(registry.removeConnector(locator));
+      assertEquals(0, registry.getConnectorCount(locator));
    }
    
    public void testConnectorCount_2() throws Exception
@@ -123,19 +128,19 @@
 
       assertNotSame(locator1, locator2);
       
-      assertEquals(0, ConnectorRegistry.getConnectorCount(locator1));
-      assertEquals(0, ConnectorRegistry.getConnectorCount(locator2));
+      assertEquals(0, registry.getConnectorCount(locator1));
+      assertEquals(0, registry.getConnectorCount(locator2));
 
-      NIOConnector connector1 = ConnectorRegistry.getConnector(locator1);
-      assertEquals(1, ConnectorRegistry.getConnectorCount(locator1));
+      NIOConnector connector1 = registry.getConnector(locator1);
+      assertEquals(1, registry.getConnectorCount(locator1));
 
-      NIOConnector connector2 = ConnectorRegistry.getConnector(locator2);
-      assertEquals(1, ConnectorRegistry.getConnectorCount(locator2));
+      NIOConnector connector2 = registry.getConnector(locator2);
+      assertEquals(1, registry.getConnectorCount(locator2));
       
       assertNotSame(connector1, connector2);
       
-      assertNotNull(ConnectorRegistry.removeConnector(locator1));
-      assertNotNull(ConnectorRegistry.removeConnector(locator2));
+      assertNotNull(registry.removeConnector(locator1));
+      assertNotNull(registry.removeConnector(locator2));
    }
 
    // Package protected ---------------------------------------------




More information about the jboss-cvs-commits mailing list