You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2008/11/04 01:25:09 UTC

svn commit: r711142 - in /mina/branches/mina-new-chain/core/src: main/java/org/apache/mina/core/filterchain/ main/java/org/apache/mina/core/polling/ main/java/org/apache/mina/core/service/ main/java/org/apache/mina/core/session/ main/java/org/apache/mi...

Author: elecharny
Date: Mon Nov  3 16:25:08 2008
New Revision: 711142

URL: http://svn.apache.org/viewvc?rev=711142&view=rev
Log:
Fixed a bunch of errors.
o Each filter now has a default name, but can be renamed
o we don't have a chainBuilder anymore, it's replaced by two lists, one for the incoming chain, one for the outgoing chain
o we call the next filter explicitly in the code using a getNextFilter() method
o The initial chain construction is done using the List API, ie we don't have anymore those complex methods (addBefore, addAfter). Just add(filter), add(pos, filter) and of course remove(filter)
o And many other modifications...

Still not finished. Work in progress, I have 451 errors !

Modified:
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoService.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/DummySession.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoEvent.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/AbstractStreamWriteFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/FileRegionWriteFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/NoopFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/ReferenceCountingFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/SessionAttributeInitializingFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/WriteRequestFilter.java
    mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java
    mina/branches/mina-new-chain/core/src/test/java/org/apache/mina/core/IoFilterChainTest.java

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/filterchain/IoFilterAdapter.java Mon Nov  3 16:25:08 2008
@@ -37,9 +37,18 @@
     private IoFilter nextFilter;
     
     /** The filter's name */
-    protected static String name;
+    private String name;
 
     /**
+     * Creates a new instance of this class, and associate a name
+     * to it.
+     * @param name The filter's name
+     */
+    public  IoFilterAdapter(String name) {
+    	this.name = name;
+    }
+    
+    /**
      * {@inheritDoc}
      */
     public void init() throws Exception {

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingConnectionlessIoAcceptor.java Mon Nov  3 16:25:08 2008
@@ -33,6 +33,7 @@
 
 import org.apache.mina.core.RuntimeIoException;
 import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.future.IoFuture;
 import org.apache.mina.core.service.AbstractIoAcceptor;
 import org.apache.mina.core.service.IoAcceptor;
@@ -239,7 +240,13 @@
         finishSessionInitialization(session, null, null);
 
         try {
-            this.getFilterChainBuilder().buildFilterChain(session.getFilterChain());
+            // Build the filter chains for this session.
+            List<IoFilter> chainIn = ((IoSession)session). getService().getFilterChainIn();
+            ((IoSession)session).setFilterChainIn(chainIn);
+            
+            List<IoFilter> chainOut = ((IoSession)session). getService().getFilterChainOut();
+            ((IoSession)session).setFilterChainIn(chainOut);
+            
             getListeners().fireSessionCreated(session);
         } catch (Throwable t) {
             ExceptionMonitor.getInstance().exceptionCaught(t);
@@ -415,7 +422,7 @@
             newBuf.put(readBuf);
             newBuf.flip();
 
-            session.getFilterInChain().messageReceived(session,newBuf);
+            session.getFirstFilterIn().messageReceived(session,newBuf);
         }
     }
 
@@ -435,7 +442,7 @@
                     scheduleFlush(session);
                 }
             } catch (Exception e) {
-                session.getFilterOutChain().exceptionCaught(session, e);
+                session.getFirstFilterOut().exceptionCaught(session, e);
             }
         }
     }
@@ -466,7 +473,7 @@
                     // Clear and fire event
                     session.setCurrentWriteRequest(null);
                     buf.reset();
-                    session.getFilterOutChain().messageSent(session, req);
+                    session.getFirstFilterOut().messageSent(session, req);
                     continue;
                 }
 
@@ -487,7 +494,7 @@
                     session.setCurrentWriteRequest(null);
                     writtenBytes += localWrittenBytes;
                     buf.reset();
-                    session.getFilterOutChain().messageSent(session, req);
+                    session.getFirstFilterOut().messageSent(session, req);
                 }
             }
         } finally {

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/polling/AbstractPollingIoProcessor.java Mon Nov  3 16:25:08 2008
@@ -34,7 +34,6 @@
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.file.FileRegion;
 import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.DefaultIoFuture;
 import org.apache.mina.core.service.AbstractIoService;
 import org.apache.mina.core.service.IoProcessor;
@@ -416,10 +415,13 @@
             init(session);
             registered = true;
 
-            // Build the filter chain of this session.
-            session.getService().getFilterChainBuilder().buildFilterChain(
-                    session.getFilterChain());
-
+            // Build the filter chains for this session.
+            List<IoFilter> chainIn = ((IoSession)session). getService().getFilterChainIn();
+            ((IoSession)session).setFilterChainIn(chainIn);
+            
+            List<IoFilter> chainOut = ((IoSession)session). getService().getFilterChainOut();
+            ((IoSession)session).setFilterChainIn(chainOut);
+            
             // DefaultIoFilterChain.CONNECT_FUTURE is cleared inside here
             // in AbstractIoFilterChain.fireSessionOpened().
             ((AbstractIoService) session.getService()).getListeners().fireSessionCreated(session);
@@ -429,8 +431,7 @@
                 // Clear the DefaultIoFilterChain.CONNECT_FUTURE attribute
                 // and call ConnectFuture.setException().
                 scheduleRemove(session);
-                IoFilter firstFilter = session.getFilterOutChain(); 
-                firstFilter.exceptionCaught(session, e);
+                session.getFirstFilterOut().exceptionCaught(session, e);
                 wakeup();
             } else {
                 ExceptionMonitor.getInstance().exceptionCaught(e);
@@ -485,8 +486,7 @@
             destroy(session);
             return true;
         } catch (Exception e) {
-            IoFilterChain filterChain = session.getFilterChain(); 
-            filterChain.fireExceptionCaught(e);
+            session.getFirstFilterIn().exceptionCaught(session, e);
         } finally {
             clearWriteRequestQueue(session);
             ((AbstractIoService) session.getService()).getListeners().fireSessionDestroyed(session);
@@ -511,8 +511,7 @@
                     buf.reset();
                     failedRequests.add(req);
                 } else {
-                    IoFilterChain filterChain = session.getFilterChain(); 
-                    filterChain.fireMessageSent(req);
+                	session.getFirstFilterOut().messageSent(session, req);
                 }
             } else {
                 failedRequests.add(req);
@@ -531,8 +530,8 @@
                 session.decreaseScheduledBytesAndMessages(r);
                 r.getFuture().setException(cause);
             }
-            IoFilterChain filterChain = session.getFilterChain(); 
-            filterChain.fireExceptionCaught(cause);
+            
+            session.getFirstFilterIn().exceptionCaught(session, cause);
         }
     }
 
@@ -585,8 +584,7 @@
             }
 
             if (readBytes > 0) {
-                IoFilterChain filterChain = session.getFirstFilter(); 
-                filterChain.fireMessageReceived(buf);
+                session.getFirstFilterIn().messageReceived(session, buf);
                 buf = null;
 
                 if (hasFragmentation) {
@@ -604,8 +602,7 @@
             if (e instanceof IOException) {
                 scheduleRemove(session);
             }
-            IoFilterChain filterChain = session.getFilterChain(); 
-            filterChain.fireExceptionCaught(e);
+            session.getFirstFilterIn().exceptionCaught(session, e);
         }
     }
 
@@ -637,8 +634,7 @@
                     }
                 } catch (Exception e) {
                     scheduleRemove(session);
-                    IoFilterChain filterChain = session.getFilterChain(); 
-                    filterChain.fireExceptionCaught(e);
+                    session.getFirstFilterIn().exceptionCaught(session, e);
                 }
                 break;
             case CLOSED:
@@ -738,8 +734,7 @@
                 }
             } while (writtenBytes < maxWrittenBytes);
         } catch (Exception e) {
-            IoFilterChain filterChain = session.getFilterChain(); 
-            filterChain.fireExceptionCaught(e);
+            session.getFirstFilterIn().exceptionCaught(session, e);
             return false;
         }
 
@@ -805,8 +800,7 @@
 
     private void fireMessageSent(T session, WriteRequest req) {
         session.setCurrentWriteRequest(null);
-        IoFilterChain filterChain = session.getFilterChain(); 
-        filterChain.fireMessageSent(req);
+        session.getFirstFilterOut().messageSent(session, req);
     }
 
     private void updateTrafficMask() {
@@ -843,8 +837,7 @@
         try {
             setInterestedInRead(session, (mask & SelectionKey.OP_READ) != 0);
         } catch (Exception e) {
-            IoFilterChain filterChain = session.getFilterChain(); 
-            filterChain.fireExceptionCaught(e);
+            session.getFirstFilterIn().exceptionCaught(session, e);
         }
         try {
             setInterestedInWrite(
@@ -852,8 +845,7 @@
                     !session.getWriteRequestQueue().isEmpty(session) &&
                             (mask & SelectionKey.OP_WRITE) != 0);
         } catch (Exception e) {
-            IoFilterChain filterChain = session.getFilterChain(); 
-            filterChain.fireExceptionCaught(e);
+            session.getFirstFilterIn().exceptionCaught(session, e);
         }
     }
 

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/AbstractIoService.java Mon Nov  3 16:25:08 2008
@@ -31,6 +31,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.mina.core.IoUtil;
+import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.future.ConnectFuture;
 import org.apache.mina.core.future.DefaultIoFuture;
 import org.apache.mina.core.future.IoFuture;
@@ -120,10 +121,11 @@
         }
     };
 
-    /**
-     * Current filter chain builder.
-     */
-    private IoFilterChainBuilder filterChainBuilder = new DefaultIoFilterChainBuilder();
+    /** The incoming filter chain */
+    private List<IoFilter> filterChainIn;
+    
+    /** The outgoing filter chain */
+    private List<IoFilter> filterChainOut;
 
     private IoSessionDataStructureFactory sessionDataStructureFactory = new DefaultIoSessionDataStructureFactory();
 
@@ -212,30 +214,43 @@
     /**
      * {@inheritDoc}
      */
-    public final IoFilterChainBuilder getFilterChainBuilder() {
-        return filterChainBuilder;
+    public final List<IoFilter> getFilterInChain() {
+        return filterChainIn;
     }
 
     /**
      * {@inheritDoc}
      */
-    public final void setFilterChainBuilder(IoFilterChainBuilder builder) {
-        if (builder == null) {
-            builder = new DefaultIoFilterChainBuilder();
-        }
-        filterChainBuilder = builder;
+    public final List<IoFilter> getFilterOutChain() {
+        return filterChainOut;
     }
 
     /**
      * {@inheritDoc}
      */
-    public final DefaultIoFilterChainBuilder getFilterChain() {
-        if (filterChainBuilder instanceof DefaultIoFilterChainBuilder) {
-            return (DefaultIoFilterChainBuilder) filterChainBuilder;
-        } else {
-            throw new IllegalStateException(
-                    "Current filter chain builder is not a DefaultIoFilterChainBuilder.");
-        }
+    public final void setFilterChainIn(List<IoFilter> filters) {
+        filterChainIn = filters;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public final void setFilterChainOut(List<IoFilter> filters) {
+        filterChainOut = filters;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public final List<IoFilter> getFilterChainIn() {
+    	return filterChainIn;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public final List<IoFilter> getFilterChainOut() {
+    	return filterChainOut;
     }
 
     /**
@@ -494,7 +509,7 @@
 
         if (future != null && future instanceof ConnectFuture) {
             // DefaultIoFilterChain will notify the future. (We support ConnectFuture only for now).
-            session.setAttribute(DefaultIoFilterChain.SESSION_CREATED_FUTURE,
+            session.setAttribute(session,
                     future);
         }
 

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoService.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoService.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoService.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoService.java Mon Nov  3 16:25:08 2008
@@ -20,13 +20,12 @@
 package org.apache.mina.core.service;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
 import org.apache.mina.core.IoUtil;
-import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
-import org.apache.mina.core.filterchain.IoFilterChain;
-import org.apache.mina.core.filterchain.IoFilterChainBuilder;
+import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.future.WriteFuture;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.core.session.IoSessionConfig;
@@ -109,33 +108,32 @@
     IoSessionConfig getSessionConfig();
 
     /**
-     * Returns the {@link IoFilterChainBuilder} which will build the
-     * {@link IoFilterChain} of all {@link IoSession}s which is created
-     * by this service.
-     * The default value is an empty {@link DefaultIoFilterChainBuilder}.
+     * Returns the incoming filter chain stored into the service.
+     * @return the incoming filter chain
      */
-    IoFilterChainBuilder getFilterChainBuilder();
+    List<IoFilter> getFilterChainIn();
 
     /**
-     * Sets the {@link IoFilterChainBuilder} which will build the
-     * {@link IoFilterChain} of all {@link IoSession}s which is created
-     * by this service.
-     * If you specify <tt>null</tt> this property will be set to
-     * an empty {@link DefaultIoFilterChainBuilder}.
+     * Returns the outgoing filter chain stored into the service.
+     * @return the outgoing filter chain
      */
-    void setFilterChainBuilder(IoFilterChainBuilder builder);
+    List<IoFilter> getFilterChainOut();
 
     /**
-     * A shortcut for <tt>( ( DefaultIoFilterChainBuilder ) </tt>{@link #getFilterChainBuilder()}<tt> )</tt>.
-     * Please note that the returned object is not a <b>real</b> {@link IoFilterChain}
-     * but a {@link DefaultIoFilterChainBuilder}.  Modifying the returned builder
-     * won't affect the existing {@link IoSession}s at all, because
-     * {@link IoFilterChainBuilder}s affect only newly created {@link IoSession}s.
-     *
-     * @throws IllegalStateException if the current {@link IoFilterChainBuilder} is
-     *                               not a {@link DefaultIoFilterChainBuilder}
+     * Sets the incoming filter chain. It will be copied for every
+     * new created session.
+     * 
+     * @param builder the new incoming filter chain
+     */
+    void setFilterChainIn(List<IoFilter> builder);
+
+    /**
+     * Sets the outgoing filter chain. It will be copied for every
+     * new created session.
+     * 
+     * @param builder the new outgoing filter chain
      */
-    DefaultIoFilterChainBuilder getFilterChain();
+    void setFilterChainOut(List<IoFilter> builder);
 
     /**
      * Returns a value of whether or not this service is active

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/service/IoServiceListenerSupport.java Mon Nov  3 16:25:08 2008
@@ -32,7 +32,6 @@
 import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.util.ExceptionMonitor;
-import org.apache.mina.core.filterchain.IoFilterChain;
 
 /**
  * A helper which provides addition and removal of {@link IoServiceListener}s and firing
@@ -198,9 +197,8 @@
         }
 
         // Fire session events.
-        IoFilterChain filterChain = session.getFilterChain(); 
-        filterChain.fireSessionCreated();
-        filterChain.fireSessionOpened();
+        session.getFirstFilterIn().sessionCreated(session);
+        session.getFirstFilterIn().sessionOpened(session);
 
         int managedSessionCount = managedSessions.size();
         if (managedSessionCount > largestManagedSessionCount) {
@@ -228,7 +226,7 @@
         }
 
         // Fire session events.
-        session.getFilterChain().fireSessionClosed();
+        session.getFirstFilterIn().sessionClosed(session);
 
         // Fire listener events.
         try {

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/AbstractIoSession.java Mon Nov  3 16:25:08 2008
@@ -139,10 +139,10 @@
     private boolean deferDecreaseReadBuffer = true;
 
     /** The list of IoFilter for the incoming chain */
-    protected final List<IoFilter> incomingChain = new ArrayList<IoFilter>();
+    protected List<IoFilter> incomingChain;
 
     /** The list of IoFilter for the outgoing chain */
-    protected final List<IoFilter> outgoingChain = new ArrayList<IoFilter>();
+    protected List<IoFilter> outgoingChain;
 
 
     /**
@@ -369,23 +369,47 @@
     /**
      * {@inheritDoc}
      */
-    public List<IoFilter> getFilterInChain() {
+    public List<IoFilter> getFilterChainIn() {
         return incomingChain;
     }
 
     /**
      * {@inheritDoc}
      */
-    public List<IoFilter> getFilterOutChain() {
+    public List<IoFilter> getFilterChainOut() {
         return outgoingChain;
     }
 
     /**
+     * Store a copy of the given incoming chain 
+     * @param chain The chain to copy
+     */
+    public void setFilterChainIn(List<IoFilter> chain) {
+    	incomingChain = new ArrayList<IoFilter>(chain.size());
+    	
+    	for (IoFilter filter:chain) {
+    		incomingChain.add(filter);
+    	}
+    }
+
+    /**
+     * Store a copy of the given outgoing chain 
+     * @param chain The chain to copy
+     */
+    public void setFilterChainOut(List<IoFilter> chain) {
+    	outgoingChain = new ArrayList<IoFilter>(chain.size());
+    	
+    	for (IoFilter filter:chain) {
+    		outgoingChain.add(filter);
+    	}
+    }
+
+    /**
      * Get the first filter in the incoming chain
      * @return The first filter in the chain
      */
     public IoFilter getFirstFilterIn() {
-    	return getFilterInChain().get(0);
+    	return getFilterChainIn().get(0);
     }
 
     /**
@@ -393,7 +417,7 @@
      * @return The first filter in the chain
      */
     public IoFilter getFirstFilterOut() {
-    	return getFilterOutChain().get(0);
+    	return getFilterChainOut().get(0);
     }
 
     

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/DummySession.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/DummySession.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/DummySession.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/DummySession.java Mon Nov  3 16:25:08 2008
@@ -26,9 +26,7 @@
 import java.util.concurrent.Executor;
 
 import org.apache.mina.core.file.FileRegion;
-import org.apache.mina.core.filterchain.DefaultIoFilterChain;
 import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.IoFuture;
 import org.apache.mina.core.service.AbstractIoAcceptor;
 import org.apache.mina.core.service.DefaultTransportMetadata;
@@ -77,12 +75,6 @@
         }
     };
 
-    /** The first filter in the incoming chain */
-    private final IoFilter firstFilterIn;
-
-    /** The first filter in the outgoing chain */
-    private final IoFilter firstFilterOut;
-
     private final IoProcessor<IoSession> processor;
 
     private volatile IoHandler handler = new IoHandlerAdapter();
@@ -147,11 +139,11 @@
                         file.getFileChannel().position(file.getPosition() + file.getRemainingBytes());
                         file.update(file.getRemainingBytes());
                     } catch (IOException e) {
-                        s.getFilterOutChain().fireExceptionCaught(e);
+                        s.getFirstFilterOut().exceptionCaught(session, e);
                     }
                 }
                 
-                firstFilterIn.fireMessageSent(req);
+                session.getFirstFilterOut().messageSent(session, req);
             }
 
             public void remove(IoSession session) {
@@ -196,20 +188,6 @@
         this.config = config;
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public IoFilter getFilterInChain() {
-        return firstFilterIn;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public IoFilter getFilterOutChain() {
-        return firstFilterOut;
-    }
-
     public IoHandler getHandler() {
         return handler;
     }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoEvent.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoEvent.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoEvent.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoEvent.java Mon Nov  3 16:25:08 2008
@@ -19,7 +19,6 @@
  */
 package org.apache.mina.core.session;
 
-import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.write.WriteRequest;
 
 /**
@@ -66,39 +65,36 @@
     }
 
     public void fire() {
-    	IoFilter firstFilterIn = getSession().getFilterInChain().get(0);
-    	IoFilter firstFilterOut = getSession().getFilterOutChain().get(0);
-    	
         switch (getType()) {
         case MESSAGE_RECEIVED:
-        	firstFilterIn.messageReceived(session, getParameter());
+        	getSession().getFirstFilterIn().messageReceived(session, getParameter());
             break;
         case MESSAGE_SENT:
-        	firstFilterOut.messageSent(session, (WriteRequest) getParameter());
+        	getSession().getFirstFilterOut().messageSent(session, (WriteRequest) getParameter());
             break;
         case WRITE:
-        	firstFilterOut.filterWrite(session, (WriteRequest) getParameter());
+        	getSession().getFirstFilterOut().filterWrite(session, (WriteRequest) getParameter());
             break;
         case SET_TRAFFIC_MASK:
             //getSession().getFilterChain().fireFilterSetTrafficMask((TrafficMask) getParameter());
             break;
         case CLOSE:
-        	firstFilterIn.filterClose(session);
+        	getSession().getFirstFilterIn().filterClose(session);
             break;
         case EXCEPTION_CAUGHT:
-        	firstFilterIn.exceptionCaught(session, (Throwable) getParameter());
+        	getSession().getFirstFilterIn().exceptionCaught(session, (Throwable) getParameter());
             break;
         case SESSION_IDLE:
-        	firstFilterIn.sessionIdle(session, (IdleStatus) getParameter());
+        	getSession().getFirstFilterIn().sessionIdle(session, (IdleStatus) getParameter());
             break;
         case SESSION_OPENED:
-        	firstFilterIn.sessionOpened(session);
+        	getSession().getFirstFilterIn().sessionOpened(session);
             break;
         case SESSION_CREATED:
-        	firstFilterIn.sessionCreated(session);
+        	getSession().getFirstFilterIn().sessionCreated(session);
             break;
         case SESSION_CLOSED:
-        	firstFilterIn.sessionClosed(session);
+        	getSession().getFirstFilterIn().sessionClosed(session);
             break;
         default:
             throw new IllegalArgumentException("Unknown event type: " + getType());

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/core/session/IoSession.java Mon Nov  3 16:25:08 2008
@@ -97,9 +97,15 @@
      * @return the first filter from the Incoming chain 
      * that only affects this session.
      */
-    List<IoFilter> getFilterInChain();
+    List<IoFilter> getFilterChainIn();
     
     /**
+     * Store a copy of the given incoming chain 
+     * @param chain The chain to copy
+     */
+    void setFilterChainIn(List<IoFilter> chain);
+
+    /**
      * Get the first filter in the incoming chain
      * @return The first filter in the chain
      */
@@ -109,7 +115,13 @@
      * @return the first filter from the Outgoing chain 
      * that only affects this session.
      */
-    List<IoFilter> getFilterOutChain();
+    List<IoFilter> getFilterChainOut();
+
+    /**
+     * Store a copy of the given outgoing chain 
+     * @param chain The chain to copy
+     */
+    void setFilterChainOut(List<IoFilter> chain);
 
     /**
      * Get the first filter in the outgoing chain

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/codec/ProtocolCodecFilter.java Mon Nov  3 16:25:08 2008
@@ -26,7 +26,6 @@
 import org.apache.mina.core.file.FileRegion;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
 import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.future.DefaultWriteFuture;
 import org.apache.mina.core.future.WriteFuture;
 import org.apache.mina.core.session.AttributeKey;
@@ -49,9 +48,7 @@
  */
 public class ProtocolCodecFilter extends IoFilterAdapter {
     // Set the filter's name
-    static {
-    	name = "protocolCodec";
-    }
+    private static final String DEFAULT_NAME = "protocolCodec";
     
 
     private static final Class<?>[] EMPTY_PARAMS = new Class[0];
@@ -74,13 +71,25 @@
      * @param factory The associated factory
      */
     public ProtocolCodecFilter(ProtocolCodecFactory factory) {
+    	this(DEFAULT_NAME, factory);
+    }
+
+    /**
+     * 
+     * Creates a new instance of ProtocolCodecFilter, associating a factory
+     * for the creation of the encoder and decoder.
+     *
+     * @param name the filter's name
+     * @param factory The associated factory
+     */
+    public ProtocolCodecFilter(String name, ProtocolCodecFactory factory) {
+    	super(name);
         if (factory == null) {
             throw new NullPointerException("factory");
         }
         this.factory = factory;
     }
 
-    
     /**
      * Creates a new instance of ProtocolCodecFilter, without any factory.
      * The encoder/decoder factory will be created as an inner class, using
@@ -91,6 +100,20 @@
      */
     public ProtocolCodecFilter(final ProtocolEncoder encoder,
             final ProtocolDecoder decoder) {
+    	this(DEFAULT_NAME, encoder, decoder);
+    }
+
+    /**
+     * Creates a new instance of ProtocolCodecFilter, without any factory.
+     * The encoder/decoder factory will be created as an inner class, using
+     * the two parameters (encoder and decoder). 
+     * 
+     * @param encoder The class responsible for encoding the message
+     * @param decoder The class responsible for decoding the message
+     */
+    public ProtocolCodecFilter(String name, final ProtocolEncoder encoder,
+            final ProtocolDecoder decoder) {
+    	super(name);
         if (encoder == null) {
             throw new NullPointerException("encoder");
         }
@@ -122,6 +145,22 @@
     public ProtocolCodecFilter(
             final Class<? extends ProtocolEncoder> encoderClass,
             final Class<? extends ProtocolDecoder> decoderClass) {
+    	this(DEFAULT_NAME, encoderClass, decoderClass);
+    }
+
+    /**
+     * Creates a new instance of ProtocolCodecFilter, without any factory.
+     * The encoder/decoder factory will be created as an inner class, using
+     * the two parameters (encoder and decoder), which are class names. Instances
+     * for those classes will be created in this constructor.
+     * 
+     * @param encoder The class responsible for encoding the message
+     * @param decoder The class responsible for decoding the message
+     */
+    public ProtocolCodecFilter(String name,
+            final Class<? extends ProtocolEncoder> encoderClass,
+            final Class<? extends ProtocolDecoder> decoderClass) {
+    	super(name);
         if (encoderClass == null) {
             throw new NullPointerException("encoderClass");
         }
@@ -161,7 +200,6 @@
             }
         };
     }
-
     
     /**
      * Get the encoder instance from a given session.
@@ -217,10 +255,9 @@
      *    
      */
     @Override
-    public void messageReceived(NextFilter nextFilter, IoSession session,
-            Object message) throws Exception {
+    public void messageReceived(IoSession session, Object message) {
         if (!(message instanceof IoBuffer)) {
-            nextFilter.messageReceived(session, message);
+        	getNextFilter().messageReceived(session, message);
             return;
         }
 
@@ -235,11 +272,11 @@
             ProtocolDecoderException pde = new ProtocolDecoderException(
                 "Cannot decode if the decoder is null. Add the filter in the chain" +
                 "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
+            getNextFilter().exceptionCaught(session, pde);
             return;
         }
         
-        ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter);
+        ProtocolDecoderOutput decoderOut = getDecoderOut(session, getNextFilter());
         
         if ( decoderOut == null) {
             // The decoderOut must not be null. It's null if
@@ -249,7 +286,7 @@
             ProtocolDecoderException pde = new ProtocolDecoderException(
                 "Cannot decode if the decoder is null. Add the filter in the chain" +
                 "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
+            getNextFilter().exceptionCaught(session, pde);
             return;
         }
         
@@ -286,7 +323,7 @@
 
                 // Fire the exceptionCaught event.
                 decoderOut.flush();
-                nextFilter.exceptionCaught(session, pde);
+                getNextFilter().exceptionCaught(session, pde);
 
                 // Retry only if the type of the caught exception is
                 // recoverable and the buffer position has changed.
@@ -301,30 +338,28 @@
     }
 
     @Override
-    public void messageSent(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
+    public void messageSent(IoSession session, WriteRequest writeRequest) {
         if (writeRequest instanceof EncodedWriteRequest) {
             return;
         }
 
         if (!(writeRequest instanceof MessageWriteRequest)) {
-            nextFilter.messageSent(session, writeRequest);
+            getNextFilter().messageSent(session, writeRequest);
             return;
         }
 
         MessageWriteRequest wrappedRequest = (MessageWriteRequest) writeRequest;
-        nextFilter.messageSent(session, wrappedRequest.getParentRequest());
+        getNextFilter().messageSent(session, wrappedRequest.getParentRequest());
     }
 
     @Override
-    public void filterWrite(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
+    public void filterWrite(IoSession session, WriteRequest writeRequest) {
         Object message = writeRequest.getMessage();
         
         // Bypass the encoding if the message is contained in a ByteBuffer,
         // as it has already been encoded before
         if (message instanceof IoBuffer || message instanceof FileRegion) {
-            nextFilter.filterWrite(session, writeRequest);
+            getNextFilter().filterWrite(session, writeRequest);
             return;
         }
 
@@ -339,12 +374,12 @@
             ProtocolDecoderException pde = new ProtocolDecoderException(
                 "Cannot encode if the encoder is null. Add the filter in the chain" +
                 "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
+            getNextFilter().exceptionCaught(session, pde);
             return;
         }
         
         ProtocolEncoderOutputImpl encoderOut = getEncoderOut(session,
-                nextFilter, writeRequest);
+                getNextFilter(), writeRequest);
 
         if ( encoderOut == null) {
             // The encoder must not be null. It's null if
@@ -354,7 +389,7 @@
             ProtocolDecoderException pde = new ProtocolDecoderException(
                 "Cannot encode if the encoder is null. Add the filter in the chain" +
                 "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
+            getNextFilter().exceptionCaught(session, pde);
             return;
         }
         
@@ -366,7 +401,7 @@
             encoderOut.flushWithoutFuture();
             
             // Call the next filter
-            nextFilter.filterWrite(session, new MessageWriteRequest(
+            getNextFilter().filterWrite(session, new MessageWriteRequest(
                     writeRequest));
         } catch (Throwable t) {
             ProtocolEncoderException pee;
@@ -394,7 +429,7 @@
      * @throws Exception if we can't create instances of the decoder or encoder
      */
     @Override
-    public void sessionCreated(NextFilter nextFilter, IoSession session) throws Exception {
+    public void sessionCreated(IoSession session) {
         // Creates the decoder and stores it into the newly created session 
         ProtocolDecoder decoder = factory.getDecoder(session);
         session.setAttribute(DECODER, decoder);
@@ -404,12 +439,11 @@
         session.setAttribute(ENCODER, encoder);
 
         // Call the next filter
-        nextFilter.sessionCreated(session);
+        getNextFilter().sessionCreated(session);
     }
 
     @Override
-    public void sessionClosed(NextFilter nextFilter, IoSession session)
-            throws Exception {
+    public void sessionClosed(IoSession session) {
         // Call finishDecode() first when a connection is closed.
         ProtocolDecoder decoder = getDecoder(session);
         
@@ -421,11 +455,11 @@
             ProtocolDecoderException pde = new ProtocolDecoderException(
                 "Cannot decode if the decoder is null. Add the filter in the chain" +
                 "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
+            getNextFilter().exceptionCaught(session, pde);
             return;
         }
         
-        ProtocolDecoderOutput decoderOut = getDecoderOut(session, nextFilter);
+        ProtocolDecoderOutput decoderOut = getDecoderOut(session, getNextFilter());
         
         if ( decoderOut == null) {
             // The decoder must not be null. It's null if
@@ -435,7 +469,7 @@
             ProtocolDecoderException pde = new ProtocolDecoderException(
                 "Cannot decode if the decoder is null. Add the filter in the chain" +
                 "before the first session is created" ); 
-            nextFilter.exceptionCaught(session, pde);
+            getNextFilter().exceptionCaught(session, pde);
             return;
         }
         
@@ -457,16 +491,16 @@
             decoderOut.flush();
         }
 
-        nextFilter.sessionClosed(session);
+        getNextFilter().sessionClosed(session);
     }
 
     private ProtocolEncoderOutputImpl getEncoderOut(IoSession session,
-            NextFilter nextFilter, WriteRequest writeRequest) {
+            IoFilter nextFilter, WriteRequest writeRequest) {
         return new ProtocolEncoderOutputImpl(session, nextFilter, writeRequest);
     }
 
     private ProtocolDecoderOutput getDecoderOut(IoSession session,
-            NextFilter nextFilter) {
+            IoFilter nextFilter) {
         ProtocolDecoderOutput out = (ProtocolDecoderOutput) session.getAttribute(DECODER_OUT);
         if (out == null) {
             out = new ProtocolDecoderOutputImpl(session, nextFilter);
@@ -530,10 +564,10 @@
     private static class ProtocolDecoderOutputImpl extends
             AbstractProtocolDecoderOutput {
         private final IoSession session;
-        private final NextFilter nextFilter;
+        private final IoFilter nextFilter;
 
         public ProtocolDecoderOutputImpl(
-                IoSession session, NextFilter nextFilter) {
+                IoSession session, IoFilter nextFilter) {
             this.session = session;
             this.nextFilter = nextFilter;
         }
@@ -550,12 +584,12 @@
             AbstractProtocolEncoderOutput {
         private final IoSession session;
 
-        private final NextFilter nextFilter;
+        private final IoFilter nextFilter;
 
         private final WriteRequest writeRequest;
 
         public ProtocolEncoderOutputImpl(IoSession session,
-                NextFilter nextFilter, WriteRequest writeRequest) {
+                IoFilter nextFilter, WriteRequest writeRequest) {
             this.session = session;
             this.nextFilter = nextFilter;
             this.writeRequest = writeRequest;

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java Mon Nov  3 16:25:08 2008
@@ -561,88 +561,82 @@
     }
 
     @Override
-    public final void sessionOpened(NextFilter nextFilter, IoSession session) {
+    public final void sessionOpened(IoSession session) {
         if (eventTypes.contains(IoEventType.SESSION_OPENED)) {
-            fireEvent(new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED,
+            fireEvent(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_OPENED,
                     session, null));
         } else {
-            nextFilter.sessionOpened(session);
+            getNextFilter().sessionOpened(session);
         }
     }
 
     @Override
-    public final void sessionClosed(NextFilter nextFilter, IoSession session) {
+    public final void sessionClosed(IoSession session) {
         if (eventTypes.contains(IoEventType.SESSION_CLOSED)) {
-            fireEvent(new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED,
+            fireEvent(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_CLOSED,
                     session, null));
         } else {
-            nextFilter.sessionClosed(session);
+        	getNextFilter().sessionClosed(session);
         }
     }
 
     @Override
-    public final void sessionIdle(NextFilter nextFilter, IoSession session,
-            IdleStatus status) {
+    public final void sessionIdle(IoSession session, IdleStatus status) {
         if (eventTypes.contains(IoEventType.SESSION_IDLE)) {
-            fireEvent(new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE,
+            fireEvent(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_IDLE,
                     session, status));
         } else {
-            nextFilter.sessionIdle(session, status);
+        	getNextFilter().sessionIdle(session, status);
         }
     }
 
     @Override
-    public final void exceptionCaught(NextFilter nextFilter, IoSession session,
-            Throwable cause) {
+    public final void exceptionCaught(IoSession session, Throwable cause) {
         if (eventTypes.contains(IoEventType.EXCEPTION_CAUGHT)) {
-            fireEvent(new IoFilterEvent(nextFilter,
+            fireEvent(new IoFilterEvent(getNextFilter(),
                     IoEventType.EXCEPTION_CAUGHT, session, cause));
         } else {
-            nextFilter.exceptionCaught(session, cause);
+        	getNextFilter().exceptionCaught(session, cause);
         }
     }
 
     @Override
-    public final void messageReceived(NextFilter nextFilter, IoSession session,
-            Object message) {
+    public final void messageReceived(IoSession session, Object message) {
         if (eventTypes.contains(IoEventType.MESSAGE_RECEIVED)) {
-            fireEvent(new IoFilterEvent(nextFilter,
+            fireEvent(new IoFilterEvent(getNextFilter(),
                     IoEventType.MESSAGE_RECEIVED, session, message));
         } else {
-            nextFilter.messageReceived(session, message);
+        	getNextFilter().messageReceived(session, message);
         }
     }
 
     @Override
-    public final void messageSent(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) {
+    public final void messageSent(IoSession session, WriteRequest writeRequest) {
         if (eventTypes.contains(IoEventType.MESSAGE_SENT)) {
-            fireEvent(new IoFilterEvent(nextFilter, IoEventType.MESSAGE_SENT,
+            fireEvent(new IoFilterEvent(getNextFilter(), IoEventType.MESSAGE_SENT,
                     session, writeRequest));
         } else {
-            nextFilter.messageSent(session, writeRequest);
+        	getNextFilter().messageSent(session, writeRequest);
         }
     }
 
     @Override
-    public final void filterWrite(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) {
+    public final void filterWrite(IoSession session, WriteRequest writeRequest) {
         if (eventTypes.contains(IoEventType.WRITE)) {
-            fireEvent(new IoFilterEvent(nextFilter, IoEventType.WRITE, session,
+            fireEvent(new IoFilterEvent(getNextFilter(), IoEventType.WRITE, session,
                     writeRequest));
         } else {
-            nextFilter.filterWrite(session, writeRequest);
+        	getNextFilter().filterWrite(session, writeRequest);
         }
     }
 
     @Override
-    public final void filterClose(NextFilter nextFilter, IoSession session)
-            throws Exception {
+    public final void filterClose(IoSession session) {
         if (eventTypes.contains(IoEventType.CLOSE)) {
-            fireEvent(new IoFilterEvent(nextFilter, IoEventType.CLOSE, session,
+            fireEvent(new IoFilterEvent(getNextFilter(), IoEventType.CLOSE, session,
                     null));
         } else {
-            nextFilter.filterClose(session);
+        	getNextFilter().filterClose(session);
         }
     }
 }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/executor/WriteRequestFilter.java Mon Nov  3 16:25:08 2008
@@ -97,13 +97,12 @@
 
     @Override
     public void filterWrite(
-            NextFilter nextFilter,
-            IoSession session, WriteRequest writeRequest) throws Exception {
+            IoSession session, WriteRequest writeRequest) {
 
         final IoEvent e = new IoEvent(IoEventType.WRITE, session, writeRequest);
 
         if (queueHandler.accept(this, e)) {
-            nextFilter.filterWrite(session, writeRequest);
+            getNextFilter().filterWrite(session, writeRequest);
             WriteFuture writeFuture = writeRequest.getFuture();
             if (writeFuture == null) {
                 return;

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/LoggingFilter.java Mon Nov  3 16:25:08 2008
@@ -173,51 +173,45 @@
     }
 
     @Override
-    public void exceptionCaught(NextFilter nextFilter, IoSession session,
-            Throwable cause) throws Exception {
+    public void exceptionCaught(IoSession session, Throwable cause) {
     	log(exceptionCaughtLevel, "EXCEPTION :", cause);
-        nextFilter.exceptionCaught(session, cause);
+        getNextFilter().exceptionCaught(session, cause);
     }
 
     @Override
-    public void messageReceived(NextFilter nextFilter, IoSession session,
-            Object message) throws Exception {
+    public void messageReceived(IoSession session, Object message) {
     	log(messageReceivedLevel, "RECEIVED: {}", message );
-    	nextFilter.messageReceived(session, message);
+    	getNextFilter().messageReceived(session, message);
     }
 
     @Override
-    public void messageSent(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
+    public void messageSent(IoSession session, WriteRequest writeRequest) {
     	log(messageSentLevel, "SENT: {}", writeRequest.getMessage() );
-        nextFilter.messageSent(session, writeRequest);
+    	getNextFilter().messageSent(session, writeRequest);
     }
 
     @Override
-    public void sessionCreated(NextFilter nextFilter, IoSession session)
-    		throws Exception {
+    public void sessionCreated(IoSession session) {
     	log(sessionCreatedLevel, "CREATED");
-        nextFilter.sessionCreated(session);
+    	getNextFilter().sessionCreated(session);
     }
 
     @Override
-    public void sessionOpened(NextFilter nextFilter, IoSession session)
-    throws Exception {
+    public void sessionOpened(IoSession session) {
     	log(sessionOpenedLevel, "OPENED");
-        nextFilter.sessionOpened(session);
+    	getNextFilter().sessionOpened(session);
     }
 
     @Override
-    public void sessionIdle(NextFilter nextFilter, IoSession session,
-            IdleStatus status) throws Exception {
+    public void sessionIdle(IoSession session, IdleStatus status) {
     	log(sessionIdleLevel, "IDLE");
-        nextFilter.sessionIdle(session, status);
+    	getNextFilter().sessionIdle(session, status);
     }
 
     @Override
-    public void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception {
+    public void sessionClosed(IoSession session) {
     	log(sessionClosedLevel, "CLOSED");
-        nextFilter.sessionClosed(session);
+    	getNextFilter().sessionClosed(session);
     }
     
     /**

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/logging/MdcInjectionFilter.java Mon Nov  3 16:25:08 2008
@@ -123,7 +123,7 @@
     }
 
     @Override
-    protected void filter(IoFilterEvent event) throws Exception {
+    protected void filter(IoFilterEvent event) {
         // since this method can potentially call into itself
         // we need to check the call depth before clearing the MDC
         int currentCallDepth = callDepth.get();

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/reqres/RequestResponseFilter.java Mon Nov  3 16:25:08 2008
@@ -119,21 +119,20 @@
     }
 
     @Override
-    public void messageReceived(NextFilter nextFilter, IoSession session,
-            Object message) throws Exception {
+    public void messageReceived(IoSession session, Object message) {
         ResponseInspector responseInspector = (ResponseInspector) session
                 .getAttribute(RESPONSE_INSPECTOR);
         Object requestId = responseInspector.getRequestId(message);
         if (requestId == null) {
             // Not a response message.  Ignore.
-            nextFilter.messageReceived(session, message);
+        	getNextFilter().messageReceived(session, message);
             return;
         }
 
         // Retrieve (or remove) the corresponding request.
         ResponseType type = responseInspector.getResponseType(message);
         if (type == null) {
-            nextFilter.exceptionCaught(session, new IllegalStateException(
+        	getNextFilter().exceptionCaught(session, new IllegalStateException(
                     responseInspector.getClass().getName()
                             + "#getResponseType() may not return null."));
         }
@@ -182,7 +181,7 @@
             // And forward the event.
             Response response = new Response(request, message, type);
             request.signal(response);
-            nextFilter.messageReceived(session, response);
+            getNextFilter().messageReceived(session, response);
         }
     }
 
@@ -232,8 +231,7 @@
     }
 
     @Override
-    public void sessionClosed(NextFilter nextFilter, IoSession session)
-            throws Exception {
+    public void sessionClosed(IoSession session) {
         // Copy the unfinished task set to avoid unnecessary lock acquisition.
         // Copying will be cheap because there won't be that many requests queued.
         Set<Request> unrespondedRequests = getUnrespondedRequestStore(session);
@@ -258,7 +256,7 @@
         }
 
         // Now tell the main subject.
-        nextFilter.sessionClosed(session);
+        getNextFilter().sessionClosed(session);
     }
 
     @SuppressWarnings("unchecked")

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/AbstractStreamWriteFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/AbstractStreamWriteFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/AbstractStreamWriteFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/AbstractStreamWriteFilter.java Mon Nov  3 16:25:08 2008
@@ -24,7 +24,6 @@
 
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
-import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.session.AttributeKey;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.core.write.DefaultWriteRequest;
@@ -38,6 +37,9 @@
  * @version $Rev$, $Date$
  */
 public abstract class AbstractStreamWriteFilter<T> extends IoFilterAdapter {
+    // Set the filter's default name
+	private static final String DEFAULT_NAME = "abstractStreamWrite";
+	
     /**
      * The default buffer size this filter uses for writing.
      */
@@ -54,6 +56,21 @@
     private int writeBufferSize = DEFAULT_STREAM_BUFFER_SIZE;
 
 
+    /**
+     * Default Constructor.
+     */
+    protected AbstractStreamWriteFilter() {
+    	super(DEFAULT_NAME);
+    }
+    
+    /**
+     * Default Constructor.
+     * @param name The filter's name
+     */
+    protected AbstractStreamWriteFilter(String name) {
+    	super(name);
+    }
+    
     @Override
     public void onPreAdd(IoFilterChain parent, String name,
             NextFilter nextFilter) throws Exception {
@@ -65,8 +82,7 @@
     }
 
     @Override
-    public void filterWrite(NextFilter nextFilter, IoSession session,
-                            WriteRequest writeRequest) throws Exception {
+    public void filterWrite(IoSession session, WriteRequest writeRequest) {
         // If we're already processing a stream we need to queue the WriteRequest.
         if (session.getAttribute(CURRENT_STREAM) != null) {
             Queue<WriteRequest> queue = getWriteRequestQueue(session);
@@ -88,17 +104,17 @@
             if (buffer == null) {
                 // End of stream reached.
                 writeRequest.getFuture().setWritten();
-                nextFilter.messageSent(session, writeRequest);
+                getNextFilter().messageSent(session, writeRequest);
             } else {
                 session.setAttribute(CURRENT_STREAM, message);
                 session.setAttribute(CURRENT_WRITE_REQUEST, writeRequest);
 
-                nextFilter.filterWrite(session, new DefaultWriteRequest(
+                getNextFilter().filterWrite(session, new DefaultWriteRequest(
                         buffer));
             }
 
         } else {
-            nextFilter.filterWrite(session, writeRequest);
+        	getNextFilter().filterWrite(session, writeRequest);
         }
     }
     
@@ -115,12 +131,11 @@
     }
     
     @Override
-    public void messageSent(NextFilter nextFilter, IoSession session,
-                            WriteRequest writeRequest) throws Exception {
+    public void messageSent(IoSession session, WriteRequest writeRequest) {
         T stream = getMessageClass().cast(session.getAttribute(CURRENT_STREAM));
 
         if (stream == null) {
-            nextFilter.messageSent(session, writeRequest);
+            getNextFilter().messageSent(session, writeRequest);
         } else {
             IoBuffer buffer = getNextBuffer(stream);
 
@@ -135,15 +150,15 @@
                 if (queue != null) {
                     WriteRequest wr = queue.poll();
                     while (wr != null) {
-                        filterWrite(nextFilter, session, wr);
+                        filterWrite(session, wr);
                         wr = queue.poll();
                     }
                 }
 
                 currentWriteRequest.getFuture().setWritten();
-                nextFilter.messageSent(session, currentWriteRequest);
+                getNextFilter().messageSent(session, currentWriteRequest);
             } else {
-                nextFilter.filterWrite(session, new DefaultWriteRequest(
+            	getNextFilter().filterWrite(session, new DefaultWriteRequest(
                         buffer));
             }
         }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/FileRegionWriteFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/FileRegionWriteFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/FileRegionWriteFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/FileRegionWriteFilter.java Mon Nov  3 16:25:08 2008
@@ -58,13 +58,24 @@
  */
 public class FileRegionWriteFilter extends
         AbstractStreamWriteFilter<FileRegion> {
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "fileRegionWrite";
 
-    // Set the filter's name
-    static {
-    	name = "fileRegionWrite";
+    /**
+     * Default Constructor.
+     */
+    public FileRegionWriteFilter() {
+    	super(DEFAULT_NAME);
+    }
+    
+    /**
+     * Default Constructor.
+     * @param name The filter's name
+     */
+    public FileRegionWriteFilter(String name) {
+    	super(name);
     }
     
-
     @Override
     protected Class<FileRegion> getMessageClass() {
         return FileRegion.class;

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/stream/StreamWriteFilter.java Mon Nov  3 16:25:08 2008
@@ -54,10 +54,22 @@
  * @org.apache.xbean.XBean
  */
 public class StreamWriteFilter extends AbstractStreamWriteFilter<InputStream> {
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "streamWrite";
 
-    // Set the filter's name
-    static {
-    	name = "streamWrite";
+    /**
+     * Default Constructor.
+     */
+    public StreamWriteFilter() {
+    	super(DEFAULT_NAME);
+    }
+    
+    /**
+     * Default Constructor.
+     * @param name The filter's name
+     */
+    public StreamWriteFilter(String name) {
+    	super(name);
     }
     
 

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/CommonEventFilter.java Mon Nov  3 16:25:08 2008
@@ -34,54 +34,69 @@
  * @version $Rev:$, $Date:$
  */
 public abstract class CommonEventFilter extends IoFilterAdapter {
-
+    // Set the filter's default name
+	private static final String DEFAULT_NAME = "commonEvent";
+	
+	/**
+	 * Create a new instance with a default filter name
+	 */
     public CommonEventFilter() {
+    	super(DEFAULT_NAME);
+    }
+
+	/**
+	 * Create a new instance with a given filter name
+	 * 
+	 * @param name the filter's name
+	 */
+    public CommonEventFilter(String name) {
+    	super(name);
     }
 
-    protected abstract void filter(IoFilterEvent event) throws Exception;
+    protected abstract void filter(IoFilterEvent event);
 
     @Override
-    public final void sessionCreated(NextFilter nextFilter, IoSession session) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_CREATED, session, null));
+    public final void sessionCreated(IoSession session) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_CREATED, session, null));
     }
 
     @Override
-    public final void sessionOpened(NextFilter nextFilter, IoSession session) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED, session, null));
+    public final void sessionOpened(IoSession session) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_OPENED, session, null));
     }
 
     @Override
-    public final void sessionClosed(NextFilter nextFilter, IoSession session) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED, session, null));
+    public final void sessionClosed(IoSession session) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_CLOSED, session, null));
     }
 
     @Override
-    public final void sessionIdle(NextFilter nextFilter, IoSession session, IdleStatus status) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE, session, status));
+    public final void sessionIdle(IoSession session, IdleStatus status) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.SESSION_IDLE, session, status));
     }
 
     @Override
-    public final void exceptionCaught(NextFilter nextFilter, IoSession session, Throwable cause) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.EXCEPTION_CAUGHT, session, cause));
+    public final void exceptionCaught(IoSession session, Throwable cause) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.EXCEPTION_CAUGHT, session, cause));
     }
 
     @Override
-    public final void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message));
+    public final void messageReceived(IoSession session, Object message) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.MESSAGE_RECEIVED, session, message));
     }
 
     @Override
-    public final void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.MESSAGE_SENT, session, writeRequest));
+    public final void messageSent(IoSession session, WriteRequest writeRequest) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.MESSAGE_SENT, session, writeRequest));
     }
 
     @Override
-    public final void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.WRITE, session, writeRequest));
+    public final void filterWrite(IoSession session, WriteRequest writeRequest) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.WRITE, session, writeRequest));
     }
 
     @Override
-    public final void filterClose(NextFilter nextFilter, IoSession session) throws Exception {
-        filter(new IoFilterEvent(nextFilter, IoEventType.CLOSE, session, null));
+    public final void filterClose(IoSession session) {
+        filter(new IoFilterEvent(getNextFilter(), IoEventType.CLOSE, session, null));
     }
 }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/NoopFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/NoopFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/NoopFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/NoopFilter.java Mon Nov  3 16:25:08 2008
@@ -32,15 +32,21 @@
  * @version $Rev: 671827 $, $Date: 2008-06-26 10:49:48 +0200 (Thu, 26 Jun 2008) $
  */
 public class NoopFilter extends IoFilterAdapter {
-    // Set the filter's name
-    static {
-    	name = "noop";
-    }
+    // Set the default filter's name
+    private static final String DEFAULT_NAME = "noop";
     
     /**
      * Default Constructor.
      */
     public NoopFilter() {
-        super();
+        super(DEFAULT_NAME);
+    }
+    
+    /**
+     * Default Constructor.
+     * @param name The filter's name
+     */
+    public NoopFilter(String name) {
+        super(name);
     }
 }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/ReferenceCountingFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/ReferenceCountingFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/ReferenceCountingFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/ReferenceCountingFilter.java Mon Nov  3 16:25:08 2008
@@ -21,7 +21,6 @@
 
 import org.apache.mina.core.filterchain.IoFilterAdapter;
 import org.apache.mina.core.filterchain.IoFilter;
-import org.apache.mina.core.filterchain.IoFilterChain;
 import org.apache.mina.core.session.IdleStatus;
 import org.apache.mina.core.session.IoSession;
 import org.apache.mina.core.session.TrafficMask;
@@ -36,16 +35,20 @@
  * @org.apache.xbean.XBean
  */
 public class ReferenceCountingFilter extends IoFilterAdapter {
-    // Set the filter's name
-    static {
-    	name = "referenceCounting";
-    }
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "referenceCounting";
     
     private final IoFilter filter;
 
     private int count = 0;
 
+    public ReferenceCountingFilter(String name, IoFilter filter) {
+    	super(name);
+        this.filter = filter;
+    }
+
     public ReferenceCountingFilter(IoFilter filter) {
+    	super(DEFAULT_NAME);
         this.filter = filter;
     }
 
@@ -79,29 +82,25 @@
         }
     }
 
-    public void exceptionCaught(NextFilter nextFilter, IoSession session,
-            Throwable cause) throws Exception {
-        filter.exceptionCaught(nextFilter, session, cause);
+    public void exceptionCaught( IoSession session, Throwable cause) {
+        filter.exceptionCaught(session, cause);
     }
 
-    public void filterClose(NextFilter nextFilter, IoSession session)
-            throws Exception {
-        filter.filterClose(nextFilter, session);
+    public void filterClose(IoSession session) {
+        filter.filterClose(session);
     }
 
-    public void filterWrite(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
-        filter.filterWrite(nextFilter, session, writeRequest);
+    public void filterWrite(IoSession session, WriteRequest writeRequest) {
+        filter.filterWrite(session, writeRequest);
     }
 
-    public void messageReceived(NextFilter nextFilter, IoSession session,
-            Object message) throws Exception {
-        filter.messageReceived(nextFilter, session, message);
+    public void messageReceived(IoSession session, Object message) {
+        filter.messageReceived(session, message);
     }
 
-    public void messageSent(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
-        filter.messageSent(nextFilter, session, writeRequest);
+    public void messageSent(IoSession session,
+            WriteRequest writeRequest) {
+        filter.messageSent(session, writeRequest);
     }
 
     public void onPostAdd(IoFilterChain parent, String name,
@@ -111,31 +110,26 @@
 
     public void onPreRemove(IoFilterChain parent, String name,
             NextFilter nextFilter) throws Exception {
-        filter.onPreRemove(parent, name, nextFilter);
+    	getNextFilter().onPreRemove(parent, name, nextFilter);
     }
 
-    public void sessionClosed(NextFilter nextFilter, IoSession session)
-            throws Exception {
-        filter.sessionClosed(nextFilter, session);
+    public void sessionClosed(IoSession session) {
+        getNextFilter().sessionClosed(session);
     }
 
-    public void sessionCreated(NextFilter nextFilter, IoSession session)
-            throws Exception {
-        filter.sessionCreated(nextFilter, session);
+    public void sessionCreated(IoSession session) {
+    	getNextFilter().sessionCreated(session);
     }
 
-    public void sessionIdle(NextFilter nextFilter, IoSession session,
-            IdleStatus status) throws Exception {
-        filter.sessionIdle(nextFilter, session, status);
+    public void sessionIdle(IoSession session, IdleStatus status) {
+    	getNextFilter().sessionIdle(session, status);
     }
 
-    public void sessionOpened(NextFilter nextFilter, IoSession session)
-            throws Exception {
-        filter.sessionOpened(nextFilter, session);
+    public void sessionOpened(IoSession session) {
+    	getNextFilter().sessionOpened(session);
     }
 
-    public void filterSetTrafficMask(NextFilter nextFilter, IoSession session,
-            TrafficMask trafficMask) throws Exception {
-        filter.filterSetTrafficMask(nextFilter, session, trafficMask);
+    public void filterSetTrafficMask(IoSession session, TrafficMask trafficMask) {
+    	//getNextFilter().setTrafficMask(session, trafficMask);
     }
 }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/SessionAttributeInitializingFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/SessionAttributeInitializingFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/SessionAttributeInitializingFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/SessionAttributeInitializingFilter.java Mon Nov  3 16:25:08 2008
@@ -40,10 +40,8 @@
  * @org.apache.xbean.XBean
  */
 public class SessionAttributeInitializingFilter extends IoFilterAdapter {
-    // Set the filter's name
-    static {
-    	name = "sessionAttributeInitializing";
-    }
+    // Set the filter's default name
+    private static final String DEFAULT_NAME = "sessionAttributeInitializing";
     
     private final Map<String, Object> attributes = new ConcurrentHashMap<String, Object>();
 
@@ -53,6 +51,18 @@
      * {@link #setAttribute(String, Object)} and {@link #setAttributes(Map)}.
      */
     public SessionAttributeInitializingFilter() {
+    	super(DEFAULT_NAME);
+    }
+
+    /**
+     * Creates a new instance with a new name. You can set
+     * the additional attributes by calling methods such as
+     * {@link #setAttribute(String, Object)} and {@link #setAttributes(Map)}.
+     * 
+     * @param name the filter's name
+     */
+    public SessionAttributeInitializingFilter(String name) {
+    	super(name);
     }
 
     /**
@@ -62,6 +72,7 @@
      */
     public SessionAttributeInitializingFilter(
             Map<String, ? extends Object> attributes) {
+    	super(DEFAULT_NAME);
         setAttributes(attributes);
     }
 
@@ -145,12 +156,11 @@
      * map and forward the event to the next filter.
      */
     @Override
-    public void sessionCreated(NextFilter nextFilter, IoSession session)
-            throws Exception {
+    public void sessionCreated(IoSession session) {
         for (Map.Entry<String, Object> e : attributes.entrySet()) {
             session.setAttribute(e.getKey(), e.getValue());
         }
 
-        nextFilter.sessionCreated(session);
+        getNextFilter().sessionCreated(session);
     }
 }

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/WriteRequestFilter.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/WriteRequestFilter.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/WriteRequestFilter.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/filter/util/WriteRequestFilter.java Mon Nov  3 16:25:08 2008
@@ -35,36 +35,54 @@
  *
  */
 public abstract class WriteRequestFilter extends IoFilterAdapter {
+    // Set the filter's default name
+	private static final String DEFAULT_NAME = "writeRequest";
+	
+	/**
+	 * Create a new instance with a default filter name
+	 */
+	public WriteRequestFilter() {
+		super(DEFAULT_NAME);
+	}
+	
+	/**
+	 * Create a new instance with a given filter name
+	 * 
+	 * @param name the filter's name
+	 */
+	public WriteRequestFilter(String name) {
+		super(name);
+	}
+	
     @Override
-    public void filterWrite(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
-        Object filteredMessage = doFilterWrite(nextFilter, session, writeRequest);
+    public void filterWrite( IoSession session, WriteRequest writeRequest) {
+        Object filteredMessage = doFilterWrite(session, writeRequest);
+        
         if (filteredMessage != null && filteredMessage != writeRequest.getMessage()) {
-            nextFilter.filterWrite(
+        	getNextFilter().filterWrite(
                     session, new FilteredWriteRequest(
                             filteredMessage, writeRequest));
         } else {
-            nextFilter.filterWrite(session, writeRequest);
+        	getNextFilter().filterWrite(session, writeRequest);
         }
     }
 
     @Override
-    public void messageSent(NextFilter nextFilter, IoSession session,
-            WriteRequest writeRequest) throws Exception {
+    public void messageSent(IoSession session, WriteRequest writeRequest) {
         if (writeRequest instanceof FilteredWriteRequest) {
             FilteredWriteRequest req = (FilteredWriteRequest) writeRequest;
             if (req.getParent() == this) {
-                nextFilter.messageSent(session, req.getParentRequest());
+                getNextFilter().messageSent(session, req.getParentRequest());
                 return;
             }
         }
 
-        nextFilter.messageSent(session, writeRequest);
+        getNextFilter().messageSent(session, writeRequest);
     }
 
     protected abstract Object doFilterWrite(
-            NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception;
-
+    		IoSession session, WriteRequest writeRequest);
+ 
     private class FilteredWriteRequest extends WriteRequestWrapper {
         private final Object filteredMessage;
 

Modified: mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java (original)
+++ mina/branches/mina-new-chain/core/src/main/java/org/apache/mina/transport/socket/nio/NioSocketSession.java Mon Nov  3 16:25:08 2008
@@ -23,13 +23,10 @@
 import java.net.SocketException;
 import java.nio.channels.SelectionKey;
 import java.nio.channels.SocketChannel;
-import java.util.ArrayList;
-import java.util.List;
 
 import org.apache.mina.core.RuntimeIoException;
 import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.file.FileRegion;
-import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.service.DefaultTransportMetadata;
 import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.service.IoProcessor;

Modified: mina/branches/mina-new-chain/core/src/test/java/org/apache/mina/core/IoFilterChainTest.java
URL: http://svn.apache.org/viewvc/mina/branches/mina-new-chain/core/src/test/java/org/apache/mina/core/IoFilterChainTest.java?rev=711142&r1=711141&r2=711142&view=diff
==============================================================================
--- mina/branches/mina-new-chain/core/src/test/java/org/apache/mina/core/IoFilterChainTest.java (original)
+++ mina/branches/mina-new-chain/core/src/test/java/org/apache/mina/core/IoFilterChainTest.java Mon Nov  3 16:25:08 2008
@@ -19,11 +19,10 @@
  */
 package org.apache.mina.core;
 
-import org.apache.mina.core.filterchain.DefaultIoFilterChain;
+import java.util.List;
+
 import org.apache.mina.core.filterchain.IoFilter;
 import org.apache.mina.core.filterchain.IoFilterAdapter;
-import org.apache.mina.core.filterchain.IoFilterChain;
-import org.apache.mina.core.filterchain.IoFilterChain.Entry;
 import org.apache.mina.core.service.IoHandler;
 import org.apache.mina.core.service.IoHandlerAdapter;
 import org.apache.mina.core.session.DummySession;
@@ -47,7 +46,7 @@
  */
 public class IoFilterChainTest {
     private DummySession session;
-    private IoFilterChain chain;
+    private List<IoFilter> chain;
     private String result;
 
     private final IoHandler handler = new IoHandlerAdapter() {
@@ -94,7 +93,7 @@
     public void setUp() {
         session = new DummySession();
         session.setHandler(handler);
-        chain = session.getFilterChain();
+        chain = session.getFilterChainIn();
         result = "";
     }
 
@@ -104,32 +103,28 @@
 
     @Test
     public void testAdd() throws Exception {
-        chain.addFirst("A", new EventOrderTestFilter('A'));
-        chain.addLast("B", new EventOrderTestFilter('A'));
-        chain.addFirst("C", new EventOrderTestFilter('A'));
-        chain.addLast("D", new EventOrderTestFilter('A'));
-        chain.addBefore("B", "E", new EventOrderTestFilter('A'));
-        chain.addBefore("C", "F", new EventOrderTestFilter('A'));
-        chain.addAfter("B", "G", new EventOrderTestFilter('A'));
-        chain.addAfter("D", "H", new EventOrderTestFilter('A'));
+        chain.add(new EventOrderTestFilter('A'));
+        chain.add(new EventOrderTestFilter('B'));
+        chain.add(0, new EventOrderTestFilter('C'));
+        chain.add(new EventOrderTestFilter('D'));
 
         String actual = "";
-        for (Entry e : chain.getAll()) {
-            actual += e.getName();
+        for (IoFilter filter : chain) {
+            actual += filter.getName();
         }
 
-        assertEquals("FCAEBGDH", actual);
+        assertEquals("CABD", actual);
     }
 
     @Test
     public void testGet() throws Exception {
-        IoFilter filterA = new NoopFilter();
-        IoFilter filterB = new NoopFilter();
-        IoFilter filterC = new NoopFilter();
-        IoFilter filterD = new NoopFilter();
+        IoFilter filterA = new NoopFilter("A");
+        IoFilter filterB = new NoopFilter("B");
+        IoFilter filterC = new NoopFilter("C");
+        IoFilter filterD = new NoopFilter("D");
 
-        chain.addFirst("A", filterA);
-        chain.addLast("B", filterB);
+        chain.add(filterA);
+        chain.add(filterB);
         chain.addBefore("B", "C", filterC);
         chain.addAfter("A", "D", filterD);