You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/11/28 04:38:16 UTC

svn commit: r106784 - in incubator/directory/eve/trunk: jndi-provider/src/java/org/apache/eve/jndi protocol/src/java/org/apache/eve/protocol protocol/src/test/org/apache/eve/protocol

Author: akarasulu
Date: Sat Nov 27 19:38:15 2004
New Revision: 106784

URL: http://svn.apache.org/viewcvs?view=rev&rev=106784
Log:
Changes ...

 o changed signature of getSingleton on SessionRegistry
 o using constructor directly with singleton cleanup too
 o made changes to handler that called getSingleton
 o added EventRouter handle to constructors 
 o added method that publishes a Disconnect event for the client
 o finished Unbind handler to call this new terminateSession method


Modified:
   incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java
   incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java

Modified: incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java&r1=106783&p2=incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java	(original)
+++ incubator/directory/eve/trunk/jndi-provider/src/java/org/apache/eve/jndi/EveContextFactory.java	Sat Nov 27 19:38:15 2004
@@ -491,8 +491,6 @@
 
     private void startUpWireProtocol() throws NamingException
     {
-        proto = new LdapProtocolProvider( ( Hashtable) initialEnv.clone() );
-
         try
         {
             fe = ( DefaultFrontend ) new DefaultFrontendFactory().create();
@@ -505,6 +503,8 @@
             ne.setResolvedName( new LdapName( ( String ) initialEnv.get( Context.PROVIDER_URL ) ) );
             throw ne;
         }
+
+        proto = new LdapProtocolProvider( ( Hashtable) initialEnv.clone(), fe.getEventRouter() );
 
         int port = PropertiesUtils.get( initialEnv, EVE_LDAP_PORT, LDAP_PORT );
         srvEntry = new InetServiceEntry( proto.getName(), port, proto, TransportTypeEnum.TCP );

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/AddHandler.java	Sat Nov 27 19:38:15 2004
@@ -41,7 +41,7 @@
         AddRequest req = ( AddRequest ) request;
         AddResponse resp = new AddResponseImpl( req.getMessageId() );
         resp.setLdapResult( new LdapResultImpl( resp ) );
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
 
         try
         {

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/BindHandler.java	Sat Nov 27 19:38:15 2004
@@ -55,7 +55,7 @@
 
         String dn = req.getName();
         byte[] creds = req.getCredentials();
-        Hashtable env = SessionRegistry.getSingleton( null ).getEnvironment();
+        Hashtable env = SessionRegistry.getSingleton().getEnvironment();
         InitialContext ictx;
 
         try
@@ -72,7 +72,7 @@
             return resp;
         }
 
-        SessionRegistry.getSingleton( null ).put( key, ictx );
+        SessionRegistry.getSingleton().put( key, ictx );
         resp.setLdapResult( new LdapResultImpl( resp ) );
         resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
         resp.getLdapResult().setMatchedDn( req.getName() );

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/CompareHandler.java	Sat Nov 27 19:38:15 2004
@@ -45,7 +45,7 @@
         CompareRequest req = ( CompareRequest ) request;
         CompareResponse resp = new CompareResponseImpl( req.getMessageId() );
         resp.setLdapResult( new LdapResultImpl( resp ) );
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
 
         try
         {

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/DeleteHandler.java	Sat Nov 27 19:38:15 2004
@@ -45,7 +45,7 @@
         DeleteRequest req = ( DeleteRequest ) request;
         DeleteResponse resp = new DeleteResponseImpl( req.getMessageId() );
         resp.setLdapResult( new LdapResultImpl( resp ) );
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
 
         try
         {

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java	Sat Nov 27 19:38:15 2004
@@ -24,6 +24,7 @@
 import org.apache.seda.protocol.ProtocolProvider;
 import org.apache.seda.protocol.RequestHandler;
 import org.apache.seda.listener.ClientKey;
+import org.apache.seda.event.EventRouter;
 
 import org.apache.ldap.common.message.*;
 import org.apache.ldap.common.message.spi.Provider;
@@ -96,6 +97,8 @@
         DEFAULT_HANDLERS = Collections.unmodifiableMap( map );
     }
 
+    /** a handle on the SEDA event router */
+    public final EventRouter router;
     /** the underlying provider decoder factory */
     public final DecoderFactory decoderFactory;
     /** the underlying provider encoder factory */
@@ -115,13 +118,16 @@
      * @param env environment properties used to configure the provider and
      * underlying codec providers if any
      */
-    public LdapProtocolProvider( Hashtable env ) throws LdapNamingException
+    public LdapProtocolProvider( Hashtable env, EventRouter router )
+            throws LdapNamingException
     {
+        this.router = router;
         Hashtable copy = ( Hashtable ) env.clone();
         this.handlers = new HashMap();
 
         copy.put( Context.PROVIDER_URL, "" );
-        SessionRegistry.getSingleton( copy );
+        SessionRegistry.releaseSingleton();
+        new SessionRegistry( copy, router );
 
         Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();
         while ( requestTypes.hasNext() )
@@ -176,10 +182,12 @@
     /**
      * Creates a SEDA LDAP protocol provider.
      */
-    public LdapProtocolProvider() throws LdapNamingException
+    public LdapProtocolProvider( EventRouter router ) throws LdapNamingException
     {
+        this.router = router;
         this.handlers = new HashMap();
-        SessionRegistry.getSingleton( null );
+        SessionRegistry.releaseSingleton();
+        new SessionRegistry( null, router );
 
         Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();
         while ( requestTypes.hasNext() )

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyDnHandler.java	Sat Nov 27 19:38:15 2004
@@ -45,7 +45,7 @@
         ModifyDnRequest req = ( ModifyDnRequest ) request;
         ModifyDnResponse resp = new ModifyDnResponseImpl( req.getMessageId() );
         resp.setLdapResult( new LdapResultImpl( resp ) );
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
 
         try
         {

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/ModifyHandler.java	Sat Nov 27 19:38:15 2004
@@ -47,7 +47,7 @@
         ModifyRequest req = ( ModifyRequest ) request;
         ModifyResponse resp = new ModifyResponseImpl( req.getMessageId() );
         resp.setLdapResult( new LdapResultImpl( resp ) );
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
 
         try
         {

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java	Sat Nov 27 19:38:15 2004
@@ -58,7 +58,7 @@
     {
         LdapContext ctx;
         SearchRequest req = ( SearchRequest ) request;
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
         NamingEnumeration list = null;
 
         // check the attributes to see if a referral's ref attribute is included

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java	Sat Nov 27 19:38:15 2004
@@ -22,6 +22,8 @@
 import javax.naming.Context;
 
 import org.apache.seda.listener.ClientKey;
+import org.apache.seda.event.EventRouter;
+import org.apache.seda.event.DisconnectEvent;
 
 
 /**
@@ -33,6 +35,8 @@
 public class SessionRegistry
 {
     private static SessionRegistry s_singleton;
+    /** a handle on the event router */
+    private final EventRouter router;
     /** the set of client contexts */
     private final Map contexts = new HashMap();
     /** the observer to listen for key expiration */
@@ -45,27 +49,39 @@
      * Gets the singleton instance for this SessionRegistry.  If the singleton
      * does not exist one is created.
      *
-     * @param env the properties associated with the SessionRegistry if created
      * @return the singleton SessionRegistry instance
      */
-    public static SessionRegistry getSingleton( Hashtable env )
+    public static SessionRegistry getSingleton()
     {
-        if ( s_singleton == null )
-        {
-            s_singleton = new SessionRegistry( env );
-        }
-
         return s_singleton;
     }
 
 
+    static void releaseSingleton()
+    {
+        s_singleton = null;
+    }
+
+
     /**
      * Creates a singleton session state object for the system.
      *
      * @param env the properties associated with this SessionRegistry
      */
-    private SessionRegistry( Hashtable env )
+    SessionRegistry( Hashtable env, EventRouter router )
     {
+        this.router = router;
+
+        if ( s_singleton == null )
+        {
+            s_singleton = this;
+        }
+        else
+        {
+            throw new IllegalStateException( "there can only be one singlton" );
+        }
+
+
         if ( env == null )
         {
             this.env = new Hashtable();
@@ -162,5 +178,17 @@
                 contexts.remove( key );
             }
         }
+    }
+
+
+    /**
+     * Terminates the session by publishing a disconnect event.
+     *
+     * @param key the client key of the client to disconnect
+     */
+    public void terminateSession( ClientKey key )
+    {
+        DisconnectEvent event = new DisconnectEvent( this, key );
+        router.publish( event );
     }
 }

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/UnbindHandler.java	Sat Nov 27 19:38:15 2004
@@ -35,12 +35,14 @@
 {
     public void handle( ClientKey key, Object request )
     {
-        InitialContext ictx = SessionRegistry.getSingleton( null ).get( key );
-        SessionRegistry.getSingleton( null ).remove( key );
+        InitialContext ictx = SessionRegistry.getSingleton().get( key );
+        SessionRegistry registry = SessionRegistry.getSingleton();
 
         try
         {
             ictx.close();
+            registry.terminateSession( key );
+            registry.remove( key );
         }
         catch ( NamingException e )
         {

Modified: incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java?view=diff&rev=106784&p1=incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java&r1=106783&p2=incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java&r2=106784
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/test/org/apache/eve/protocol/LdapProtocolProviderTest.java	Sat Nov 27 19:38:15 2004
@@ -37,6 +37,8 @@
  */
 public class LdapProtocolProviderTest extends TestCase
 {
+
+
     /**
      * Tests to make sure all the default handlers are kicking in properly with
      * the right request type.
@@ -46,7 +48,7 @@
      */
     public void testDefaultOperation() throws LdapNamingException
     {
-        LdapProtocolProvider provider = new LdapProtocolProvider();
+        LdapProtocolProvider provider = new LdapProtocolProvider( null );
         assertNotNull( provider.getDecoderFactory() );
         assertNotNull( provider.getEncoderFactory() );
         assertTrue( provider.getName() == LdapProtocolProvider.SERVICE_NAME );
@@ -126,7 +128,7 @@
         props.setProperty( UnbindRequest.class.getName(), BogusUnbindHandler.class.getName() );
         props.setProperty( UnbindRequestImpl.class.getName(), BogusUnbindHandler.class.getName() );
 
-        LdapProtocolProvider provider = new LdapProtocolProvider( props );
+        LdapProtocolProvider provider = new LdapProtocolProvider( props, null );
         assertNotNull( provider.getDecoderFactory() );
         assertNotNull( provider.getEncoderFactory() );
         assertTrue( provider.getName() == LdapProtocolProvider.SERVICE_NAME );