[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