[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