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