[jboss-cvs] JBoss Messaging SVN: r4446 - in trunk: docs/userguide/en/modules and 10 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jun 12 10:45:06 EDT 2008


Author: ataylor
Date: 2008-06-12 10:45:06 -0400 (Thu, 12 Jun 2008)
New Revision: 4446

Added:
   trunk/src/main/org/jboss/messaging/core/remoting/Acceptor.java
   trunk/src/main/org/jboss/messaging/core/remoting/AcceptorFactory.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/AcceptorFactoryImpl.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingServiceImpl.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/invm/INVMAcceptor.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaAcceptor.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/AcceptorFactoryImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingServiceImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/mina/
Modified:
   trunk/docs/userguide/en/modules/configuration.xml
   trunk/messaging.iml
   trunk/messaging.ipr
   trunk/src/config/jbm-beans.xml
   trunk/src/config/jbm-standalone-beans.xml
   trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistry.java
   trunk/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java
   trunk/src/main/org/jboss/messaging/core/remoting/RemotingService.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/PacketDispatcherImpl.java
   trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
   trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaServiceTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaSessionTest.java
   trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/ServerKeepAliveTest.java
   trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingConnectionTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/network/ClientNetworkFailureTest.java
Log:
abstracted out the transport implementation from remotingserviceimpl. also added tests

Modified: trunk/docs/userguide/en/modules/configuration.xml
===================================================================
--- trunk/docs/userguide/en/modules/configuration.xml	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/docs/userguide/en/modules/configuration.xml	2008-06-12 14:45:06 UTC (rev 4446)
@@ -289,7 +289,8 @@
       <title>jbm-security.xml</title>
       <para>This configuration file is used to configure users and roles when JBM is running in standalone mode using
          the JBM Security Manager. The Security manager used is a pluggable component whose implementation can be
-         changed by  configuring the appropriate beans configuration file. Refer to the beans configuration section on how to do
+         changed by configuring the appropriate beans configuration file. Refer to the beans configuration section on
+         how to do
          this. A typical jbm-security.xml config looks like:
       </para>
       <programlisting>
@@ -493,7 +494,8 @@
    <section id="configuration.jms">
       <title>jbm-jndi.xml</title>
       <para>This configuration file is used to create destinations and Connection Factories and make them available in
-         JNDI. Note that this is the only configuration file that exposes JMS functionality, the rest of the configuration is 100% JMS agnostic.
+         JNDI. Note that this is the only configuration file that exposes JMS functionality, the rest of the
+         configuration is 100% JMS agnostic.
       </para>
       <para>
          A typical jbm-jndi.xml config looks like:
@@ -867,14 +869,14 @@
             <programlisting>
                <![CDATA[
    <bean name="RemotingService"
-      class="org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl">
-      <constructor>
-         <parameter>
-            <inject bean="Configuration"/>
-         </parameter>
-      </constructor>
-   </bean>
-               ]]>
+                     class="org.jboss.messaging.core.remoting.impl.RemotingServiceImpl">
+                     <constructor>
+                        <parameter>
+                           <inject bean="Configuration"/>
+                        </parameter>
+                     </constructor>
+                  </bean>
+                              ]]>
             </programlisting>
             <para>To replace this pluggable component implement the following interface:</para>
             <programlisting>org.jboss.messaging.core.remoting.RemotingService</programlisting>

Modified: trunk/messaging.iml
===================================================================
--- trunk/messaging.iml	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/messaging.iml	2008-06-12 14:45:06 UTC (rev 4446)
@@ -50,6 +50,7 @@
       <excludeFolder url="file://$MODULE_DIR$/docs/examples/web-service/output" />
       <excludeFolder url="file://$MODULE_DIR$/examples/jms/build" />
       <excludeFolder url="file://$MODULE_DIR$/examples/messaging/build" />
+      <excludeFolder url="file://$MODULE_DIR$/journal-test" />
       <excludeFolder url="file://$MODULE_DIR$/output" />
       <excludeFolder url="file://$MODULE_DIR$/output/classes" />
       <excludeFolder url="file://$MODULE_DIR$/output/etc" />

Modified: trunk/messaging.ipr
===================================================================
--- trunk/messaging.ipr	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/messaging.ipr	2008-06-12 14:45:06 UTC (rev 4446)
@@ -465,13 +465,13 @@
         <root url="jar://$PROJECT_DIR$/thirdparty/sun-javacc/lib/javacc.jar!/" />
         <root url="jar://$PROJECT_DIR$/thirdparty/trove/lib/trove.jar!/" />
         <root url="jar://$PROJECT_DIR$/thirdparty/wutka-dtdparser/lib/dtdparser.jar!/" />
-        <root url="jar://$PROJECT_DIR$/tests/lib/easymock.jar!/" />
         <root url="jar://$PROJECT_DIR$/thirdparty/slf4j/api/lib/slf4j-api-1.4.3.jar!/" />
         <root url="jar://$PROJECT_DIR$/thirdparty/slf4j/log4j/lib/slf4j-log4j12.jar!/" />
         <root url="file://$PROJECT_DIR$/tests/config" />
         <root url="file://$PROJECT_DIR$/tests/jms-tests/config" />
         <root url="file://$PROJECT_DIR$/src/config" />
         <root url="jar://$PROJECT_DIR$/thirdparty/apache-mina/lib/mina-core-2.0.0-M2-20080520.004618-19.jar!/" />
+        <root url="jar://$PROJECT_DIR$/thirdparty/easymock/lib/easymock.jar!/" />
       </CLASSES>
       <JAVADOC />
       <SOURCES>

Modified: trunk/src/config/jbm-beans.xml
===================================================================
--- trunk/src/config/jbm-beans.xml	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/config/jbm-beans.xml	2008-06-12 14:45:06 UTC (rev 4446)
@@ -6,7 +6,7 @@
 
    <bean name="JBMSecurityManager" class="org.jboss.messaging.core.security.impl.JAASSecurityManager"/>
 
-  <!-- <bean name="JBMSecurityManager" class="org.jboss.messaging.core.security.impl.JBMSecurityManagerImpl">
+   <!-- <bean name="JBMSecurityManager" class="org.jboss.messaging.core.security.impl.JBMSecurityManagerImpl">
       <constructor>
          <parameter>false</parameter>
       </constructor>
@@ -21,8 +21,12 @@
       </property>
    </bean>-->
 
-   <bean name="MessagingServerManagement" class="org.jboss.messaging.core.management.impl.MessagingServerManagementImpl">
-      <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=MessagingServerManagement", exposedInterface=org.jboss.messaging.core.management.MessagingServerManagement.class)</annotation>
+   <bean name="MessagingServerManagement"
+         class="org.jboss.messaging.core.management.impl.MessagingServerManagementImpl">
+      <annotation>
+         @org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=MessagingServerManagement",
+         exposedInterface=org.jboss.messaging.core.management.MessagingServerManagement.class)
+      </annotation>
       <property name="messagingServer">
          <inject bean="MessagingServer"/>
       </property>
@@ -34,7 +38,7 @@
       </property>
       <property name="remotingService">
          <inject bean="RemotingService"/>
-      </property> 
+      </property>
       <property name="configuration">
          <inject bean="Configuration"/>
       </property>
@@ -50,17 +54,19 @@
          </parameter>
       </constructor>
    </bean>
-      
-   <bean name="RemotingService" class="org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl">
+
+   <bean name="RemotingService" class="org.jboss.messaging.core.remoting.impl.RemotingServiceImpl">
       <constructor>
          <parameter>
             <inject bean="Configuration"/>
          </parameter>
       </constructor>
    </bean>
-      
+
    <bean name="JMSServerManager" class="org.jboss.messaging.jms.server.impl.JMSServerManagerImpl">
-      <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=JMSServerManager", exposedInterface=org.jboss.messaging.jms.server.JMSServerManager.class)</annotation>
+      <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=JMSServerManager",
+         exposedInterface=org.jboss.messaging.jms.server.JMSServerManager.class)
+      </annotation>
       <property name="messagingServerManagement">
          <inject bean="MessagingServerManagement"/>
       </property>
@@ -74,5 +80,5 @@
          <inject bean="MessagingServer"/>
       </property>
    </bean>
- 
+
 </deployment>
\ No newline at end of file

Modified: trunk/src/config/jbm-standalone-beans.xml
===================================================================
--- trunk/src/config/jbm-standalone-beans.xml	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/config/jbm-standalone-beans.xml	2008-06-12 14:45:06 UTC (rev 4446)
@@ -5,11 +5,17 @@
    <bean name="Naming" class="org.jnp.server.NamingBeanImpl"/>
 
    <bean name="Main" class="org.jnp.server.Main">
-      <property name="namingInfo"><inject bean="Naming"/> </property>
+      <property name="namingInfo">
+         <inject bean="Naming"/>
+      </property>
       <property name="port">1099</property>
-      <property name="bindAddress"><inject bean="Configuration" property="host"/></property>
+      <property name="bindAddress">
+         <inject bean="Configuration" property="host"/>
+      </property>
       <property name="rmiPort">1098</property>
-      <property name="rmiBindAddress"><inject bean="Configuration" property="host"/></property>
+      <property name="rmiBindAddress">
+         <inject bean="Configuration" property="host"/>
+      </property>
    </bean>
 
    <bean name="Configuration" class="org.jboss.messaging.core.config.impl.FileConfiguration"/>
@@ -31,8 +37,12 @@
       </property>
    </bean>
 
-   <bean name="MessagingServerManagement" class="org.jboss.messaging.core.management.impl.MessagingServerManagementImpl">
-      <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=MessagingServerManagement", exposedInterface=org.jboss.messaging.core.management.MessagingServerManagement.class)</annotation>
+   <bean name="MessagingServerManagement"
+         class="org.jboss.messaging.core.management.impl.MessagingServerManagementImpl">
+      <annotation>
+         @org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=MessagingServerManagement",
+         exposedInterface=org.jboss.messaging.core.management.MessagingServerManagement.class)
+      </annotation>
       <property name="messagingServer">
          <inject bean="MessagingServer"/>
       </property>
@@ -61,7 +71,7 @@
       </constructor>
    </bean>
 
-   <bean name="RemotingService" class="org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl">
+   <bean name="RemotingService" class="org.jboss.messaging.core.remoting.impl.RemotingServiceImpl">
       <constructor>
          <parameter>
             <inject bean="Configuration"/>
@@ -70,7 +80,9 @@
    </bean>
 
    <bean name="JMSServerManager" class="org.jboss.messaging.jms.server.impl.JMSServerManagerImpl">
-      <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=JMSServerManager", exposedInterface=org.jboss.messaging.jms.server.JMSServerManager.class)</annotation>
+      <annotation>@org.jboss.aop.microcontainer.aspects.jmx.JMX(name="jboss.messaging:service=JMSServerManager",
+         exposedInterface=org.jboss.messaging.jms.server.JMSServerManager.class)
+      </annotation>
       <property name="messagingServerManagement">
          <inject bean="MessagingServerManagement"/>
       </property>

Added: trunk/src/main/org/jboss/messaging/core/remoting/Acceptor.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/Acceptor.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/Acceptor.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,16 @@
+package org.jboss.messaging.core.remoting;
+
+import org.jboss.messaging.core.remoting.impl.mina.CleanUpNotifier;
+
+/**
+ * An Acceptor is used tby the Remoting Service to allow clients to connect. It should take care of dispatchin client requests
+ * to the Remoting Service's Dispatcher.
+ *
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public interface Acceptor
+{
+   void startAccepting(RemotingService remotingService, CleanUpNotifier cleanupNotifier) throws Exception;
+
+   void stopAccepting();
+}

Added: trunk/src/main/org/jboss/messaging/core/remoting/AcceptorFactory.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/AcceptorFactory.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/AcceptorFactory.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,13 @@
+package org.jboss.messaging.core.remoting;
+
+import org.jboss.messaging.core.config.Configuration;
+
+import java.util.List;
+
+/**
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public interface AcceptorFactory
+{
+   List<Acceptor> createAcceptors(Configuration configuration);
+}

Modified: trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistry.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistry.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/main/org/jboss/messaging/core/remoting/ConnectorRegistry.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -6,29 +6,26 @@
  */
 package org.jboss.messaging.core.remoting;
 
+import org.jboss.messaging.core.client.ConnectionParams;
+import org.jboss.messaging.core.client.Location;
 import org.jboss.messaging.core.config.Configuration;
 import org.jboss.messaging.core.remoting.impl.invm.INVMConnector;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
-import org.jboss.messaging.core.client.Location;
-import org.jboss.messaging.core.client.ConnectionParams;
 
 
 /**
  * The ConnectorRegistry keeps track of Configurations and NIOConnectors.
- * 
- * When a {@link RemotingServiceImpl} is started, it register its {@link Configuration}.
- * 
+ * <p/>
+ * When a {@link org.jboss.messaging.core.remoting.impl.RemotingServiceImpl} is started, it register its {@link Configuration}.
+ * <p/>
  * When a client is created, it gets its {@link NIOConnector} from the
  * ConnectorRegistry using the {@link Configuration} corresponding to the server
  * it wants to connect to. If the ConnectionRegistry contains this Configuration, it
  * implies that the Client is in the same VM than the server. In that case, we
  * optimize by returning a {@link INVMConnector} regardless of the transport
  * type defined by the Configuration
- * 
+ *
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
- * 
  * @version <tt>$Revision$</tt>
- * 
  */
 public interface ConnectorRegistry
 {
@@ -50,16 +47,14 @@
    /**
     * Decrement the number of references on the NIOConnector corresponding to
     * the Configuration.
-    * 
+    * <p/>
     * If there is only one reference, remove it from the connectors Map and
     * returns it. Otherwise return null.
-    * 
-    * @param location
-    *           a Location
+    *
+    * @param location a Location
     * @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 Configuration
+    * @throws IllegalStateException if no NIOConnector were created for the given Configuration
     */
    NIOConnector removeConnector(Location location);
 

Modified: trunk/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/main/org/jboss/messaging/core/remoting/PacketDispatcher.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -8,23 +8,26 @@
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
- *
  * @version <tt>$Revision$</tt>
- *
  */
 public interface PacketDispatcher
 {
    void register(PacketHandler handler);
 
    void unregister(long handlerID);
-   
+
    void setListener(PacketHandlerRegistrationListener listener);
-   
+
    void dispatch(Packet packet, PacketReturner sender) throws Exception;
 
-   /** Call filters on a package */
+   /**
+    * Call filters on a package
+    */
    void callFilters(Packet packet) throws Exception;
-   
+
    long generateID();
 
+   void addInterceptor(Interceptor filter);
+
+   void removeInterceptor(Interceptor filter);
 }
\ No newline at end of file

Modified: trunk/src/main/org/jboss/messaging/core/remoting/RemotingService.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/RemotingService.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/main/org/jboss/messaging/core/remoting/RemotingService.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -11,8 +11,11 @@
 import org.jboss.messaging.core.remoting.impl.mina.ServerKeepAliveFactory;
 import org.jboss.messaging.core.server.MessagingComponent;
 
+import java.util.List;
+
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
  * @version <tt>$Revision$</tt>
  */
 public interface RemotingService extends MessagingComponent
@@ -23,6 +26,10 @@
 
    ServerKeepAliveFactory getKeepAliveFactory();
 
+   List<Acceptor> getAcceptors();
+
+   void setAcceptorFactory(AcceptorFactory acceptorFactory);
+
    void addInterceptor(Interceptor interceptor);
 
    void removeInterceptor(Interceptor interceptor);
@@ -30,4 +37,8 @@
    void addRemotingSessionListener(RemotingSessionListener listener);
 
    void removeRemotingSessionListener(RemotingSessionListener listener);
+
+   void registerPinger(NIOSession session);
+
+   void unregisterPinger(Long id);
 }

Added: trunk/src/main/org/jboss/messaging/core/remoting/impl/AcceptorFactoryImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/AcceptorFactoryImpl.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/AcceptorFactoryImpl.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,56 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005, JBoss Inc., and individual contributors as indicated
+   * by the @authors tag. See the copyright.txt in the distribution for a
+   * full listing of individual contributors.
+   *
+   * This is free software; you can redistribute it and/or modify it
+   * under the terms of the GNU Lesser General Public License as
+   * published by the Free Software Foundation; either version 2.1 of
+   * the License, or (at your option) any later version.
+   *
+   * This software is distributed in the hope that it will be useful,
+   * but WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * Lesser General Public License for more details.
+   *
+   * You should have received a copy of the GNU Lesser General Public
+   * License along with this software; if not, write to the Free
+   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+   */
+package org.jboss.messaging.core.remoting.impl;
+
+import org.jboss.messaging.core.config.Configuration;
+import org.jboss.messaging.core.remoting.Acceptor;
+import org.jboss.messaging.core.remoting.AcceptorFactory;
+import org.jboss.messaging.core.remoting.TransportType;
+import org.jboss.messaging.core.remoting.impl.invm.INVMAcceptor;
+import org.jboss.messaging.core.remoting.impl.mina.MinaAcceptor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public class AcceptorFactoryImpl implements AcceptorFactory
+{
+   public List<Acceptor> createAcceptors(Configuration configuration)
+   {
+      List<Acceptor> acceptors = new ArrayList<Acceptor>();
+      if (TransportType.TCP.equals(configuration.getTransport()))
+      {
+         acceptors.add(new MinaAcceptor());
+         if (!configuration.isInvmDisabled())
+         {
+            acceptors.add(new INVMAcceptor());
+         }
+      }
+      else if (TransportType.INVM.equals(configuration.getTransport()))
+      {
+         acceptors.add(new INVMAcceptor());
+      }
+      return acceptors;
+   }
+}

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/PacketDispatcherImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/PacketDispatcherImpl.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/PacketDispatcherImpl.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -6,28 +6,22 @@
  */
 package org.jboss.messaging.core.remoting.impl;
 
+import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.remoting.*;
 import static org.jboss.messaging.core.remoting.Packet.NO_ID_SET;
+import org.jboss.messaging.core.remoting.impl.wireformat.EmptyPacket;
 
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.jboss.messaging.core.logging.Logger;
-import org.jboss.messaging.core.remoting.Interceptor;
-import org.jboss.messaging.core.remoting.Packet;
-import org.jboss.messaging.core.remoting.PacketDispatcher;
-import org.jboss.messaging.core.remoting.PacketHandler;
-import org.jboss.messaging.core.remoting.PacketHandlerRegistrationListener;
-import org.jboss.messaging.core.remoting.PacketReturner;
-import org.jboss.messaging.core.remoting.impl.wireformat.EmptyPacket;
-
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>.
- * 
  * @version <tt>$Revision$</tt>
  */
 public class PacketDispatcherImpl implements PacketDispatcher
@@ -38,18 +32,20 @@
    private static final long serialVersionUID = -4626926952268528384L;
 
    public static final Logger log = Logger
-         .getLogger(PacketDispatcherImpl.class);
+           .getLogger(PacketDispatcherImpl.class);
 
    private static boolean trace = log.isTraceEnabled();
 
    // Attributes ----------------------------------------------------
 
    private final Map<Long, PacketHandler> handlers;
-   public final List<Interceptor> filters;
+
    private transient PacketHandlerRegistrationListener listener;
 
    private final AtomicLong idSequence = new AtomicLong(0);
 
+   private List<Interceptor> filters = new CopyOnWriteArrayList<Interceptor>();
+
    // Static --------------------------------------------------------
 
    // Constructors --------------------------------------------------
@@ -57,7 +53,10 @@
    public PacketDispatcherImpl(final List<Interceptor> filters)
    {
       handlers = new ConcurrentHashMap<Long, PacketHandler>();
-      this.filters = filters;
+      if (filters != null)
+      {
+         this.filters.addAll(filters);
+      }
    }
 
    // Public --------------------------------------------------------
@@ -82,7 +81,7 @@
       if (trace)
       {
          log.trace("registered " + handler + " with ID " + handler.getID()
-               + " (" + this + ")");
+                 + " (" + this + ")");
       }
 
       if (listener != null)
@@ -120,14 +119,24 @@
       return handlers.get(handlerID);
    }
 
+   public void addInterceptor(Interceptor filter)
+   {
+      filters.add(filter);
+   }
+
+   public void removeInterceptor(Interceptor filter)
+   {
+      filters.remove(filter);
+   }
+
    public void dispatch(final Packet packet, final PacketReturner sender)
-         throws Exception
+           throws Exception
    {
       long targetID = packet.getTargetID();
       if (NO_ID_SET == targetID)
       {
          log.error("Packet is not handled, it has no targetID: " + packet
-               + ": " + System.identityHashCode(packet));
+                 + ": " + System.identityHashCode(packet));
          return;
       }
       PacketHandler handler = getHandler(targetID);
@@ -148,7 +157,9 @@
       }
    }
 
-   /** Call filters on a package */
+   /**
+    * Call filters on a package
+    */
    public void callFilters(Packet packet) throws Exception
    {
       if (filters != null)
@@ -171,13 +182,13 @@
       if (log.isDebugEnabled())
       {
          StringBuffer buf = new StringBuffer("Registered PacketHandlers ("
-               + this + "):\n");
+                 + this + "):\n");
          Iterator<Entry<Long, PacketHandler>> iterator = handlers.entrySet()
-               .iterator();
+                 .iterator();
          while (iterator.hasNext())
          {
             Map.Entry<java.lang.Long, org.jboss.messaging.core.remoting.PacketHandler> entry = (Map.Entry<java.lang.Long, org.jboss.messaging.core.remoting.PacketHandler>) iterator
-                  .next();
+                    .next();
             buf.append(entry.getKey() + " : " + entry.getValue() + "\n");
          }
          log.debug(buf.toString());

Copied: trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingServiceImpl.java (from rev 4425, trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/RemotingServiceImpl.java)
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingServiceImpl.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingServiceImpl.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,218 @@
+/*
+ * 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 org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+import org.jboss.messaging.core.client.RemotingSessionListener;
+import org.jboss.messaging.core.config.Configuration;
+import org.jboss.messaging.core.exception.MessagingException;
+import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.ping.Pinger;
+import org.jboss.messaging.core.ping.impl.PingerImpl;
+import org.jboss.messaging.core.remoting.*;
+import static org.jboss.messaging.core.remoting.impl.RemotingConfigurationValidator.validate;
+import org.jboss.messaging.core.remoting.impl.mina.CleanUpNotifier;
+import org.jboss.messaging.core.remoting.impl.mina.ServerKeepAliveFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.*;
+
+/**
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ * @author <a href="mailto:ataylor at redhat.com">Andy Taylor</a>
+ * @version <tt>$Revision$</tt>
+ */
+public class RemotingServiceImpl implements RemotingService, CleanUpNotifier
+{
+   // Constants -----------------------------------------------------
+
+   private static final Logger log = Logger.getLogger(RemotingServiceImpl.class);
+
+   // Attributes ----------------------------------------------------
+
+   private boolean started = false;
+
+   private Configuration config;
+
+   private List<Acceptor> acceptors = null;
+
+   private final PacketDispatcher dispatcher;
+
+   private List<RemotingSessionListener> listeners = new ArrayList<RemotingSessionListener>();
+
+   private ServerKeepAliveFactory factory;
+
+   private ScheduledExecutorService scheduledExecutor;
+
+   private Map<Long, ScheduledFuture<?>> currentScheduledPingers;
+
+   private Map<Long, Pinger> currentPingers;
+
+   private AcceptorFactory acceptorFactory = new AcceptorFactoryImpl();
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   public RemotingServiceImpl(Configuration config)
+   {
+      this(config, new ServerKeepAliveFactory());
+   }
+
+   public RemotingServiceImpl(Configuration config, ServerKeepAliveFactory factory)
+   {
+      assert config != null;
+      assert factory != null;
+
+      validate(config);
+
+      this.config = config;
+      this.factory = factory;
+      dispatcher = new PacketDispatcherImpl(null);
+
+      scheduledExecutor = new ScheduledThreadPoolExecutor(config.getScheduledThreadPoolMaxSize());
+      currentScheduledPingers = new ConcurrentHashMap<Long, ScheduledFuture<?>>();
+      currentPingers = new ConcurrentHashMap<Long, Pinger>();
+   }
+
+   @Install
+   public void addInterceptor(Interceptor filter)
+   {
+      dispatcher.addInterceptor(filter);
+   }
+
+   @Uninstall
+   public void removeInterceptor(Interceptor filter)
+   {
+      dispatcher.removeInterceptor(filter);
+   }
+
+   public void addRemotingSessionListener(RemotingSessionListener listener)
+   {
+      assert listener != null;
+
+      listeners.add(listener);
+   }
+
+   public void removeRemotingSessionListener(RemotingSessionListener listener)
+   {
+      assert listener != null;
+
+      listeners.remove(listener);
+   }
+
+   // TransportService implementation -------------------------------
+
+   public void start() throws Exception
+   {
+      if (started)
+      {
+         return;
+      }
+      if (log.isDebugEnabled())
+      {
+         log.debug("Start RemotingServiceImpl with configuration:" + config);
+      }
+
+      acceptors = acceptorFactory.createAcceptors(config);
+      for (Acceptor acceptor : acceptors)
+      {
+         acceptor.startAccepting(this, this);
+      }
+
+      started = true;
+   }
+
+   public void stop()
+   {
+      for (Acceptor acceptor : acceptors)
+      {
+         acceptor.stopAccepting();
+      }
+
+      ConnectorRegistryFactory.getRegistry().unregister(config.getLocation());
+
+      started = false;
+   }
+
+   public PacketDispatcher getDispatcher()
+   {
+      return dispatcher;
+   }
+
+   public Configuration getConfiguration()
+   {
+      return config;
+   }
+
+   public ServerKeepAliveFactory getKeepAliveFactory()
+   {
+      return factory;
+   }
+
+   public List<Acceptor> getAcceptors()
+   {
+      return acceptors;
+   }
+
+   public void setAcceptorFactory(AcceptorFactory acceptorFactory)
+   {
+      this.acceptorFactory = acceptorFactory;
+   }
+
+
+   public void registerPinger(NIOSession session)
+   {
+      ResponseHandler pongHandler = new ResponseHandlerImpl(dispatcher.generateID());
+      Pinger pinger = new PingerImpl(getDispatcher(), session, config.getKeepAliveTimeout(), pongHandler, RemotingServiceImpl.this);
+      ScheduledFuture<?> future = scheduledExecutor.scheduleAtFixedRate(pinger, config.getKeepAliveInterval(), config.getKeepAliveInterval(), TimeUnit.MILLISECONDS);
+      currentScheduledPingers.put(session.getID(), future);
+      currentPingers.put(session.getID(), pinger);
+      factory.getSessions().add(session.getID());
+   }
+
+   public void unregisterPinger(Long id)
+   {
+      ScheduledFuture<?> future = currentScheduledPingers.remove(id);
+      if (future != null)
+      {
+         future.cancel(true);
+      }
+      Pinger pinger = currentPingers.remove(id);
+      if (pinger != null)
+      {
+         pinger.close();
+      }
+   }
+
+   // FailureNotifier implementation -------------------------------
+   public void fireCleanup(long sessionID, MessagingException me)
+   {
+      if (factory.getSessions().contains(sessionID))
+      {
+         for (RemotingSessionListener listener : listeners)
+         {
+            listener.sessionDestroyed(sessionID, me);
+         }
+         factory.getSessions().remove(sessionID);
+      }
+   }
+
+   // Public --------------------------------------------------------
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+}
\ No newline at end of file

Added: trunk/src/main/org/jboss/messaging/core/remoting/impl/invm/INVMAcceptor.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/invm/INVMAcceptor.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/invm/INVMAcceptor.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,53 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005, JBoss Inc., and individual contributors as indicated
+   * by the @authors tag. See the copyright.txt in the distribution for a
+   * full listing of individual contributors.
+   *
+   * This is free software; you can redistribute it and/or modify it
+   * under the terms of the GNU Lesser General Public License as
+   * published by the Free Software Foundation; either version 2.1 of
+   * the License, or (at your option) any later version.
+   *
+   * This software is distributed in the hope that it will be useful,
+   * but WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * Lesser General Public License for more details.
+   *
+   * You should have received a copy of the GNU Lesser General Public
+   * License along with this software; if not, write to the Free
+   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+   */
+package org.jboss.messaging.core.remoting.impl.invm;
+
+import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.remoting.Acceptor;
+import org.jboss.messaging.core.remoting.ConnectorRegistryFactory;
+import org.jboss.messaging.core.remoting.RemotingService;
+import org.jboss.messaging.core.remoting.impl.mina.CleanUpNotifier;
+
+/**
+ * An INVM Acceptor. This will allow connections from within the same VM via the ConnectorRegistry
+ *
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+//todo this will work in conjunction with the INVMConnector, packets will be serialised instead of passed by reference directly to the dispatcher 
+public class INVMAcceptor implements Acceptor
+{
+   private static final Logger log = Logger.getLogger(INVMAcceptor.class);
+
+   private RemotingService remotingService;
+
+   public void startAccepting(RemotingService remotingService, CleanUpNotifier cleanupNotifier) throws Exception
+   {
+      this.remotingService = remotingService;
+      log.info("Registering INVMAcceptor with location:" + remotingService.getConfiguration().getLocation());
+      ConnectorRegistryFactory.getRegistry().register(remotingService.getConfiguration().getLocation(), remotingService.getDispatcher());
+   }
+
+   public void stopAccepting()
+   {
+      ConnectorRegistryFactory.getRegistry().unregister(remotingService.getConfiguration().getLocation());
+   }
+}

Added: trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaAcceptor.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaAcceptor.java	                        (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MinaAcceptor.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,159 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005, JBoss Inc., and individual contributors as indicated
+   * by the @authors tag. See the copyright.txt in the distribution for a
+   * full listing of individual contributors.
+   *
+   * This is free software; you can redistribute it and/or modify it
+   * under the terms of the GNU Lesser General Public License as
+   * published by the Free Software Foundation; either version 2.1 of
+   * the License, or (at your option) any later version.
+   *
+   * This software is distributed in the hope that it will be useful,
+   * but WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * Lesser General Public License for more details.
+   *
+   * You should have received a copy of the GNU Lesser General Public
+   * License along with this software; if not, write to the Free
+   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+   */
+package org.jboss.messaging.core.remoting.impl.mina;
+
+import org.apache.mina.common.*;
+import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
+import org.jboss.messaging.core.remoting.Acceptor;
+import org.jboss.messaging.core.remoting.RemotingService;
+import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addCodecFilter;
+import static org.jboss.messaging.core.remoting.impl.mina.FilterChainSupport.addSSLFilter;
+
+import java.net.InetSocketAddress;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * A Mina TCP Acceptor that supports SSL
+ *
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public class MinaAcceptor implements Acceptor
+{
+   private ExecutorService threadPool;
+   private NioSocketAcceptor acceptor;
+   private IoServiceListener acceptorListener;
+   private CleanUpNotifier cleanupNotifier;
+   private RemotingService remotingService;
+
+   public void startAccepting(RemotingService remotingService, CleanUpNotifier cleanupNotifier) throws Exception
+   {
+      this.remotingService = remotingService;
+      this.cleanupNotifier = cleanupNotifier;
+      acceptor = new NioSocketAcceptor();
+
+      acceptor.setSessionDataStructureFactory(new MessagingIOSessionDataStructureFactory());
+
+      DefaultIoFilterChainBuilder filterChain = acceptor.getFilterChain();
+
+      // addMDCFilter(filterChain);
+      if (remotingService.getConfiguration().isSSLEnabled())
+      {
+         addSSLFilter(filterChain, false, remotingService.getConfiguration().getKeyStorePath(),
+                 remotingService.getConfiguration().getKeyStorePassword(), remotingService.getConfiguration()
+                 .getTrustStorePath(), remotingService.getConfiguration()
+                 .getTrustStorePassword());
+      }
+      addCodecFilter(filterChain);
+
+      // Bind
+      acceptor.setDefaultLocalAddress(new InetSocketAddress(remotingService.getConfiguration().getHost(), remotingService.getConfiguration().getPort()));
+      acceptor.getSessionConfig().setTcpNoDelay(remotingService.getConfiguration().isTcpNoDelay());
+      int receiveBufferSize = remotingService.getConfiguration().getTcpReceiveBufferSize();
+      if (receiveBufferSize != -1)
+      {
+         acceptor.getSessionConfig().setReceiveBufferSize(receiveBufferSize);
+      }
+      int sendBufferSize = remotingService.getConfiguration().getTcpSendBufferSize();
+      if (sendBufferSize != -1)
+      {
+         acceptor.getSessionConfig().setSendBufferSize(sendBufferSize);
+      }
+      acceptor.setReuseAddress(true);
+      acceptor.getSessionConfig().setReuseAddress(true);
+      acceptor.getSessionConfig().setKeepAlive(true);
+      acceptor.setCloseOnDeactivation(false);
+
+      threadPool = Executors.newCachedThreadPool();
+      acceptor.setHandler(new MinaHandler(remotingService.getDispatcher(), threadPool, cleanupNotifier, true, true));
+      acceptor.bind();
+      acceptorListener = new MinaSessionListener();
+      acceptor.addListener(acceptorListener);
+   }
+
+   public void stopAccepting()
+   {
+      if (acceptor != null)
+      {
+         // remove the listener before disposing the acceptor
+         // so that we're not notified when the sessions are destroyed
+         acceptor.removeListener(acceptorListener);
+         acceptor.unbind();
+         acceptor.dispose();
+         acceptor = null;
+         threadPool.shutdown();
+      }
+   }
+
+   /**
+    * This method must only be called by tests which requires
+    * to insert Filters (e.g. to simulate network failures)
+    */
+   public DefaultIoFilterChainBuilder getFilterChain()
+   {
+      assert acceptor != null;
+
+      return acceptor.getFilterChain();
+   }
+
+   private final class MinaSessionListener implements IoServiceListener
+   {
+
+      public void serviceActivated(IoService service)
+      {
+      }
+
+      public void serviceDeactivated(IoService service)
+      {
+      }
+
+      public void serviceIdle(IoService service, IdleStatus idleStatus)
+      {
+      }
+
+      /**
+       * register a pinger for the new client
+       *
+       * @param session
+       */
+      public void sessionCreated(IoSession session)
+      {
+         //register pinger
+         if (remotingService.getConfiguration().getKeepAliveInterval() > 0)
+         {
+            remotingService.registerPinger(new MinaSession(session, null));
+         }
+      }
+
+      /**
+       * unregister the pinger
+       *
+       * @param session
+       */
+      public void sessionDestroyed(IoSession session)
+      {
+         remotingService.unregisterPinger(session.getId());
+         cleanupNotifier.fireCleanup(session.getId(), null);
+      }
+   }
+
+}

Modified: trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -40,7 +40,7 @@
 import org.jboss.messaging.core.remoting.Interceptor;
 import org.jboss.messaging.core.remoting.PacketReturner;
 import org.jboss.messaging.core.remoting.RemotingService;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.impl.wireformat.CreateConnectionResponse;
 import org.jboss.messaging.core.security.JBMSecurityManager;
 import org.jboss.messaging.core.security.Role;

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaServiceTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaServiceTest.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaServiceTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -1,22 +1,20 @@
 package org.jboss.messaging.tests.integration.core.remoting.mina;
 
-import static org.jboss.messaging.core.remoting.TransportType.INVM;
-import static org.jboss.messaging.core.remoting.TransportType.TCP;
-
-import java.io.IOException;
-
 import junit.framework.TestCase;
-
 import org.jboss.messaging.core.client.impl.LocationImpl;
 import org.jboss.messaging.core.config.impl.ConfigurationImpl;
 import org.jboss.messaging.core.remoting.NIOConnector;
 import org.jboss.messaging.core.remoting.NIOSession;
 import org.jboss.messaging.core.remoting.RemotingService;
+import static org.jboss.messaging.core.remoting.TransportType.INVM;
+import static org.jboss.messaging.core.remoting.TransportType.TCP;
 import org.jboss.messaging.core.remoting.impl.PacketDispatcherImpl;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.impl.invm.INVMConnector;
 import org.jboss.messaging.core.remoting.impl.mina.MinaConnector;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
 
+import java.io.IOException;
+
 public class MinaServiceTest extends TestCase
 {
    // Constants -----------------------------------------------------
@@ -45,13 +43,14 @@
    public void _testMinaConnector_Failure() throws Exception
    {
       NIOConnector connector = new MinaConnector(new LocationImpl(
-            TCP, "localhost", 9000), new PacketDispatcherImpl(null));
+              TCP, "localhost", 9000), new PacketDispatcherImpl(null));
 
       try
       {
          connector.connect();
          fail("MINA service started in invm: can not connect to it through TCP");
-      } catch (IOException e)
+      }
+      catch (IOException e)
       {
 
       }

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaSessionTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaSessionTest.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/MinaSessionTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -6,22 +6,19 @@
  */
 package org.jboss.messaging.tests.integration.core.remoting.mina;
 
-import static org.jboss.messaging.core.remoting.TransportType.TCP;
-
 import org.jboss.messaging.core.client.impl.LocationImpl;
 import org.jboss.messaging.core.config.Configuration;
 import org.jboss.messaging.core.remoting.NIOConnector;
 import org.jboss.messaging.core.remoting.PacketDispatcher;
+import static org.jboss.messaging.core.remoting.TransportType.TCP;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.impl.mina.MinaConnector;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
 import org.jboss.messaging.tests.unit.core.remoting.impl.ConfigurationHelper;
 import org.jboss.messaging.tests.unit.core.remoting.impl.SessionTestBase;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
- *
  * @version <tt>$Revision$</tt>
- *
  */
 public class MinaSessionTest extends SessionTestBase
 {
@@ -37,15 +34,15 @@
    // Constructors --------------------------------------------------
 
    // Public --------------------------------------------------------
- 
+
    // ClientTestBase overrides --------------------------------------
-   
+
    @Override
    protected NIOConnector createNIOConnector(PacketDispatcher dispatcher)
    {
       return new MinaConnector(new LocationImpl(TCP, "localhost", TestSupport.PORT), dispatcher);
    }
-   
+
    @Override
    protected Configuration createRemotingConfiguration()
    {
@@ -65,7 +62,7 @@
    {
       service.stop();
    }
-   
+
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/ServerKeepAliveTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/ServerKeepAliveTest.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/core/remoting/mina/ServerKeepAliveTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -12,8 +12,8 @@
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.remoting.NIOSession;
 import org.jboss.messaging.core.remoting.impl.PacketDispatcherImpl;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.impl.mina.MinaConnector;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.impl.mina.ServerKeepAliveFactory;
 import org.jboss.messaging.core.remoting.impl.wireformat.Ping;
 import org.jboss.messaging.core.remoting.impl.wireformat.Pong;

Modified: trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/tests/src/org/jboss/messaging/tests/performance/remoting/impl/MeasureBase.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -8,7 +8,6 @@
 package org.jboss.messaging.tests.performance.remoting.impl;
 
 import junit.framework.TestCase;
-
 import org.jboss.messaging.core.client.impl.ConnectionParamsImpl;
 import org.jboss.messaging.core.client.impl.LocationImpl;
 import org.jboss.messaging.core.config.impl.ConfigurationImpl;
@@ -17,14 +16,12 @@
 import org.jboss.messaging.core.remoting.PacketHandler;
 import org.jboss.messaging.core.remoting.PacketReturner;
 import org.jboss.messaging.core.remoting.impl.RemotingConnectionImpl;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
 import org.jboss.messaging.core.remoting.impl.wireformat.EmptyPacket;
 
 
 /**
- *
  * @author clebert suconic
- *
  */
 public abstract class MeasureBase extends TestCase
 {
@@ -55,16 +52,16 @@
 
       long start = System.currentTimeMillis();
 
-      for (int i=0; i<NUMBER_OF_MESSAGES; i++)
+      for (int i = 0; i < NUMBER_OF_MESSAGES; i++)
       {
-         if (i%2 == 0)
+         if (i % 2 == 0)
          {
             remoting.sendOneWay(10, 10, new EmptyPacket(EmptyPacket.CLOSE));
          }
          else
          {
             Object ret = remoting.sendBlocking(10, 0, new EmptyPacket(EmptyPacket.CLOSE));
-            assertTrue (ret instanceof EmptyPacket);
+            assertTrue(ret instanceof EmptyPacket);
             //assertEquals(EmptyPacket.EXCEPTION, ret.getType());
          }
       }
@@ -72,7 +69,7 @@
       long end = System.currentTimeMillis();
 
 
-      System.out.println("Messages / second = " + NUMBER_OF_MESSAGES * 1000 / (end-start));
+      System.out.println("Messages / second = " + NUMBER_OF_MESSAGES * 1000 / (end - start));
       Thread.sleep(1000);
 
       remoting.stop();
@@ -81,11 +78,10 @@
 
    public void testBlockSends() throws Throwable
    {
-       //NIOConnector connector = createNIOConnector(new PacketDispatcherImpl(null));
+      //NIOConnector connector = createNIOConnector(new PacketDispatcherImpl(null));
       //NIOSession session = connector.connect();
 
 
-
       RemotingConnectionImpl remoting = new RemotingConnectionImpl(getLocation(), createParameters());
       remoting.start();
 
@@ -93,16 +89,16 @@
 
       long start = System.currentTimeMillis();
 
-      for (int i=0; i<NUMBER_OF_MESSAGES; i++)
+      for (int i = 0; i < NUMBER_OF_MESSAGES; i++)
       {
          Object ret = remoting.sendBlocking(10, 10, new EmptyPacket(EmptyPacket.CLOSE));
-         assertTrue (ret instanceof EmptyPacket);
+         assertTrue(ret instanceof EmptyPacket);
       }
 
       long end = System.currentTimeMillis();
 
 
-      System.out.println("Messages / second = " + NUMBER_OF_MESSAGES * 1000 / (end-start));
+      System.out.println("Messages / second = " + NUMBER_OF_MESSAGES * 1000 / (end - start));
       Thread.sleep(1000);
 
       remoting.stop();
@@ -111,7 +107,7 @@
 
    public void testOneWaySends() throws Throwable
    {
-       //NIOConnector connector = createNIOConnector(new PacketDispatcherImpl(null));
+      //NIOConnector connector = createNIOConnector(new PacketDispatcherImpl(null));
       //NIOSession session = connector.connect();
 
 
@@ -122,7 +118,7 @@
 
       long start = System.currentTimeMillis();
 
-      for (int i=0; i<NUMBER_OF_MESSAGES; i++)
+      for (int i = 0; i < NUMBER_OF_MESSAGES; i++)
       {
          remoting.sendOneWay(10, 10, new EmptyPacket(EmptyPacket.CLOSE));
       }
@@ -132,7 +128,7 @@
       long end = System.currentTimeMillis();
 
 
-      System.out.println("Messages / second = " + NUMBER_OF_MESSAGES * 1000 / (end-start));
+      System.out.println("Messages / second = " + NUMBER_OF_MESSAGES * 1000 / (end - start));
 
       remoting.stop();
 
@@ -143,7 +139,6 @@
    protected abstract ConfigurationImpl createConfiguration();
 
 
-
    protected void startServer() throws Exception
    {
       service = new RemotingServiceImpl(createConfiguration());
@@ -162,8 +157,6 @@
       return param;
    }
 
-
-
    // Inner Classes
 
    class FakeHandler implements PacketHandler
@@ -184,7 +177,8 @@
                packet.setTargetID(packet.getResponseTargetID());
                sender.send(packet);
             }
-         } catch (Exception e)
+         }
+         catch (Exception e)
          {
             e.printStackTrace();
          }

Added: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/AcceptorFactoryImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/AcceptorFactoryImplTest.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/AcceptorFactoryImplTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,72 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005, JBoss Inc., and individual contributors as indicated
+   * by the @authors tag. See the copyright.txt in the distribution for a
+   * full listing of individual contributors.
+   *
+   * This is free software; you can redistribute it and/or modify it
+   * under the terms of the GNU Lesser General Public License as
+   * published by the Free Software Foundation; either version 2.1 of
+   * the License, or (at your option) any later version.
+   *
+   * This software is distributed in the hope that it will be useful,
+   * but WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * Lesser General Public License for more details.
+   *
+   * You should have received a copy of the GNU Lesser General Public
+   * License along with this software; if not, write to the Free
+   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+   */
+package org.jboss.messaging.tests.unit.core.remoting.impl;
+
+import org.jboss.messaging.core.config.impl.ConfigurationImpl;
+import org.jboss.messaging.core.remoting.Acceptor;
+import org.jboss.messaging.core.remoting.TransportType;
+import org.jboss.messaging.core.remoting.impl.AcceptorFactoryImpl;
+import org.jboss.messaging.core.remoting.impl.invm.INVMAcceptor;
+import org.jboss.messaging.core.remoting.impl.mina.MinaAcceptor;
+import org.jboss.messaging.tests.util.UnitTestCase;
+
+import java.util.List;
+
+/**
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public class AcceptorFactoryImplTest extends UnitTestCase
+{
+   public void testTCPINVMEnabled()
+   {
+      AcceptorFactoryImpl acceptorFactory = new AcceptorFactoryImpl();
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.TCP);
+      config.setInvmDisabled(false);
+      List<Acceptor> acceptors = acceptorFactory.createAcceptors(config);
+      assertEquals(2, acceptors.size());
+      assertEquals(MinaAcceptor.class, acceptors.get(0).getClass());
+      assertEquals(INVMAcceptor.class, acceptors.get(1).getClass());
+   }
+
+   public void testTCPINVMDisabled()
+   {
+      AcceptorFactoryImpl acceptorFactory = new AcceptorFactoryImpl();
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.TCP);
+      config.setInvmDisabled(true);
+      List<Acceptor> acceptors = acceptorFactory.createAcceptors(config);
+      assertEquals(1, acceptors.size());
+      assertEquals(MinaAcceptor.class, acceptors.get(0).getClass());
+   }
+
+   public void testINVOnly()
+   {
+      AcceptorFactoryImpl acceptorFactory = new AcceptorFactoryImpl();
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setInvmDisabled(false);
+      List<Acceptor> acceptors = acceptorFactory.createAcceptors(config);
+      assertEquals(1, acceptors.size());
+      assertEquals(INVMAcceptor.class, acceptors.get(0).getClass());
+   }
+}

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingConnectionTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingConnectionTest.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingConnectionTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -512,6 +512,16 @@
          //todo
       }
 
+      public void addInterceptor(Interceptor filter)
+      {
+         //todo
+      }
+
+      public void removeInterceptor(Interceptor filter)
+      {
+         //todo
+      }
+
       public long generateID()
       {
          return 0;

Added: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingServiceImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingServiceImplTest.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/RemotingServiceImplTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -0,0 +1,448 @@
+/*
+   * JBoss, Home of Professional Open Source
+   * Copyright 2005, JBoss Inc., and individual contributors as indicated
+   * by the @authors tag. See the copyright.txt in the distribution for a
+   * full listing of individual contributors.
+   *
+   * This is free software; you can redistribute it and/or modify it
+   * under the terms of the GNU Lesser General Public License as
+   * published by the Free Software Foundation; either version 2.1 of
+   * the License, or (at your option) any later version.
+   *
+   * This software is distributed in the hope that it will be useful,
+   * but WITHOUT ANY WARRANTY; without even the implied warranty of
+   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+   * Lesser General Public License for more details.
+   *
+   * You should have received a copy of the GNU Lesser General Public
+   * License along with this software; if not, write to the Free
+   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+   */
+package org.jboss.messaging.tests.unit.core.remoting.impl;
+
+import org.easymock.EasyMock;
+import org.jboss.messaging.core.client.RemotingSessionListener;
+import org.jboss.messaging.core.config.Configuration;
+import org.jboss.messaging.core.config.impl.ConfigurationImpl;
+import org.jboss.messaging.core.exception.MessagingException;
+import org.jboss.messaging.core.remoting.*;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
+import org.jboss.messaging.core.remoting.impl.mina.ServerKeepAliveFactory;
+import org.jboss.messaging.core.remoting.impl.wireformat.Ping;
+import org.jboss.messaging.core.remoting.impl.wireformat.Pong;
+import org.jboss.messaging.tests.util.UnitTestCase;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="ataylor at redhat.com">Andy Taylor</a>
+ */
+public class RemotingServiceImplTest extends UnitTestCase
+{
+   public void testSingleAcceptorStarted() throws Exception
+   {
+      final Acceptor acceptor = EasyMock.createStrictMock(Acceptor.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      remotingService.setAcceptorFactory(new AcceptorFactory()
+      {
+         public List<Acceptor> createAcceptors(Configuration configuration)
+         {
+            List<Acceptor> acceptors = new ArrayList<Acceptor>();
+            acceptors.add(acceptor);
+            return acceptors;
+         }
+      });
+      acceptor.startAccepting(remotingService, remotingService);
+      EasyMock.replay(acceptor);
+      remotingService.start();
+      EasyMock.verify(acceptor);
+      assertEquals(1, remotingService.getAcceptors().size());
+      assertEquals(config, remotingService.getConfiguration());
+   }
+
+   public void testSingleAcceptorStartedTwiceIsIgnored() throws Exception
+   {
+      final Acceptor acceptor = EasyMock.createStrictMock(Acceptor.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      remotingService.setAcceptorFactory(new AcceptorFactory()
+      {
+         public List<Acceptor> createAcceptors(Configuration configuration)
+         {
+            List<Acceptor> acceptors = new ArrayList<Acceptor>();
+            acceptors.add(acceptor);
+            return acceptors;
+         }
+      });
+      acceptor.startAccepting(remotingService, remotingService);
+      EasyMock.replay(acceptor);
+      remotingService.start();
+      remotingService.start();
+      EasyMock.verify(acceptor);
+      assertEquals(1, remotingService.getAcceptors().size());
+      assertEquals(config, remotingService.getConfiguration());
+   }
+
+   public void testSingleAcceptorStartedAndStopped() throws Exception
+   {
+      final Acceptor acceptor = EasyMock.createStrictMock(Acceptor.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      remotingService.setAcceptorFactory(new AcceptorFactory()
+      {
+         public List<Acceptor> createAcceptors(Configuration configuration)
+         {
+            List<Acceptor> acceptors = new ArrayList<Acceptor>();
+            acceptors.add(acceptor);
+            return acceptors;
+         }
+      });
+      acceptor.startAccepting(remotingService, remotingService);
+      acceptor.stopAccepting();
+      EasyMock.replay(acceptor);
+      remotingService.start();
+      remotingService.stop();
+      EasyMock.verify(acceptor);
+      assertEquals(1, remotingService.getAcceptors().size());
+      assertEquals(config, remotingService.getConfiguration());
+   }
+
+   public void testMultipleAcceptorsStarted() throws Exception
+   {
+      final Acceptor acceptor = EasyMock.createStrictMock(Acceptor.class);
+      final Acceptor acceptor2 = EasyMock.createStrictMock(Acceptor.class);
+      final Acceptor acceptor3 = EasyMock.createStrictMock(Acceptor.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      remotingService.setAcceptorFactory(new AcceptorFactory()
+      {
+         public List<Acceptor> createAcceptors(Configuration configuration)
+         {
+            List<Acceptor> acceptors = new ArrayList<Acceptor>();
+            acceptors.add(acceptor);
+            acceptors.add(acceptor2);
+            acceptors.add(acceptor3);
+            return acceptors;
+         }
+      });
+      acceptor.startAccepting(remotingService, remotingService);
+      acceptor2.startAccepting(remotingService, remotingService);
+      acceptor3.startAccepting(remotingService, remotingService);
+      EasyMock.replay(acceptor, acceptor2, acceptor3);
+      remotingService.start();
+      EasyMock.verify(acceptor, acceptor2, acceptor3);
+      assertEquals(3, remotingService.getAcceptors().size());
+      assertEquals(config, remotingService.getConfiguration());
+   }
+
+   public void testMultipleAcceptorsStartedAndStopped() throws Exception
+   {
+      final Acceptor acceptor = EasyMock.createStrictMock(Acceptor.class);
+      final Acceptor acceptor2 = EasyMock.createStrictMock(Acceptor.class);
+      final Acceptor acceptor3 = EasyMock.createStrictMock(Acceptor.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      remotingService.setAcceptorFactory(new AcceptorFactory()
+      {
+         public List<Acceptor> createAcceptors(Configuration configuration)
+         {
+            List<Acceptor> acceptors = new ArrayList<Acceptor>();
+            acceptors.add(acceptor);
+            acceptors.add(acceptor2);
+            acceptors.add(acceptor3);
+            return acceptors;
+         }
+      });
+      acceptor.startAccepting(remotingService, remotingService);
+      acceptor.stopAccepting();
+      acceptor2.startAccepting(remotingService, remotingService);
+      acceptor2.stopAccepting();
+      acceptor3.startAccepting(remotingService, remotingService);
+      acceptor3.stopAccepting();
+      EasyMock.replay(acceptor, acceptor2, acceptor3);
+      remotingService.start();
+      remotingService.stop();
+      EasyMock.verify(acceptor, acceptor2, acceptor3);
+      assertEquals(3, remotingService.getAcceptors().size());
+      assertEquals(config, remotingService.getConfiguration());
+   }
+
+   public void testDispatcherNotNull() throws Exception
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      assertNotNull(remotingService.getDispatcher());
+      remotingService = new RemotingServiceImpl(config);
+      assertNotNull(remotingService.getDispatcher());
+   }
+
+   public void testKeepAliveFactoryNotNull() throws Exception
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config);
+      assertNotNull(remotingService.getKeepAliveFactory());
+      ServerKeepAliveFactory keepAliveFactory = new ServerKeepAliveFactory();
+      remotingService = new RemotingServiceImpl(config, keepAliveFactory);
+      assertNotNull(remotingService.getKeepAliveFactory());
+      assertEquals(keepAliveFactory, remotingService.getKeepAliveFactory());
+   }
+
+   public void testInterceptorsAddedToDispatcher() throws Exception
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      assertNotNull(remotingService.getDispatcher());
+      remotingService = new RemotingServiceImpl(config);
+      assertNotNull(remotingService.getDispatcher());
+
+      Interceptor interceptor = EasyMock.createStrictMock(Interceptor.class);
+      Packet packet = EasyMock.createNiceMock(Packet.class);
+      interceptor.intercept(packet);
+      EasyMock.replay(interceptor);
+      remotingService.addInterceptor(interceptor);
+      remotingService.getDispatcher().callFilters(packet);
+      EasyMock.verify(interceptor);
+   }
+
+   public void testMultipleInterceptorsAddedToDispatcher() throws Exception
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      assertNotNull(remotingService.getDispatcher());
+      remotingService = new RemotingServiceImpl(config);
+      assertNotNull(remotingService.getDispatcher());
+
+      Interceptor interceptor = EasyMock.createStrictMock(Interceptor.class);
+      Interceptor interceptor2 = EasyMock.createStrictMock(Interceptor.class);
+      Interceptor interceptor3 = EasyMock.createStrictMock(Interceptor.class);
+      Packet packet = EasyMock.createNiceMock(Packet.class);
+      interceptor.intercept(packet);
+      interceptor2.intercept(packet);
+      interceptor3.intercept(packet);
+      EasyMock.replay(interceptor, interceptor2, interceptor3);
+      remotingService.addInterceptor(interceptor);
+      remotingService.addInterceptor(interceptor2);
+      remotingService.addInterceptor(interceptor3);
+      remotingService.getDispatcher().callFilters(packet);
+      EasyMock.verify(interceptor, interceptor2, interceptor3);
+   }
+
+   public void testInterceptorsAddedToAndRemovedFromDispatcher() throws Exception
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      assertNotNull(remotingService.getDispatcher());
+      remotingService = new RemotingServiceImpl(config);
+      assertNotNull(remotingService.getDispatcher());
+
+      Interceptor interceptor = EasyMock.createStrictMock(Interceptor.class);
+      Packet packet = EasyMock.createNiceMock(Packet.class);
+      EasyMock.replay(interceptor);
+      remotingService.addInterceptor(interceptor);
+      remotingService.removeInterceptor(interceptor);
+      remotingService.getDispatcher().callFilters(packet);
+      EasyMock.verify(interceptor);
+   }
+
+   public void testMultipleInterceptorsAddedToAndRemovedFromDispatcher() throws Exception
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, null);
+      assertNotNull(remotingService.getDispatcher());
+      remotingService = new RemotingServiceImpl(config);
+      assertNotNull(remotingService.getDispatcher());
+
+      Interceptor interceptor = EasyMock.createStrictMock(Interceptor.class);
+      Interceptor interceptor2 = EasyMock.createStrictMock(Interceptor.class);
+      Interceptor interceptor3 = EasyMock.createStrictMock(Interceptor.class);
+      Packet packet = EasyMock.createNiceMock(Packet.class);
+      interceptor3.intercept(packet);
+      EasyMock.replay(interceptor, interceptor2, interceptor3);
+      remotingService.addInterceptor(interceptor);
+      remotingService.addInterceptor(interceptor2);
+      remotingService.addInterceptor(interceptor3);
+      remotingService.removeInterceptor(interceptor);
+      remotingService.removeInterceptor(interceptor2);
+      remotingService.getDispatcher().callFilters(packet);
+      EasyMock.verify(interceptor, interceptor2, interceptor3);
+   }
+
+   public void testPingerAddedAndCalled()
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setKeepAliveInterval(100);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config);
+      DummySession dummySession = new DummySession(remotingService.getDispatcher());
+      remotingService.registerPinger(dummySession);
+      try
+      {
+         Thread.sleep(1100);
+      }
+      catch (InterruptedException e)
+      {
+         e.printStackTrace();
+      }
+      remotingService.unregisterPinger(1l);
+      assertTrue(dummySession.count > 10);
+   }
+
+   public void testPingerAddedAndRemoved()
+   {
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setKeepAliveInterval(100);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config);
+      DummySession dummySession = new DummySession(remotingService.getDispatcher());
+      remotingService.registerPinger(dummySession);
+      try
+      {
+         Thread.sleep(1100);
+      }
+      catch (InterruptedException e)
+      {
+         e.printStackTrace();
+      }
+      remotingService.unregisterPinger(1l);
+      int count = dummySession.count;
+      try
+      {
+         Thread.sleep(config.getKeepAliveInterval() + 2);
+      }
+      catch (InterruptedException e)
+      {
+         e.printStackTrace();
+      }
+      assertEquals(count, dummySession.count);
+   }
+
+   public void testListenerAdded()
+   {
+      RemotingSessionListener listener = EasyMock.createStrictMock(RemotingSessionListener.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setKeepAliveInterval(100);
+      ServerKeepAliveFactory factory = new ServerKeepAliveFactory();
+      factory.getSessions().add(1l);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, factory);
+      MessagingException me = new MessagingException();
+      listener.sessionDestroyed(1l, me);
+      EasyMock.replay(listener);
+      remotingService.addRemotingSessionListener(listener);
+      remotingService.fireCleanup(1l, me);
+      EasyMock.verify(listener);
+   }
+
+   public void testMultipleListenerAdded()
+   {
+      RemotingSessionListener listener = EasyMock.createStrictMock(RemotingSessionListener.class);
+      RemotingSessionListener listener2 = EasyMock.createStrictMock(RemotingSessionListener.class);
+      RemotingSessionListener listener3 = EasyMock.createStrictMock(RemotingSessionListener.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setKeepAliveInterval(100);
+      ServerKeepAliveFactory factory = new ServerKeepAliveFactory();
+      factory.getSessions().add(1l);
+      factory.getSessions().add(2l);
+      factory.getSessions().add(3l);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, factory);
+      MessagingException me = new MessagingException();
+      listener.sessionDestroyed(1l, me);
+      listener2.sessionDestroyed(1l, me);
+      listener3.sessionDestroyed(1l, me);
+      EasyMock.replay(listener, listener2, listener3);
+      remotingService.addRemotingSessionListener(listener);
+      remotingService.addRemotingSessionListener(listener2);
+      remotingService.addRemotingSessionListener(listener3);
+      remotingService.fireCleanup(1l, me);
+      EasyMock.verify(listener, listener2, listener3);
+   }
+
+   public void testListenerAddedAndRemoved()
+   {
+      RemotingSessionListener listener = EasyMock.createStrictMock(RemotingSessionListener.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setKeepAliveInterval(100);
+      ServerKeepAliveFactory factory = new ServerKeepAliveFactory();
+      factory.getSessions().add(1l);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, factory);
+      MessagingException me = new MessagingException();
+      EasyMock.replay(listener);
+      remotingService.addRemotingSessionListener(listener);
+      remotingService.removeRemotingSessionListener(listener);
+      remotingService.fireCleanup(1l, me);
+      EasyMock.verify(listener);
+   }
+
+   public void testMultipleListenerAddedAndRemoved()
+   {
+      RemotingSessionListener listener = EasyMock.createStrictMock(RemotingSessionListener.class);
+      RemotingSessionListener listener2 = EasyMock.createStrictMock(RemotingSessionListener.class);
+      RemotingSessionListener listener3 = EasyMock.createStrictMock(RemotingSessionListener.class);
+      ConfigurationImpl config = new ConfigurationImpl();
+      config.setTransport(TransportType.INVM);
+      config.setKeepAliveInterval(100);
+      ServerKeepAliveFactory factory = new ServerKeepAliveFactory();
+      factory.getSessions().add(1l);
+      factory.getSessions().add(1l);
+      factory.getSessions().add(1l);
+      RemotingServiceImpl remotingService = new RemotingServiceImpl(config, factory);
+      MessagingException me = new MessagingException();
+      listener3.sessionDestroyed(1l, me);
+      EasyMock.replay(listener, listener2, listener3);
+      remotingService.addRemotingSessionListener(listener);
+      remotingService.addRemotingSessionListener(listener2);
+      remotingService.addRemotingSessionListener(listener3);
+      remotingService.removeRemotingSessionListener(listener);
+      remotingService.removeRemotingSessionListener(listener2);
+      remotingService.fireCleanup(1l, me);
+      EasyMock.verify(listener, listener2, listener3);
+   }
+
+   class DummySession implements NIOSession
+   {
+      PacketDispatcher dispatcher;
+      int count = 0;
+
+      public DummySession(PacketDispatcher dispatcher)
+      {
+         this.dispatcher = dispatcher;
+      }
+
+      public long getID()
+      {
+         return 1;
+      }
+
+      public void write(Packet packet) throws Exception
+      {
+         count++;
+         Ping ping = (Ping) packet;
+
+         Pong pong = new Pong(ping.getSessionID(), false);
+         pong.setTargetID(1);
+         dispatcher.dispatch(pong, null);
+
+      }
+
+      public boolean isConnected()
+      {
+         return true;
+      }
+   }
+}

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/network/ClientNetworkFailureTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/network/ClientNetworkFailureTest.java	2008-06-12 14:35:14 UTC (rev 4445)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/network/ClientNetworkFailureTest.java	2008-06-12 14:45:06 UTC (rev 4446)
@@ -30,9 +30,11 @@
 import org.jboss.messaging.core.config.impl.ConfigurationImpl;
 import org.jboss.messaging.core.exception.MessagingException;
 import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.remoting.Acceptor;
 import org.jboss.messaging.core.remoting.TransportType;
 import static org.jboss.messaging.core.remoting.TransportType.TCP;
-import org.jboss.messaging.core.remoting.impl.mina.RemotingServiceImpl;
+import org.jboss.messaging.core.remoting.impl.RemotingServiceImpl;
+import org.jboss.messaging.core.remoting.impl.mina.MinaAcceptor;
 import org.jboss.messaging.core.server.ConnectionManager;
 import org.jboss.messaging.core.server.MessagingServer;
 import org.jboss.messaging.core.server.impl.MessagingServerImpl;
@@ -40,6 +42,7 @@
 import static org.jboss.messaging.tests.integration.core.remoting.mina.TestSupport.KEEP_ALIVE_TIMEOUT;
 
 import java.io.IOException;
+import java.util.List;
 import java.util.concurrent.CountDownLatch;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
@@ -82,7 +85,9 @@
       server.start();
       minaService = (RemotingServiceImpl) server.getRemotingService();
       networkFailureFilter = new NetworkFailureFilter();
-      minaService.getFilterChain().addFirst("network-failure",
+      List<Acceptor> acceptor = minaService.getAcceptors();
+      MinaAcceptor minaAcceptor = (MinaAcceptor) acceptor.get(0);
+      minaAcceptor.getFilterChain().addFirst("network-failure",
               networkFailureFilter);
 
       assertActiveConnectionsOnTheServer(0);




More information about the jboss-cvs-commits mailing list