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
+}