You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2005/02/07 09:19:33 UTC

svn commit: r151711 - in incubator/directory/network/mina/trunk: src/examples/org/apache/mina/examples/registry/ src/java/org/apache/mina/common/ src/java/org/apache/mina/io/datagram/ src/java/org/apache/mina/io/socket/ src/java/org/apache/mina/registry/ xdocs/

Author: trustin
Date: Mon Feb  7 00:19:28 2005
New Revision: 151711

URL: http://svn.apache.org/viewcvs?view=rev&rev=151711
Log:
Implemented registry package.

Added:
    incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/
    incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/Main.java   (with props)
    incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/package.html   (with props)
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java   (with props)
Removed:
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleService.java
Modified:
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/common/TransportType.java
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/Service.java
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/ServiceRegistry.java
    incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/package.html
    incubator/directory/network/mina/trunk/xdocs/index.xml

Added: incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/Main.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/Main.java?view=auto&rev=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/Main.java (added)
+++ incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/Main.java Mon Feb  7 00:19:28 2005
@@ -0,0 +1,45 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.examples.registry;
+
+import org.apache.mina.common.TransportType;
+import org.apache.mina.examples.echoserver.EchoProtocolHandler;
+import org.apache.mina.examples.reverser.ReverseProtocolProvider;
+import org.apache.mina.registry.Service;
+import org.apache.mina.registry.ServiceRegistry;
+import org.apache.mina.registry.SimpleServiceRegistry;
+
+/**
+ * This example demonstrates the usage of {@link ServiceRegistry} in 
+ * <code>org.apache.mina.registry</code> package.
+ * 
+ * This application starts up echo and reverse protocol server. 
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$, 
+ */
+public class Main
+{
+    public static void main( String[] args ) throws Exception
+    {
+        ServiceRegistry registry = new SimpleServiceRegistry();
+
+        // Register echo service
+        registry.bind( new Service( "echo", TransportType.SOCKET, 8080 ),
+                new EchoProtocolHandler() );
+        registry.bind( new Service( "echo", TransportType.DATAGRAM, 8080 ),
+                new EchoProtocolHandler() );
+
+        // Register reverse service
+        registry.bind( new Service( "reverse", TransportType.SOCKET, 8081 ),
+                new ReverseProtocolProvider() );
+        registry.bind(
+                new Service( "reverse", TransportType.DATAGRAM, 8081 ),
+                new ReverseProtocolProvider() );
+        registry.bind( new Service( "reverse", TransportType.VM_PIPE, 8081 ),
+                new ReverseProtocolProvider() );
+        
+        System.out.println(registry.getAllServices());
+    }
+}

Propchange: incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/Main.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Added: incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/package.html
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/package.html?view=auto&rev=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/package.html (added)
+++ incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/package.html Mon Feb  7 00:19:28 2005
@@ -0,0 +1,8 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+</head>
+<body>
+Demonstrates the usage of <code>org.apache.mina.registry</code> package.
+</body>
+</html>

Propchange: incubator/directory/network/mina/trunk/src/examples/org/apache/mina/examples/registry/package.html
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Modified: incubator/directory/network/mina/trunk/src/java/org/apache/mina/common/TransportType.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/common/TransportType.java?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/common/TransportType.java (original)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/common/TransportType.java Mon Feb  7 00:19:28 2005
@@ -18,32 +18,37 @@
  */
 package org.apache.mina.common;
 
+import java.io.InvalidObjectException;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+
 /**
  * Represents network transport types.
  * 
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public class TransportType
+public class TransportType implements Serializable
 {
+    private static final long serialVersionUID = 3258132470497883447L;
+
     /**
      * Transport type: TCP/IP (<code>SocketChannel</code>)
      */
     public static final TransportType SOCKET = new TransportType( "SOCKET",
-                                                                  false );
+            false );
 
     /**
      * Transport type: UDP/IP (<code>DatagramChannel</code>)
      */
     public static final TransportType DATAGRAM = new TransportType(
-                                                                    "DATAGRAM",
-                                                                    true );
+            "DATAGRAM", true );
 
     /**
      * Transport type: VM pipe (direct message exchange)
      */
     public static final TransportType VM_PIPE = new TransportType( "VM_PIPE",
-                                                                   false );
+            false );
 
     private final String strVal;
 
@@ -71,4 +76,17 @@
     {
         return strVal;
     }
-}
\ No newline at end of file
+    
+    private Object readResolve() throws ObjectStreamException
+    {
+        if( strVal.equals( SOCKET.toString() ) )
+            return SOCKET;
+        if( strVal.equals( DATAGRAM.toString() ) )
+            return DATAGRAM;
+        if( strVal.equals( VM_PIPE.toString() ) )
+            return VM_PIPE;
+        else
+            throw new InvalidObjectException( "Unknown transport type: "
+                    + this );
+    }
+}

Modified: incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java (original)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/datagram/DatagramAcceptor.java Mon Feb  7 00:19:28 2005
@@ -136,8 +136,7 @@
             ch = ( DatagramChannel ) channels.get( address );
 
             if( ch == null )
-                throw new IllegalArgumentException( "Unknown address: "
-                                                    + address );
+                return;
 
             SelectionKey key = ch.keyFor( selector );
             channels.remove( address );

Modified: incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java (original)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/io/socket/SocketAcceptor.java Mon Feb  7 00:19:28 2005
@@ -146,8 +146,7 @@
             ssc = ( ServerSocketChannel ) channels.get( address );
 
             if( ssc == null )
-                throw new IllegalArgumentException( "Unknown address: "
-                                                    + address );
+                return;
 
             SelectionKey key = ssc.keyFor( selector );
             channels.remove( address );

Modified: incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/Service.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/Service.java?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/Service.java (original)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/Service.java Mon Feb  7 00:19:28 2005
@@ -18,6 +18,8 @@
  */
 package org.apache.mina.registry;
 
+import java.io.Serializable;
+
 import org.apache.mina.common.TransportType;
 
 /**
@@ -26,11 +28,92 @@
  * @author Trustin Lee (trustin@apache.org)
  * @version $Rev$, $Date$
  */
-public interface Service
+public class Service implements Serializable, Cloneable
 {
-    String getName();
+    private static final long serialVersionUID = 3258407344110383155L;
+
+    private final String name;
+
+    private final TransportType transportType;
+
+    private final int port;
+
+    /**
+     * Creates a new instance with the specified protocol name, transport type,
+     * and port number.
+     */
+    public Service( String name, TransportType transportType, int port )
+    {
+        if( name == null )
+            throw new NullPointerException( "name" );
+        if( transportType == null )
+            throw new NullPointerException( "transportType" );
+        if( port < 0 || port > 65535 )
+            throw new IllegalArgumentException( "port: " + port );
+
+        this.name = name;
+        this.transportType = transportType;
+        this.port = port;
+    }
+
+    /**
+     * Returns the name of this service (protocol).
+     */
+    public String getName()
+    {
+        return name;
+    }
+
+    /**
+     * Returns the transport type this service uses.
+     */
+    public TransportType getTransportType()
+    {
+        return transportType;
+    }
+
+    /**
+     * Returns the port number this service is bound on.
+     */
+    public int getPort()
+    {
+        return port;
+    }
+
+    public int hashCode()
+    {
+        return ( ( name.hashCode() * 37 ) ^ transportType.hashCode() * 37 )
+                ^ port;
+    }
+
+    public boolean equals( Object o )
+    {
+        if( o == null )
+            return false;
+        if( this == o )
+            return true;
+        if( !( o instanceof Service ) )
+            return false;
 
-    TransportType getTransportType();
+        Service that = ( Service ) o;
+        return this.name.equals( that.name )
+                && this.transportType == that.transportType
+                && this.port == that.port;
+    }
 
-    int getPort();
-}
\ No newline at end of file
+    public Object clone()
+    {
+        try
+        {
+            return super.clone();
+        }
+        catch( CloneNotSupportedException e )
+        {
+            throw new InternalError();
+        }
+    }
+    
+    public String toString() {
+        return "(" + transportType + ", " + name + ", " + port + ')';
+    }
+}

Modified: incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/ServiceRegistry.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/ServiceRegistry.java?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/ServiceRegistry.java (original)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/ServiceRegistry.java Mon Feb  7 00:19:28 2005
@@ -19,13 +19,13 @@
 package org.apache.mina.registry;
 
 import java.io.IOException;
-import java.util.Iterator;
+import java.util.Set;
 
 import org.apache.mina.common.TransportType;
 import org.apache.mina.io.IoHandler;
 import org.apache.mina.io.IoHandlerFilter;
-import org.apache.mina.protocol.ProtocolHandler;
 import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
 
 /**
  * Interface for the internet service registry. The registry is used by MINA
@@ -37,51 +37,94 @@
  */
 public interface ServiceRegistry
 {
-    void bind( Service service, IoHandler sessionHandler ) throws IOException;
+    /**
+     * Binds the specified I/O handler to the specified service.
+     */
+    void bind( Service service, IoHandler ioHandler ) throws IOException;
 
-    void bind( Service service, ProtocolHandler sessionHandler )
+    /**
+     * Binds the specified protocol provider to the specified service.
+     */
+    void bind( Service service, ProtocolProvider protocolProvider )
             throws IOException;
 
+    /**
+     * Unbinds the specified service (and its aggregated I/O handler or
+     * protocol provider). 
+     */
     void unbind( Service service );
 
+    /**
+     * Adds the specified filter to the acceptors of all transport types
+     * in this registry.
+     */
     void addFilter( int priority, IoHandlerFilter filter );
-
+    
+    /**
+     * Adds the specified filter to the acceptors of all transport types
+     * in this registry.
+     */
     void addFilter( int priority, ProtocolHandlerFilter filter );
+    
+    /**
+     * Adds the specified filter to the acceptor of the specified transport
+     * type with the specified priority.
+     */
+    void addFilter( TransportType transportType, int priority,
+                   IoHandlerFilter filter );
 
-    void addFilter( Service service, int priority, IoHandlerFilter filter );
-
-    void addFilter( Service service, int priority, ProtocolHandlerFilter filter );
+    /**
+     * Adds the specified filter to the acceptor of the specified transport
+     * type with the specified priority.
+     */
+    void addFilter( TransportType transportType, int priority,
+                   ProtocolHandlerFilter filter );
 
+    /**
+     * Removes the specified filter from the acceptors of all transport types
+     * in this registry.
+     */
     void removeFilter( IoHandlerFilter filter );
 
+    /**
+     * Removes the specified filter from the acceptors of all transport types
+     * in this registry.
+     */
     void removeFilter( ProtocolHandlerFilter filter );
 
-    Service getByName( String name, TransportType transportType );
-
-    Service getByPort( int port, TransportType transportType );
-
-    Iterator getAll();
+    /**
+     * Removes the specified filter from the acceptor of the specified
+     * transport type.
+     */
+    void removeFilter( TransportType transportType, IoHandlerFilter filter );
 
-    Iterator getByTransportType( TransportType transportType );
+    /**
+     * Removes the specified filter from the acceptor of the specified
+     * transport type.
+     */
+    void removeFilter( TransportType transportType,
+                      ProtocolHandlerFilter filter );
 
     /**
-     * Gets an iteration over all the entries for a service by the name of the
-     * service.
-     * 
-     * @param name
-     *            the authoritative name of the service
-     * @return an Iterator over InetServiceEntry objects
+     * Returns {@link Set} of all services bound in this registry.
      */
-    Iterator getByName( String name );
+    Set getAllServices();
+    
+    /**
+     * Returns {@link Set} of services bound in this registry with the
+     * specified service(or protocol) name.
+     */
+    Set getServices(String name);
 
     /**
-     * Gets an iteration over all the entries for a service by port number.
-     * This method returns an Iterator over the set of InetServiceEntry objects
-     * since more than one transport protocol can be used on the same port.
-     * 
-     * @param port
-     *            the port one which the service resides
-     * @return an Iterator over InetServiceEntry objects
+     * Returns {@link Set} of services bound in this registry with the
+     * specified transport type.
+     */
+    Set getServices(TransportType transportType);
+    
+    /**
+     * Returns {@link Set} of services bound in this registry with the
+     * specified port number.
      */
-    Iterator getByPort( int port );
-}
\ No newline at end of file
+    Set getServices(int port);
+}

Added: incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java?view=auto&rev=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java (added)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java Mon Feb  7 00:19:28 2005
@@ -0,0 +1,311 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.mina.registry;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.apache.mina.common.TransportType;
+import org.apache.mina.io.IoAcceptor;
+import org.apache.mina.io.IoHandler;
+import org.apache.mina.io.IoHandlerFilter;
+import org.apache.mina.io.datagram.DatagramAcceptor;
+import org.apache.mina.io.filter.IoThreadPoolFilter;
+import org.apache.mina.io.socket.SocketAcceptor;
+import org.apache.mina.protocol.ProtocolAcceptor;
+import org.apache.mina.protocol.ProtocolHandlerFilter;
+import org.apache.mina.protocol.ProtocolProvider;
+import org.apache.mina.protocol.filter.ProtocolThreadPoolFilter;
+import org.apache.mina.protocol.io.IoProtocolAcceptor;
+import org.apache.mina.protocol.vmpipe.VmPipeAcceptor;
+import org.apache.mina.protocol.vmpipe.VmPipeAddress;
+
+/**
+ * A simple implementation of {@link ServiceRegistry}.
+ * 
+ * This service registry supports socket, datagram, VM-pipe transport types,
+ * and thread pools were added by default. 
+ * 
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$, 
+ */
+public class SimpleServiceRegistry implements ServiceRegistry
+{
+    protected final IoAcceptor socketIoAcceptor = new SocketAcceptor();
+
+    protected final IoAcceptor datagramIoAcceptor = new DatagramAcceptor();
+
+    protected final ProtocolAcceptor socketProtocolAcceptor = new IoProtocolAcceptor(
+            socketIoAcceptor );
+
+    protected final ProtocolAcceptor datagramProtocolAcceptor = new IoProtocolAcceptor(
+            datagramIoAcceptor );
+
+    protected final ProtocolAcceptor vmPipeAcceptor = new VmPipeAcceptor();
+
+    protected final IoThreadPoolFilter ioThreadPoolFilter = new IoThreadPoolFilter();
+
+    protected final ProtocolThreadPoolFilter protocolThreadPoolFilter = new ProtocolThreadPoolFilter();
+
+    private final Set services = new HashSet();
+
+    public SimpleServiceRegistry() throws IOException
+    {
+        socketIoAcceptor.addFilter( IoHandlerFilter.MAX_PRIORITY,
+                ioThreadPoolFilter );
+        datagramIoAcceptor.addFilter( IoHandlerFilter.MAX_PRIORITY,
+                ioThreadPoolFilter );
+        socketProtocolAcceptor.addFilter( ProtocolHandlerFilter.MAX_PRIORITY,
+                protocolThreadPoolFilter );
+        datagramProtocolAcceptor.addFilter(
+                ProtocolHandlerFilter.MAX_PRIORITY, protocolThreadPoolFilter );
+        vmPipeAcceptor.addFilter( ProtocolHandlerFilter.MAX_PRIORITY,
+                protocolThreadPoolFilter );
+    }
+
+    public synchronized void bind( Service service, IoHandler ioHandler )
+            throws IOException
+    {
+        IoAcceptor acceptor = findIoAcceptor( service.getTransportType() );
+        acceptor.bind( new InetSocketAddress( service.getPort() ), ioHandler );
+        startThreadPools();
+        services.add( service );
+    }
+
+    public synchronized void bind( Service service,
+                                  ProtocolProvider protocolProvider )
+            throws IOException
+    {
+        ProtocolAcceptor acceptor = findProtocolAcceptor( service
+                .getTransportType() );
+        if( acceptor instanceof VmPipeAcceptor )
+        {
+            acceptor.bind( new VmPipeAddress( service.getPort() ),
+                    protocolProvider );
+        }
+        else
+        {
+            acceptor.bind( new InetSocketAddress( service.getPort() ),
+                    protocolProvider );
+        }
+        startThreadPools();
+        services.add( service );
+    }
+
+    public synchronized void unbind( Service service )
+    {
+        ProtocolAcceptor acceptor = findProtocolAcceptor( service
+                .getTransportType() );
+        acceptor.unbind( new InetSocketAddress( service.getPort() ) );
+        acceptor.unbind( new VmPipeAddress( service.getPort() ) );
+        services.remove( service );
+        stopThreadPools();
+    }
+
+    public synchronized void addFilter( int priority, IoHandlerFilter filter )
+    {
+        boolean s = false;
+        boolean d = false;
+        try
+        {
+            socketIoAcceptor.addFilter( priority, filter );
+            s = true;
+            datagramIoAcceptor.addFilter( priority, filter );
+            d = true;
+        }
+        finally
+        {
+            if( !s || !d )
+            {
+                // rollback
+                if( s )
+                {
+                    socketIoAcceptor.removeFilter( filter );
+                }
+
+                if( d )
+                {
+                    datagramIoAcceptor.removeFilter( filter );
+                }
+            }
+        }
+    }
+
+    public synchronized void addFilter( int priority,
+                                       ProtocolHandlerFilter filter )
+    {
+        boolean s = false;
+        boolean d = false;
+        boolean v = false;
+        try
+        {
+            socketProtocolAcceptor.addFilter( priority, filter );
+            s = true;
+            datagramProtocolAcceptor.addFilter( priority, filter );
+            d = true;
+            vmPipeAcceptor.addFilter( priority, filter );
+            v = true;
+        }
+        finally
+        {
+            if( !s || !d || !v )
+            {
+                // rollback
+                if( s )
+                {
+                    socketProtocolAcceptor.removeFilter( filter );
+                }
+
+                if( d )
+                {
+                    datagramProtocolAcceptor.removeFilter( filter );
+                }
+
+                if( v )
+                {
+                    vmPipeAcceptor.removeFilter( filter );
+                }
+            }
+        }
+    }
+
+    public synchronized void addFilter( TransportType transportType,
+                                       int priority, IoHandlerFilter filter )
+    {
+        IoAcceptor acceptor = findIoAcceptor( transportType );
+        acceptor.addFilter( priority, filter );
+    }
+
+    public synchronized void addFilter( TransportType transportType,
+                                       int priority,
+                                       ProtocolHandlerFilter filter )
+    {
+        ProtocolAcceptor acceptor = findProtocolAcceptor( transportType );
+        acceptor.addFilter( priority, filter );
+    }
+
+    public synchronized void removeFilter( IoHandlerFilter filter )
+    {
+        socketIoAcceptor.removeFilter( filter );
+        datagramIoAcceptor.removeFilter( filter );
+    }
+
+    public synchronized void removeFilter( ProtocolHandlerFilter filter )
+    {
+        socketProtocolAcceptor.removeFilter( filter );
+        datagramProtocolAcceptor.removeFilter( filter );
+        vmPipeAcceptor.removeFilter( filter );
+    }
+
+    public synchronized void removeFilter( TransportType transportType,
+                                          IoHandlerFilter filter )
+    {
+        IoAcceptor acceptor = findIoAcceptor( transportType );
+        acceptor.removeFilter( filter );
+    }
+
+    public synchronized void removeFilter( TransportType transportType,
+                                          ProtocolHandlerFilter filter )
+    {
+        ProtocolAcceptor acceptor = findProtocolAcceptor( transportType );
+        acceptor.removeFilter( filter );
+    }
+
+    public synchronized Set getAllServices()
+    {
+        return new HashSet( services );
+    }
+
+    public synchronized Set getServices( String name )
+    {
+        Set result = new HashSet();
+        Iterator it = services.iterator();
+        while( it.hasNext() )
+        {
+            Service s = ( Service ) it.next();
+            if( name.equals( s.getName() ) )
+            {
+                result.add( s );
+            }
+        }
+        return result;
+    }
+
+    public Set getServices( TransportType transportType )
+    {
+        Set result = new HashSet();
+        Iterator it = services.iterator();
+        while( it.hasNext() )
+        {
+            Service s = ( Service ) it.next();
+            if( s.getTransportType() == transportType )
+            {
+                result.add( s );
+            }
+        }
+        return result;
+    }
+
+    public Set getServices( int port )
+    {
+        Set result = new HashSet();
+        Iterator it = services.iterator();
+        while( it.hasNext() )
+        {
+            Service s = ( Service ) it.next();
+            if( s.getPort() == port )
+            {
+                result.add( s );
+            }
+        }
+        return result;
+    }
+
+    protected IoAcceptor findIoAcceptor( TransportType transportType )
+    {
+        if( transportType == TransportType.SOCKET )
+            return socketIoAcceptor;
+        else if( transportType == TransportType.DATAGRAM )
+            return datagramIoAcceptor;
+        else
+            throw new IllegalArgumentException(
+                    "Unsupported transport type: " + transportType );
+
+    }
+
+    protected ProtocolAcceptor findProtocolAcceptor(
+                                                    TransportType transportType )
+    {
+        if( transportType == TransportType.SOCKET )
+            return socketProtocolAcceptor;
+        else if( transportType == TransportType.DATAGRAM )
+            return datagramProtocolAcceptor;
+        else if( transportType == TransportType.VM_PIPE )
+            return vmPipeAcceptor;
+        else
+            throw new IllegalArgumentException(
+                    "Unsupported transport type: " + transportType );
+    }
+
+    private void startThreadPools()
+    {
+        if( !services.isEmpty() )
+            return;
+
+        ioThreadPoolFilter.start();
+        protocolThreadPoolFilter.start();
+    }
+
+    private void stopThreadPools()
+    {
+        if( !services.isEmpty() )
+            return;
+
+        ioThreadPoolFilter.stop();
+        protocolThreadPoolFilter.stop();
+    }
+}

Propchange: incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/SimpleServiceRegistry.java
------------------------------------------------------------------------------
    svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision

Modified: incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/package.html
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/package.html?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/package.html (original)
+++ incubator/directory/network/mina/trunk/src/java/org/apache/mina/registry/package.html Mon Feb  7 00:19:28 2005
@@ -3,6 +3,6 @@
 <head>
 </head>
 <body>
-This package is not yet implemented.
+A frontend package that makes setting up MINA easier.
 </body>
 </html>

Modified: incubator/directory/network/mina/trunk/xdocs/index.xml
URL: http://svn.apache.org/viewcvs/incubator/directory/network/mina/trunk/xdocs/index.xml?view=diff&r1=151710&r2=151711
==============================================================================
--- incubator/directory/network/mina/trunk/xdocs/index.xml (original)
+++ incubator/directory/network/mina/trunk/xdocs/index.xml Mon Feb  7 00:19:28 2005
@@ -61,6 +61,11 @@
                         <td>Both</td>
                     </tr>
                     <tr>
+                        <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/registry/package-summary.html">Registry</a></td>
+                        <td>A frontend package that makes setting up MINA easier.</td>
+                        <td>Server (registry)</td>
+                    </tr>
+                    <tr>
                         <td><a target="classFrame" href="xref-examples/org/apache/mina/examples/sumup/package-summary.html">SumUp</a></td>
                         <td>Migration from <a target="_blank" href="http://gleamynode.net/dev/projects/netty2-example-sumup/">Netty SumUp example</a>.</td>
                         <td>Both</td>