Author: elecharny
Date: Thu Dec 15 15:04:57 2011
New Revision: 1214802

URL: http://svn.apache.org/viewvc?rev=1214802&view=rev
Log:
o Fixed some error introduced in a previous commit
o Removed the ThreadLocal use for the controller, made the filter chain part of 
the session.

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java?rev=1214802&r1=1214801&r2=1214802&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterController.java
 Thu Dec 15 15:04:57 2011
@@ -37,9 +37,18 @@ import org.slf4j.LoggerFactory;
  */
 public class DefaultIoFilterController implements IoFilterController, 
ReadFilterChainController,
         WriteFilterChainController {
-
+    /** A logger for this class */
     private static final Logger LOG = 
LoggerFactory.getLogger(DefaultIoFilterController.class);
 
+    /** the current position n the write chain for this thread */
+    private int writeChainPosition;
+
+    /** the current position in the read chain for this thread */
+    private int readChainPosition;
+
+    /** hold the last WriteRequest created for the high level message 
currently written (can be null) */
+    private WriteRequest lastWriteRequest;
+
     /**
      * The list of {@link IoFilter} implementing this chain.
      */
@@ -52,6 +61,7 @@ public class DefaultIoFilterController i
         if (chain == null) {
             throw new IllegalArgumentException("chain");
         }
+        
         this.chain = chain;
     }
 
@@ -91,9 +101,6 @@ public class DefaultIoFilterController i
         }
     }
 
-    /** the current position in the read chain for this thread */
-    private static final ThreadLocal<Integer> readChainPosition = new 
ThreadLocal<Integer>();
-
     /**
      * {@inheritDoc}
      */
@@ -104,18 +111,12 @@ public class DefaultIoFilterController i
         if (chain.length < 1) {
             LOG.debug("Nothing to do, the chain is empty");
         } else {
-            readChainPosition.set(0);
+            readChainPosition = 0;
             // we call the first filter, it's supposed to call the next ones 
using the filter chain controller
-            chain[readChainPosition.get()].messageReceived(session, message, 
this);
+            chain[readChainPosition].messageReceived(session, message, this);
         }
     }
 
-    /** the current position n the write chain for this thread */
-    private static final ThreadLocal<Integer> writeChainPosition = new 
ThreadLocal<Integer>();
-
-    /** hold the last WriteRequest created for the high level message 
currently written (can be null) */
-    private static final ThreadLocal<WriteRequest> lastWriteRequest = new 
ThreadLocal<WriteRequest>();
-
     /**
      * {@inheritDoc}
      */
@@ -123,21 +124,22 @@ public class DefaultIoFilterController i
     public void processMessageWriting(IoSession session, Object message, 
IoFuture<Void> future) {
         LOG.debug("processing message '{}' writing event ", message);
 
-        lastWriteRequest.set(null);
+        lastWriteRequest = null;
 
         if (chain.length < 1) {
             enqueueFinalWriteMessage(session, message);
         } else {
-
-            writeChainPosition.set(chain.length - 1);
+            writeChainPosition = chain.length - 1;
             // we call the first filter, it's supposed to call the next ones 
using the filter chain controller
-            int position = writeChainPosition.get();
+            int position = writeChainPosition;
             IoFilter nextFilter = chain[position];
             nextFilter.messageWriting(session, message, this);
         }
+        
         // put the future in the last write request
         if (future != null) {
-            WriteRequest request = lastWriteRequest.get();
+            WriteRequest request = lastWriteRequest;
+            
             
             if (request != null) {
                 ((DefaultWriteRequest) request).setFuture(future);
@@ -150,24 +152,21 @@ public class DefaultIoFilterController i
      */
     @Override
     public void callWriteNextFilter(IoSession session, Object message) {
-        int position = writeChainPosition.get();
-        
         if (LOG.isDebugEnabled()) {
             LOG.debug("calling next filter for writing for message '{}' 
position : {}", message,
-                    position);
+                    writeChainPosition);
         }
         
-        writeChainPosition.set(position - 1);
+        writeChainPosition--;
         
-        if ((position< 0) || (chain.length == 0)) {
+        if (writeChainPosition < 0 || chain.length == 0) {
             // end of chain processing
             enqueueFinalWriteMessage(session, message);
         } else {
-            IoFilter nextFilter = chain[position];
-            nextFilter.messageWriting(session, message, this);
+            chain[writeChainPosition].messageWriting(session, message, this);
         }
         
-        writeChainPosition.set(position + 1);
+        writeChainPosition++;;
     }
 
     /**
@@ -175,7 +174,7 @@ public class DefaultIoFilterController i
      */
     private void enqueueFinalWriteMessage(IoSession session, Object message) {
         LOG.debug("end of write chan we enqueue the message in the session : 
{}", message);
-        lastWriteRequest.set(session.enqueueWriteRequest(message));
+        lastWriteRequest = session.enqueueWriteRequest(message);
     }
 
     /**
@@ -183,17 +182,15 @@ public class DefaultIoFilterController i
      */
     @Override
     public void callReadNextFilter(IoSession session, Object message) {
-        int position = readChainPosition.get();
-        
-        readChainPosition.set(position + 1);
+        readChainPosition++;
         
-        if (position >= chain.length) {
+        if (readChainPosition >= chain.length) {
             // end of chain processing
         } else {
-            chain[position].messageReceived(session, message, this);
+            chain[readChainPosition].messageReceived(session, message, this);
         }
         
-        readChainPosition.set(position - 1);
+        readChainPosition--;
     }
 
     /**
@@ -210,4 +207,4 @@ public class DefaultIoFilterController i
         
         return bldr.append("}").toString();
     }
-}
\ No newline at end of file
+}


Reply via email to