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();