Author: jvermillard
Date: Mon Jul  4 19:52:39 2011
New Revision: 1142782

URL: http://svn.apache.org/viewvc?rev=1142782&view=rev
Log:
simple event processing using the chain

Modified:
    mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilter.java
    mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilterChain.java
    
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
    
mina/branches/3.0/core/src/test/java/filterchain/DefaultIoFilterChainTest.java

Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilter.java
URL: 
http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilter.java?rev=1142782&r1=1142781&r2=1142782&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilter.java 
(original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilter.java Mon Jul  
4 19:52:39 2011
@@ -27,21 +27,6 @@ package org.apache.mina;
  */
 public interface IoFilter {
 
-    /**
-     * Invoked when this filter is added to a {@link IoFilterChain} at the 
first time, so you can initialize shared
-     * resources.
-     * 
-     * @throws Exception If an initialization error occurs
-     */
-    void init() throws Exception;
-
-    /**
-     * Invoked when this filter is not used by any {@link IoFilterChain} 
anymore, so you can destroy shared resources.
-     * 
-     * @throws Exception If an error occurs while processing
-     */
-    void destroy() throws Exception;
-
     // ---- Events Functions ---
     /**
      * Invoked from an I/O processor thread when a new connection has been 
created. Because this method is supposed to
@@ -83,9 +68,11 @@ public interface IoFilter {
      * Invoked when a message is received.
      * 
      * @param session {@link IoSession} associated with the invocation
+     * @param message the incoming message to process
+     * @return the message after processing
      * @throws Exception Exception If an error occurs while processing
      */
-    void messageReceived(IoSession session, Object message) throws Exception;
+    Object messageReceived(IoSession session, Object message) throws Exception;
 
     /**
      * Invoked when a message is under writing. The filter is supposed to 
apply the needed transformation.

Modified: 
mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilterChain.java
URL: 
http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilterChain.java?rev=1142782&r1=1142781&r2=1142782&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilterChain.java 
(original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/IoFilterChain.java Mon 
Jul  4 19:52:39 2011
@@ -105,4 +105,26 @@ public interface IoFilterChain {
      * @return <code>true</code> if successful
      */
     boolean removeFilter(IoFilter ioFilter);
+
+    /**
+     * Call this method for processing a exception caught event using this 
chain.
+     * Any spawned exception during this processing will be caught and logged 
as error.
+     * @param session {@link IoSession} associated with invocation
+     * @param cause Real {@link Throwable} which broke the normal chain 
processing
+     */
+    void processExceptionCaught(IoSession session, Throwable cause);
+
+    /**
+     * Call this method for processing a session created event using this 
chain.
+     * @param session {@link IoSession} the freshly created session
+     */
+    void processSessionCreated(IoSession session);
+
+    /**
+     * Call this method for processing a received message using this chain.
+     * @param session {@link IoSession} associated with this message
+     * @param messagethe received message
+     * @return the message after the processing of each filter
+     */
+    Object processMessageReceived(IoSession session, Object message);
 }
\ No newline at end of file

Modified: 
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
URL: 
http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java?rev=1142782&r1=1142781&r2=1142782&view=diff
==============================================================================
--- 
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
 (original)
+++ 
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
 Mon Jul  4 19:52:39 2011
@@ -25,9 +25,14 @@ import java.util.concurrent.CopyOnWriteA
 
 import org.apache.mina.IoFilter;
 import org.apache.mina.IoFilterChain;
+import org.apache.mina.IoSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DefaultIoFilterChain implements IoFilterChain {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(DefaultIoFilterChain.class);
+
     /**
      * The list of {@link IoFilter} compounding this chain.
      * We use a {@link CopyOnWriteArrayList} because we want to read quickly 
(and thread safely) but we don't care much about chain
@@ -80,4 +85,42 @@ public class DefaultIoFilterChain implem
         return bldr.append("}").toString();
     }
 
+    @Override
+    public void processExceptionCaught(IoSession session, Throwable cause) {
+        for (IoFilter filter : chain) {
+
+            try {
+                filter.exceptionCaught(session, cause);
+            } catch (Exception e) {
+                LOG.error("Exception caught during processing exception caught 
event", e);
+            }
+        }
+    }
+
+    @Override
+    public void processSessionCreated(IoSession session) {
+        for (IoFilter filter : chain) {
+            try {
+                filter.sessionCreated(session);
+            } catch (Exception e) {
+                LOG.error("Exception caught during processing session created 
event", e);
+                // we re-forward the catched Exception
+                processExceptionCaught(session, e);
+            }
+        }
+    }
+
+    @Override
+    public Object processMessageReceived(IoSession session, Object message) {
+        for (IoFilter filter : chain) {
+            try {
+                message = filter.messageReceived(session, message);
+            } catch (Exception e) {
+                LOG.error("Exception caught during processing session created 
event", e);
+                // we re-forward the catched Exception
+                processExceptionCaught(session, e);
+            }
+        }
+        return message;
+    }
 }
\ No newline at end of file

Modified: 
mina/branches/3.0/core/src/test/java/filterchain/DefaultIoFilterChainTest.java
URL: 
http://svn.apache.org/viewvc/mina/branches/3.0/core/src/test/java/filterchain/DefaultIoFilterChainTest.java?rev=1142782&r1=1142781&r2=1142782&view=diff
==============================================================================
--- 
mina/branches/3.0/core/src/test/java/filterchain/DefaultIoFilterChainTest.java 
(original)
+++ 
mina/branches/3.0/core/src/test/java/filterchain/DefaultIoFilterChainTest.java 
Mon Jul  4 19:52:39 2011
@@ -104,14 +104,6 @@ public class DefaultIoFilterChainTest {
         }
 
         @Override
-        public void init() throws Exception {
-        }
-
-        @Override
-        public void destroy() throws Exception {
-        }
-
-        @Override
         public void sessionCreated(IoSession session) throws Exception {
         }
 
@@ -128,7 +120,8 @@ public class DefaultIoFilterChainTest {
         }
 
         @Override
-        public void messageReceived(IoSession session, Object message) throws 
Exception {
+        public Object messageReceived(IoSession session, Object message) 
throws Exception {
+            return message;
         }
 
         @Override


Reply via email to