[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