You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by jv...@apache.org on 2011/08/26 13:08:30 UTC
svn commit: r1162062 - in /mina/branches/3.0/core/src:
main/java/org/apache/mina/api/ main/java/org/apache/mina/filterchain/
main/java/org/apache/mina/service/client/
main/java/org/apache/mina/service/server/
main/java/org/apache/mina/session/ main/jav...
Author: jvermillard
Date: Fri Aug 26 11:08:29 2011
New Revision: 1162062
URL: http://svn.apache.org/viewvc?rev=1162062&view=rev
Log:
IoFilterChain is no more an API element, it's an implementation detail
The service receive a List<IoFilter> before it's started, the list of filter is immutable
Added:
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterProcessor.java (contents, props changed)
- copied, changed from r1159886, mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java (contents, props changed)
- copied, changed from r1159767, mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilterChain.java
Removed:
mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilterChain.java
mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java
Modified:
mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoService.java
mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoSession.java
mina/branches/3.0/core/src/main/java/org/apache/mina/service/client/AbstractIoClient.java
mina/branches/3.0/core/src/main/java/org/apache/mina/service/server/AbstractIoServer.java
mina/branches/3.0/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java
mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoService.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoService.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoService.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoService.java Fri Aug 26 11:08:29 2011
@@ -19,6 +19,7 @@
*/
package org.apache.mina.api;
+import java.util.List;
import java.util.Map;
import org.apache.mina.service.IoHandler;
@@ -30,7 +31,7 @@ import org.apache.mina.service.IoHandler
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
public interface IoService {
-
+
/**
* Returns the map of all sessions which are currently managed by this
* service. The key of map is the {@link IoSession#getId() ID} of the
@@ -57,9 +58,22 @@ public interface IoService {
*/
IoHandler getHandler();
+
/**
* Sets the handler which will handle all connections managed by this service. The handler
* can only be set before the service is started.
*/
void setHandler(IoHandler handler);
+
+ /**
+ * Get the list of filters installed on this service
+ * @return
+ */
+ List<IoFilter> getFilters();
+
+ /**
+ * Set the list of filters for this service. Must be called before the service is bound/connected
+ */
+ void setFilters(List<IoFilter> filters);
+
}
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoSession.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoSession.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoSession.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoSession.java Fri Aug 26 11:08:29 2011
@@ -23,6 +23,7 @@ import java.net.SocketAddress;
import java.util.Queue;
import java.util.Set;
+import org.apache.mina.filterchain.IoFilterProcessor;
import org.apache.mina.service.SelectorProcessor;
import org.apache.mina.session.WriteRequest;
@@ -284,7 +285,7 @@ public interface IoSession {
public IoFuture<Void> writeWithFuture(Object message);
/**
- * Internal method for enqueue write request after {@link IoFilterChain} processing
+ * Internal method for enqueue write request after {@link IoFilterProcessor} processing
* @param message
*/
public void enqueueWriteRequest(Object message);
@@ -299,5 +300,5 @@ public interface IoSession {
* Get the filter chain in charge of filtering events generated by this session.
* @return the filter chain for this session
*/
- public IoFilterChain getFilterChain();
+ public IoFilterProcessor getFilterChain();
}
\ No newline at end of file
Copied: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterProcessor.java (from r1159886, mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java)
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterProcessor.java?p2=mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterProcessor.java&p1=mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java&r1=1159886&r2=1162062&rev=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterChain.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterProcessor.java Fri Aug 26 11:08:29 2011
@@ -19,18 +19,18 @@
*/
package org.apache.mina.filterchain;
-import java.util.ArrayList;
import java.util.List;
import org.apache.mina.api.IoFilter;
-import org.apache.mina.api.IoFilterChain;
+import org.apache.mina.api.IoService;
import org.apache.mina.api.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class DefaultIoFilterChain implements IoFilterChain, ReadFilterChainController, WriteFilterChainController {
+public class DefaultIoFilterProcessor implements IoFilterProcessor, ReadFilterChainController,
+ WriteFilterChainController {
- private static final Logger LOG = LoggerFactory.getLogger(DefaultIoFilterChain.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DefaultIoFilterProcessor.class);
/**
* The list of {@link IoFilter} implementing this chain.
@@ -38,25 +38,10 @@ public class DefaultIoFilterChain implem
private final List<IoFilter> chain;
/**
- * The instance of {@link DefaultIoFilterChain} with an empty chain.
+ * The instance of {@link DefaultIoFilterProcessor} with the {@link IoService} chain.
*/
- public DefaultIoFilterChain() {
- this.chain = new ArrayList<IoFilter>();
- }
-
- /**
- * The instance of {@link DefaultIoFilterChain} is initialized with a copy
- * of a filter chain.
- *
- * @param chain the chain to be copied
- */
- public DefaultIoFilterChain(List<IoFilter> chain) {
- this.chain = new ArrayList<IoFilter>(chain);
- }
-
- @Override
- public List<IoFilter> getChain() {
- return chain;
+ public DefaultIoFilterProcessor(List<IoFilter> chain) {
+ this.chain = chain;
}
@Override
Propchange: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/DefaultIoFilterProcessor.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java (from r1159767, mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilterChain.java)
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java?p2=mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java&p1=mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilterChain.java&r1=1159767&r2=1162062&rev=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/api/IoFilterChain.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java Fri Aug 26 11:08:29 2011
@@ -18,54 +18,18 @@
*
*/
-package org.apache.mina.api;
+package org.apache.mina.filterchain;
+
+import org.apache.mina.api.IoSession;
-import java.util.List;
/**
* An implementation that is responsible for performing IO (network, file or
* any other kind of IO)
*
- * The chain will look something like
- *
- * Upstream Chain DownStream
- *
- * IoHandler Filter IoHandler Filter
- * /|\ |
- * | \|/
- * Filter N Filter D
- * /|\ |
- * | \|/
- * Filter C Filter E
- * /|\ |
- * | \|/
- * Filter B Filter F
- * /|\ |
- * | \|/
- * Filter A Acceptor/Socket
- * /|\
- * |
- * Acceptor/Socket
- *
- *
- *
- * TODO
- * 1. How to handle the insertion in between the Filter's. Do we need an API?
- * 2. What to do with the fireEvent* methods?
- *
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
-public interface IoFilterChain {
-
- /**
- * Returns all the filters that are currently present in the chain.
- * Useful to the know the current processing chain. The chain is returned
- * in the order of processing (the first filter in the list shall be the
- * first one to be processed)
- *
- * @return List of all {@link IoFilter} present in the chain
- */
- List<IoFilter> getChain();
+public interface IoFilterProcessor {
/**
* Call this method for processing a session created event using this chain.
Propchange: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: mina/branches/3.0/core/src/main/java/org/apache/mina/filterchain/IoFilterProcessor.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/service/client/AbstractIoClient.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/service/client/AbstractIoClient.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/service/client/AbstractIoClient.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/service/client/AbstractIoClient.java Fri Aug 26 11:08:29 2011
@@ -20,10 +20,12 @@
package org.apache.mina.service.client;
import java.net.SocketAddress;
+import java.util.List;
import java.util.Map;
import org.apache.mina.api.IoClient;
-import org.apache.mina.api.*;
+import org.apache.mina.api.IoFilter;
+import org.apache.mina.api.IoFuture;
import org.apache.mina.api.IoServiceListener;
import org.apache.mina.api.IoSession;
import org.apache.mina.service.AbstractIoService;
@@ -33,7 +35,7 @@ import org.apache.mina.service.AbstractI
*
* @author <a href="http://mina.apache.org">Apache MINA Project</a>
*/
-public class AbstractIoClient extends AbstractIoService implements IoClient {
+public abstract class AbstractIoClient extends AbstractIoService implements IoClient {
/**
* Create an new AbstractIoClient instance
*/
@@ -47,11 +49,11 @@ public class AbstractIoClient extends Ab
}
@Override
- public void addListener( IoServiceListener listener ) {
+ public void addListener(IoServiceListener listener) {
}
@Override
- public void removeListener( IoServiceListener listener ) {
+ public void removeListener(IoServiceListener listener) {
}
@Override
@@ -60,17 +62,28 @@ public class AbstractIoClient extends Ab
}
@Override
- public void setConnectTimeoutMillis( long connectTimeoutInMillis ) {
+ public void setConnectTimeoutMillis(long connectTimeoutInMillis) {
}
@Override
- public IoFuture<IoSession> connect( SocketAddress remoteAddress ) {
+ public IoFuture<IoSession> connect(SocketAddress remoteAddress) {
return null;
}
@Override
- public IoFuture<IoSession> connect( SocketAddress remoteAddress, SocketAddress localAddress ) {
+ public IoFuture<IoSession> connect(SocketAddress remoteAddress, SocketAddress localAddress) {
return null;
}
+ private List<IoFilter> filters;
+
+ @Override
+ public List<IoFilter> getFilters() {
+ return filters;
+ }
+
+ @Override
+ public void setFilters(List<IoFilter> filters) {
+ this.filters = filters;
+ }
}
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/service/server/AbstractIoServer.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/service/server/AbstractIoServer.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/service/server/AbstractIoServer.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/service/server/AbstractIoServer.java Fri Aug 26 11:08:29 2011
@@ -19,6 +19,10 @@
*/
package org.apache.mina.service.server;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.mina.api.IoFilter;
import org.apache.mina.api.IoServer;
import org.apache.mina.service.AbstractIoService;
@@ -34,4 +38,16 @@ public abstract class AbstractIoServer e
protected AbstractIoServer() {
super();
}
+
+ private List<IoFilter> filters;
+
+ @Override
+ public List<IoFilter> getFilters() {
+ return filters;
+ }
+
+ @Override
+ public void setFilters(List<IoFilter> filters) {
+ this.filters = Collections.unmodifiableList(filters);
+ }
}
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/session/AbstractIoSession.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/session/AbstractIoSession.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/session/AbstractIoSession.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/session/AbstractIoSession.java Fri Aug 26 11:08:29 2011
@@ -26,11 +26,11 @@ import java.util.concurrent.ConcurrentHa
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.mina.api.IoFilterChain;
import org.apache.mina.api.IoFuture;
import org.apache.mina.api.IoService;
import org.apache.mina.api.IoSession;
-import org.apache.mina.filterchain.DefaultIoFilterChain;
+import org.apache.mina.filterchain.DefaultIoFilterProcessor;
+import org.apache.mina.filterchain.IoFilterProcessor;
import org.apache.mina.service.SelectorProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -85,8 +85,7 @@ public abstract class AbstractIoSession
/** the queue of pending writes for the session, to be dequeued by the {@link SelectorProcessor} */
private Queue<WriteRequest> writeQueue = new DefaultWriteQueue();
- /** the chain for filtering the events of this session */
- private IoFilterChain filterChain = new DefaultIoFilterChain();
+ private IoFilterProcessor filterProcessor;
/**
* Create an {@link org.apache.mina.api.IoSession} with a unique identifier (
@@ -101,6 +100,7 @@ public abstract class AbstractIoSession
creationTime = System.currentTimeMillis();
this.service = service;
this.writeProcessor = writeProcessor;
+ this.filterProcessor = new DefaultIoFilterProcessor(service.getFilters());
LOG.debug("Created new session with id : {}", id);
synchronized (stateMonitor) {
@@ -257,7 +257,7 @@ public abstract class AbstractIoSession
}
@Override
- public IoFilterChain getFilterChain() {
- return filterChain;
+ public IoFilterProcessor getFilterChain() {
+ return filterProcessor;
}
}
\ No newline at end of file
Modified: mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java (original)
+++ mina/branches/3.0/core/src/main/java/org/apache/mina/transport/tcp/AbstractTcpServer.java Fri Aug 26 11:08:29 2011
@@ -21,8 +21,10 @@ package org.apache.mina.transport.tcp;
import java.io.IOException;
import java.net.SocketAddress;
+import java.util.List;
import java.util.Set;
+import org.apache.mina.api.IoFilter;
import org.apache.mina.service.server.AbstractIoServer;
/**
@@ -37,25 +39,24 @@ public class AbstractTcpServer extends A
protected AbstractTcpServer() {
super();
}
-
+
@Override
public Set<SocketAddress> getLocalAddresses() {
return null;
}
-
@Override
- public void bind( SocketAddress... localAddress ) throws IOException {
+ public void bind(SocketAddress... localAddress) throws IOException {
}
-
@Override
public void unbindAll() throws IOException {
}
-
@Override
- public void unbind( SocketAddress... localAddresses ) throws IOException {
+ public void unbind(SocketAddress... localAddresses) throws IOException {
}
+ private List<IoFilter> filters;
+
}
Modified: mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java
URL: http://svn.apache.org/viewvc/mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java?rev=1162062&r1=1162061&r2=1162062&view=diff
==============================================================================
--- mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java (original)
+++ mina/branches/3.0/core/src/test/java/org/apache/mina/transport/socket/nio/NioAcceptorTest.java Fri Aug 26 11:08:29 2011
@@ -24,9 +24,12 @@ import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
import junit.framework.Assert;
+import org.apache.mina.api.IoFilter;
import org.apache.mina.api.IoService;
import org.apache.mina.api.IoServiceListener;
import org.apache.mina.api.IoSession;
@@ -57,6 +60,11 @@ public class NioAcceptorTest {
NioSelectorProcessor.class));
NioTcpServer acceptor = new NioTcpServer(strategy);
+ // create the fitler chain for this service
+ List<IoFilter> filters = new ArrayList<IoFilter>();
+ filters.add(new LoggingFilter("TestLoggingFilter"));
+ acceptor.setFilters(filters);
+
acceptor.addListener(new IoServiceListener() {
@Override
@@ -68,7 +76,7 @@ public class NioAcceptorTest {
@Override
public void sessionCreated(IoSession session) {
LOG.info("session created {}", session);
- session.getFilterChain().getChain().add(new LoggingFilter("TestLoggingFilter"));
+
ByteBuffer bf = ByteBuffer.allocate("toto".length());
bf.put("toto".getBytes());
bf.flip();