[jboss-svn-commits] JBL Code SVN: r29602 - in labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm: mina and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 13 21:27:00 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-10-13 21:26:59 -0400 (Tue, 13 Oct 2009)
New Revision: 29602
Added:
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaAcceptor.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaConnector.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoHandler.java
labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoWriter.java
Log:
JBRULES-2269 Virtual Service Manager
-now works for xstream
-split into remote/local
Copied: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaAcceptor.java (from rev 29306, labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/BaseMinaServer.java)
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaAcceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaAcceptor.java 2009-10-14 01:26:59 UTC (rev 29602)
@@ -0,0 +1,45 @@
+package org.drools.vsm.mina;
+
+import java.io.IOException;
+import java.net.SocketAddress;
+
+import org.apache.mina.core.service.IoAcceptor;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.filter.logging.LoggingFilter;
+import org.apache.mina.transport.socket.SocketAcceptor;
+import org.drools.vsm.AcceptorService;
+
+public class MinaAcceptor
+ implements
+ AcceptorService {
+ protected SocketAcceptor acceptor;
+ protected SocketAddress address;
+
+ public MinaAcceptor(SocketAcceptor acceptor,
+ SocketAddress address) {
+ this.acceptor = acceptor;
+ this.address = address;
+ }
+
+ public synchronized void start() throws IOException {
+ acceptor.getFilterChain().addLast( "logger",
+ new LoggingFilter() );
+ acceptor.getFilterChain().addLast( "codec",
+ new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+ acceptor.getSessionConfig().setReadBufferSize( 2048 );
+ acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE,
+ 10 );
+ acceptor.bind( address );
+ }
+
+ public synchronized void stop() {
+ acceptor.dispose();
+ }
+
+ public synchronized IoAcceptor getIoAcceptor() {
+ return acceptor;
+ }
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaConnector.java (from rev 29306, labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/BaseMinaClient.java)
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaConnector.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaConnector.java 2009-10-14 01:26:59 UTC (rev 29602)
@@ -0,0 +1,89 @@
+package org.drools.vsm.mina;
+
+import java.net.SocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.filter.codec.ProtocolCodecFilter;
+import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
+import org.apache.mina.transport.socket.SocketConnector;
+import org.drools.SystemEventListener;
+import org.drools.vsm.GenericConnector;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class MinaConnector
+ implements
+ GenericConnector,
+ GenericIoWriter {
+ protected IoSession session;
+
+ protected final String name;
+ protected AtomicInteger counter;
+ protected SocketConnector connector;
+ protected SocketAddress address;
+ protected SystemEventListener eventListener;
+
+ public MinaConnector(String name,
+ SocketConnector connector,
+ SocketAddress address,
+ SystemEventListener eventListener) {
+ if ( name == null ) {
+ throw new IllegalArgumentException( "Name can not be null" );
+ }
+ this.name = name;
+ this.counter = new AtomicInteger();
+ this.address = address;
+ this.connector = connector;
+ this.eventListener = eventListener;
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#connect()
+ */
+ public boolean connect() {
+ if ( session != null && session.isConnected() ) {
+ throw new IllegalStateException( "Already connected. Disconnect first." );
+ }
+
+ try {
+ this.connector.getFilterChain().addLast( "codec",
+ new ProtocolCodecFilter( new ObjectSerializationCodecFactory() ) );
+
+ ConnectFuture future1 = this.connector.connect( this.address );
+ future1.await( 2000 );
+ if ( !future1.isConnected() ) {
+ eventListener.info( "unable to connect : " + address + " : " + future1.getException() );
+ return false;
+ }
+ eventListener.info( "connected : " + address );
+ this.session = future1.getSession();
+ return true;
+ } catch ( Exception e ) {
+ e.printStackTrace();
+ return false;
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.drools.vsm.mina.Messenger#disconnect()
+ */
+ public void disconnect() {
+ if ( session != null && session.isConnected() ) {
+ session.close();
+ session.getCloseFuture().join();
+ }
+ }
+
+ public void addResponseHandler(int id,
+ MessageResponseHandler responseHandler) {
+ ((MinaIoHandler) this.connector.getHandler()).addResponseHandler( id,
+ responseHandler );
+ }
+
+ public void write(Message msg) {
+ this.session.write( msg );
+ }
+}
Copied: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoHandler.java (from rev 29307, labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/ServiceManagerServerResponseHandler.java)
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoHandler.java 2009-10-14 01:26:59 UTC (rev 29602)
@@ -0,0 +1,79 @@
+package org.drools.vsm.mina;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.drools.SystemEventListener;
+import org.drools.vsm.GenericMessageHandler;
+import org.drools.vsm.Message;
+import org.drools.vsm.MessageResponseHandler;
+
+public class MinaIoHandler extends IoHandlerAdapter {
+ protected Map<Integer, MessageResponseHandler> responseHandlers;
+
+ private GenericMessageHandler handler;
+
+ /**
+ * Listener used for logging
+ */
+ private final SystemEventListener systemEventListener;
+
+ public MinaIoHandler(SystemEventListener systemEventListener) {
+ this( systemEventListener,
+ null );
+
+ }
+
+ public MinaIoHandler(SystemEventListener systemEventListener,
+ GenericMessageHandler handler) {
+ this.systemEventListener = systemEventListener;
+ this.responseHandlers = new ConcurrentHashMap<Integer, MessageResponseHandler>();
+ this.handler = handler;
+
+ }
+
+ public void addResponseHandler(int id,
+ MessageResponseHandler responseHandler) {
+ this.responseHandlers.put( id,
+ responseHandler );
+ }
+
+ public void exceptionCaught(IoSession session,
+ Throwable cause) throws Exception {
+ systemEventListener.exception( "Uncaught exception on Server",
+ cause );
+ }
+
+ public void messageReceived(IoSession session,
+ Object object) throws Exception {
+ Message msg = (Message) object;
+
+ systemEventListener.debug( "Message receieved : " + msg );
+
+ MessageResponseHandler responseHandler = (MessageResponseHandler) responseHandlers.remove( msg.getResponseId() );
+
+ if ( responseHandler != null ) {
+ Object payload = msg.getPayload();
+ if ( payload != null && payload instanceof RuntimeException ) {
+ responseHandler.setError( (RuntimeException) payload );
+ } else {
+ responseHandler.receive( msg );
+ }
+ } else if ( handler != null ) {
+ this.handler.messageReceived( new MinaIoWriter( session ),
+ (Message) object );
+ } else {
+ throw new RuntimeException( "Unable to process Message" );
+ }
+ }
+
+ @Override
+ public void sessionIdle(IoSession session,
+ IdleStatus status) throws Exception {
+ this.systemEventListener.debug( "Server IDLE " + session.getIdleCount( status ) );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoWriter.java
===================================================================
--- labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoWriter.java (rev 0)
+++ labs/jbossrules/trunk/drools-vsm/src/main/java/org/drools/vsm/mina/MinaIoWriter.java 2009-10-14 01:26:59 UTC (rev 29602)
@@ -0,0 +1,20 @@
+package org.drools.vsm.mina;
+
+import org.apache.mina.core.session.IoSession;
+import org.drools.vsm.GenericIoWriter;
+import org.drools.vsm.Message;
+
+public class MinaIoWriter
+ implements
+ GenericIoWriter {
+ private IoSession session;
+
+ public MinaIoWriter(IoSession session) {
+ this.session = session;
+ }
+
+ public void write(Message message) {
+ this.session.write( message );
+ }
+
+}
More information about the jboss-svn-commits
mailing list