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/06 10:14:33 UTC
svn commit: r151560 - in
incubator/directory/apacheds/branches/mina-port/protocol: ./
src/main/java/org/apache/ldap/server/protocol/
src/test/org/apache/ldap/server/protocol/
Author: trustin
Date: Sun Feb 6 01:14:30 2005
New Revision: 151560
URL: http://svn.apache.org/viewcvs?view=rev&rev=151560
Log:
Ported APSEDA ProtocolProvider to MINA ProtocolProvider.
Added:
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CommandHandler.java (with props)
Modified:
incubator/directory/apacheds/branches/mina-port/protocol/project.xml
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AbandonHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AddHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/BindHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CompareHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/DeleteHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ExtendedHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/LdapProtocolProvider.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyDnHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SearchHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SessionRegistry.java
incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/UnbindHandler.java
incubator/directory/apacheds/branches/mina-port/protocol/src/test/org/apache/ldap/server/protocol/LdapProtocolProviderTest.java
Modified: incubator/directory/apacheds/branches/mina-port/protocol/project.xml
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/project.xml?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/project.xml (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/project.xml Sun Feb 6 01:14:30 2005
@@ -51,9 +51,9 @@
</dependency>
<dependency>
<groupId>incubator-directory</groupId>
- <artifactId>apseda</artifactId>
- <version>0.3-SNAPSHOT</version>
- <url>http://incubator.apache.org/directory/subprojects/seda</url>
+ <artifactId>mina</artifactId>
+ <version>0.7-SNAPSHOT</version>
+ <url>http://incubator.apache.org/directory/subprojects/mina</url>
</dependency>
</dependencies>
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AbandonHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AbandonHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AbandonHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AbandonHandler.java Sun Feb 6 01:14:30 2005
@@ -17,10 +17,9 @@
package org.apache.ldap.server.protocol;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractNoReplyHandler;
import org.apache.ldap.common.NotImplementedException;
import org.apache.ldap.common.message.AbandonRequest;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -29,9 +28,9 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class AbandonHandler extends AbstractNoReplyHandler
+public class AbandonHandler implements CommandHandler
{
- public void handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
AbandonRequest req = ( AbandonRequest ) request;
int abandonedId = req.getAbandoned();
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AddHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AddHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AddHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/AddHandler.java Sun Feb 6 01:14:30 2005
@@ -16,13 +16,10 @@
*/
package org.apache.ldap.server.protocol;
-
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.AddRequest;
import org.apache.ldap.common.message.AddResponse;
@@ -30,7 +27,7 @@
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.util.ExceptionUtils;
-
+import org.apache.mina.protocol.ProtocolSession;
/**
* A single reply handler for {@link org.apache.ldap.common.message.AddRequest}s.
@@ -38,9 +35,9 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class AddHandler extends AbstractSingleReplyHandler
+public class AddHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
AddRequest req = ( AddRequest ) request;
AddResponse resp = new AddResponseImpl( req.getMessageId() );
@@ -49,19 +46,19 @@
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, true );
+ .getInitialLdapContext( session, null, true );
LdapContext ctx = ( LdapContext ) ictx.lookup( "" );
ctx.createSubcontext( req.getName(), req.getEntry() );
}
- catch ( NamingException e )
+ catch( NamingException e )
{
String msg = "failed to add entry " + req.getName() + ":\n";
msg += ExceptionUtils.getStackTrace( e );
ResultCodeEnum code;
- if ( e instanceof LdapException )
+ if( e instanceof LdapException )
{
- code = ( ( LdapException ) e ).getResultCode() ;
+ code = ( ( LdapException ) e ).getResultCode();
}
else
{
@@ -71,16 +68,18 @@
resp.getLdapResult().setResultCode( code );
resp.getLdapResult().setErrorMessage( msg );
- if ( e.getResolvedName() != null )
+ if( e.getResolvedName() != null )
{
- resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
+ resp.getLdapResult().setMatchedDn(
+ e.getResolvedName().toString() );
}
- return resp;
+ session.write( resp );
+ return;
}
resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
resp.getLdapResult().setMatchedDn( req.getName() );
- return resp;
+ session.write( resp );
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/BindHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/BindHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/BindHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/BindHandler.java Sun Feb 6 01:14:30 2005
@@ -23,8 +23,6 @@
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.BindRequest;
import org.apache.ldap.common.message.BindResponse;
@@ -34,6 +32,7 @@
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.util.ExceptionUtils;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -42,15 +41,12 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class BindHandler extends AbstractSingleReplyHandler
+public class BindHandler implements CommandHandler
{
private static final Control[] EMPTY = new Control[0];
- /**
- * @see org.apache.apseda.protocol.SingleReplyHandler#handle(ClientKey,Object)
- */
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
InitialLdapContext ictx;
BindRequest req = ( BindRequest ) request;
@@ -64,7 +60,8 @@
{
result.setResultCode( ResultCodeEnum.AUTHMETHODNOTSUPPORTED );
result.setErrorMessage( "Only simple binds currently supported" );
- return resp;
+ session.write( resp );
+ return;
}
// clone the environment first then add the required security settings
@@ -96,12 +93,13 @@
String msg = "Bind failure:\n" + ExceptionUtils.getStackTrace( e );
msg += "\n\nBindRequest = \n" + req.toString();
result.setErrorMessage( msg );
- return resp;
+ session.write( resp );
+ return;
}
- SessionRegistry.getSingleton().setInitialLdapContext( key, ictx );
+ SessionRegistry.getSingleton().setInitialLdapContext( session, ictx );
result.setResultCode( ResultCodeEnum.SUCCESS );
result.setMatchedDn( req.getName() );
- return resp;
+ session.write( resp );
}
}
Added: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CommandHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CommandHandler.java?view=auto&rev=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CommandHandler.java (added)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CommandHandler.java Sun Feb 6 01:14:30 2005
@@ -0,0 +1,17 @@
+/*
+ * @(#) $Id$
+ */
+package org.apache.ldap.server.protocol;
+
+import org.apache.mina.protocol.ProtocolSession;
+
+/**
+ * TODO Document me.
+ *
+ * @author Trustin Lee (trustin@apache.org)
+ * @version $Rev$, $Date$,
+ */
+public interface CommandHandler
+{
+ void handle( ProtocolSession session, Object request );
+}
Propchange: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CommandHandler.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CompareHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CompareHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CompareHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/CompareHandler.java Sun Feb 6 01:14:30 2005
@@ -22,8 +22,6 @@
import javax.naming.directory.DirContext;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.CompareRequest;
import org.apache.ldap.common.message.CompareResponse;
@@ -31,6 +29,7 @@
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.util.ExceptionUtils;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -39,12 +38,9 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class CompareHandler extends AbstractSingleReplyHandler
+public class CompareHandler implements CommandHandler
{
- /**
- * @see org.apache.apseda.protocol.SingleReplyHandler#handle(org.apache.apseda.listener.ClientKey,Object)
- */
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
CompareRequest req = ( CompareRequest ) request;
CompareResponse resp = new CompareResponseImpl( req.getMessageId() );
@@ -53,7 +49,7 @@
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, true );
+ .getInitialLdapContext( session, null, true );
DirContext ctx = ( DirContext ) ictx.lookup( "" );
Attribute attr = ctx.getAttributes( req.getName() ).get( req.getAttributeId() );
@@ -93,10 +89,11 @@
resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
}
- return resp;
+ session.write( resp );
+ return;
}
resp.getLdapResult().setMatchedDn( req.getName() );
- return resp;
+ session.write( resp );
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/DeleteHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/DeleteHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/DeleteHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/DeleteHandler.java Sun Feb 6 01:14:30 2005
@@ -16,13 +16,10 @@
*/
package org.apache.ldap.server.protocol;
-
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.DeleteRequest;
import org.apache.ldap.common.message.DeleteResponse;
@@ -30,7 +27,7 @@
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.util.ExceptionUtils;
-
+import org.apache.mina.protocol.ProtocolSession;
/**
* A single reply handler for {@link org.apache.ldap.common.message.DeleteRequest}s.
@@ -38,12 +35,9 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class DeleteHandler extends AbstractSingleReplyHandler
+public class DeleteHandler implements CommandHandler
{
- /**
- * @see org.apache.apseda.protocol.SingleReplyHandler#handle(ClientKey,Object)
- */
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
DeleteRequest req = ( DeleteRequest ) request;
DeleteResponse resp = new DeleteResponseImpl( req.getMessageId() );
@@ -52,19 +46,19 @@
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, true );
+ .getInitialLdapContext( session, null, true );
DirContext ctx = ( DirContext ) ictx.lookup( "" );
ctx.destroySubcontext( req.getName() );
}
- catch ( NamingException e )
+ catch( NamingException e )
{
String msg = "failed to add entry " + req.getName() + ":\n";
msg += ExceptionUtils.getStackTrace( e );
ResultCodeEnum code;
- if ( e instanceof LdapException )
+ if( e instanceof LdapException )
{
- code = ( ( LdapException ) e ).getResultCode() ;
+ code = ( ( LdapException ) e ).getResultCode();
}
else
{
@@ -74,16 +68,18 @@
resp.getLdapResult().setResultCode( code );
resp.getLdapResult().setErrorMessage( msg );
- if ( e.getResolvedName() != null )
+ if( e.getResolvedName() != null )
{
- resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
+ resp.getLdapResult().setMatchedDn(
+ e.getResolvedName().toString() );
}
- return resp;
+ session.write( resp );
+ return;
}
resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
resp.getLdapResult().setMatchedDn( req.getName() );
- return resp;
+ session.write( resp );
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ExtendedHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ExtendedHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ExtendedHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ExtendedHandler.java Sun Feb 6 01:14:30 2005
@@ -17,9 +17,8 @@
package org.apache.ldap.server.protocol;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.NotImplementedException;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -28,12 +27,9 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class ExtendedHandler extends AbstractSingleReplyHandler
+public class ExtendedHandler implements CommandHandler
{
- /**
- * @see org.apache.apseda.protocol.SingleReplyHandler#handle(ClientKey,Object)
- */
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handle in org.apache.ldap.server.protocol.ExtendedHandler not implemented!" );
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/LdapProtocolProvider.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/LdapProtocolProvider.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/LdapProtocolProvider.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/LdapProtocolProvider.java Sun Feb 6 01:14:30 2005
@@ -16,7 +16,6 @@
*/
package org.apache.ldap.server.protocol;
-
import java.util.Collections;
import java.util.HashMap;
import java.util.Hashtable;
@@ -25,14 +24,6 @@
import javax.naming.Context;
-import org.apache.apseda.event.EventRouter;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.ProtocolProvider;
-import org.apache.apseda.protocol.RequestHandler;
-import org.apache.asn1.codec.stateful.DecoderFactory;
-import org.apache.asn1.codec.stateful.EncoderFactory;
-import org.apache.asn1.codec.stateful.StatefulDecoder;
-import org.apache.asn1.codec.stateful.StatefulEncoder;
import org.apache.ldap.common.exception.LdapNamingException;
import org.apache.ldap.common.message.AbandonRequest;
import org.apache.ldap.common.message.AbandonRequestImpl;
@@ -58,7 +49,15 @@
import org.apache.ldap.common.message.UnbindRequest;
import org.apache.ldap.common.message.UnbindRequestImpl;
import org.apache.ldap.common.message.spi.Provider;
-
+import org.apache.mina.protocol.ProtocolCodecFactory;
+import org.apache.mina.protocol.ProtocolDecoder;
+import org.apache.mina.protocol.ProtocolEncoder;
+import org.apache.mina.protocol.ProtocolHandler;
+import org.apache.mina.protocol.ProtocolHandlerAdapter;
+import org.apache.mina.protocol.ProtocolProvider;
+import org.apache.mina.protocol.ProtocolSession;
+import org.apache.mina.protocol.codec.Asn1CodecDecoder;
+import org.apache.mina.protocol.codec.Asn1CodecEncoder;
/**
* An LDAP protocol provider implementation which dynamically associates
@@ -71,6 +70,7 @@
{
/** the constant service name of this ldap protocol provider **/
public static final String SERVICE_NAME = "ldap";
+
/** a map of the default request object class name to the handler class name */
public static final Map DEFAULT_HANDLERS;
@@ -121,52 +121,48 @@
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 */
- public final EncoderFactory encoderFactory;
- /** the handlers to use while processing requests */
- public final Map handlers;
+ /** the underlying provider codec factory */
+ private final ProtocolCodecFactory codecFactory;
+
+ /** the MINA protocol handler */
+ private final LdapProtocolHandler handler = new LdapProtocolHandler();
+ /** the handlers to use while processing requests */
+ private final Map commandHandlers;
// ------------------------------------------------------------------------
// C O N S T R U C T O R S
// ------------------------------------------------------------------------
-
/**
* Creates a SEDA LDAP protocol provider.
*
* @param env environment properties used to configure the provider and
* underlying codec providers if any
*/
- public LdapProtocolProvider( Hashtable env, EventRouter router )
- throws LdapNamingException
+ public LdapProtocolProvider( Hashtable env ) throws LdapNamingException
{
- this.router = router;
Hashtable copy = ( Hashtable ) env.clone();
- this.handlers = new HashMap();
+ this.commandHandlers = new HashMap();
copy.put( Context.PROVIDER_URL, "" );
SessionRegistry.releaseSingleton();
- new SessionRegistry( copy, router );
+ new SessionRegistry( copy );
Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();
- while ( requestTypes.hasNext() )
+ while( requestTypes.hasNext() )
{
- RequestHandler handler = null;
+ CommandHandler handler = null;
String type = ( String ) requestTypes.next();
Class clazz = null;
- if ( copy.containsKey( type ) )
+ if( copy.containsKey( type ) )
{
try
{
clazz = Class.forName( ( String ) copy.get( type ) );
}
- catch ( ClassNotFoundException e )
+ catch( ClassNotFoundException e )
{
LdapNamingException lne;
String msg = "failed to load class " + clazz;
@@ -183,9 +179,9 @@
try
{
- handler = ( RequestHandler ) clazz.newInstance();
+ handler = ( CommandHandler ) clazz.newInstance();
}
- catch ( Exception e )
+ catch( Exception e )
{
LdapNamingException lne;
String msg = "failed to create handler instance of " + clazz;
@@ -195,28 +191,25 @@
throw lne;
}
- this.handlers.put( type, handler );
+ this.commandHandlers.put( type, handler );
}
- this.decoderFactory = new DecoderFactoryImpl( copy );
- this.encoderFactory = new EncoderFactoryImpl( copy );
+ this.codecFactory = new ProtocolCodecFactoryImpl( copy );
}
-
/**
* Creates a SEDA LDAP protocol provider.
*/
- public LdapProtocolProvider( EventRouter router ) throws LdapNamingException
+ public LdapProtocolProvider() throws LdapNamingException
{
- this.router = router;
- this.handlers = new HashMap();
+ this.commandHandlers = new HashMap();
SessionRegistry.releaseSingleton();
- new SessionRegistry( null, router );
+ new SessionRegistry( null );
Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();
- while ( requestTypes.hasNext() )
+ while( requestTypes.hasNext() )
{
- RequestHandler handler = null;
+ CommandHandler handler = null;
String type = ( String ) requestTypes.next();
Class clazz = null;
@@ -224,9 +217,9 @@
try
{
- handler = ( RequestHandler ) clazz.newInstance();
+ handler = ( CommandHandler ) clazz.newInstance();
}
- catch ( Exception e )
+ catch( Exception e )
{
LdapNamingException lne;
String msg = "failed to create handler instance of " + clazz;
@@ -236,63 +229,46 @@
throw lne;
}
- this.handlers.put( type, handler );
+ this.commandHandlers.put( type, handler );
}
- this.decoderFactory = new DecoderFactoryImpl();
- this.encoderFactory = new EncoderFactoryImpl();
+ this.codecFactory = new ProtocolCodecFactoryImpl();
}
-
// ------------------------------------------------------------------------
// ProtocolProvider Methods
// ------------------------------------------------------------------------
-
- /**
- * @see ProtocolProvider#getName()
- * @return ldap every time
- */
public String getName()
{
return SERVICE_NAME;
}
-
- /**
- * @see ProtocolProvider#getDecoderFactory()
- */
- public DecoderFactory getDecoderFactory()
+ public ProtocolCodecFactory getCodecFactory()
{
- return this.decoderFactory;
+ return codecFactory;
}
-
- /**
- * @see ProtocolProvider#getEncoderFactory()
- */
- public EncoderFactory getEncoderFactory()
+ public ProtocolHandler getHandler()
{
- return this.encoderFactory;
+ return handler;
}
-
- /**
- * @see ProtocolProvider#getHandler(ClientKey, Object)
- */
- public RequestHandler getHandler( ClientKey key, Object request )
+ public CommandHandler getCommandHandler( Object request )
{
- if ( this.handlers.containsKey( request.getClass().getName() ) )
+ if( this.commandHandlers.containsKey( request.getClass().getName() ) )
{
- return ( RequestHandler ) this.handlers.get( request.getClass().getName() );
+ return ( CommandHandler ) this.commandHandlers.get( request
+ .getClass().getName() );
}
Class[] interfaces = request.getClass().getInterfaces();
- for ( int ii = 0; ii < interfaces.length; ii++ )
+ for( int ii = 0; ii < interfaces.length; ii ++ )
{
- if ( this.handlers.containsKey( interfaces[ii].getName() ) )
+ if( this.commandHandlers.containsKey( interfaces[ ii ].getName() ) )
{
- return ( RequestHandler ) this.handlers.get( interfaces[ii].getName() );
+ return ( CommandHandler ) this.commandHandlers
+ .get( interfaces[ ii ].getName() );
}
}
@@ -300,71 +276,66 @@
throw new IllegalArgumentException( msg );
}
-
/**
* A snickers based BER Decoder factory.
*/
- private static final class DecoderFactoryImpl implements DecoderFactory
+ private static final class ProtocolCodecFactoryImpl implements
+ ProtocolCodecFactory
{
final Hashtable env;
-
- public DecoderFactoryImpl()
+ public ProtocolCodecFactoryImpl()
{
this.env = null;
}
-
- DecoderFactoryImpl( Hashtable env )
+ ProtocolCodecFactoryImpl( Hashtable env )
{
this.env = env;
}
+ public ProtocolEncoder newEncoder()
+ {
+ if( env == null || env.get( Provider.BERLIB_PROVIDER ) == null )
+ {
+ return new Asn1CodecEncoder( new MessageEncoder() );
+ }
+ else
+ {
+ return new Asn1CodecEncoder( new MessageEncoder( env ) );
+ }
+ }
- public StatefulDecoder createDecoder()
+ public ProtocolDecoder newDecoder()
{
- if ( env == null || env.get( Provider.BERLIB_PROVIDER ) == null )
+ if( env == null || env.get( Provider.BERLIB_PROVIDER ) == null )
{
- return new MessageDecoder();
+ return new Asn1CodecDecoder( new MessageDecoder() );
}
else
{
- return new MessageDecoder( env );
+ return new Asn1CodecDecoder( new MessageDecoder( env ) );
}
}
}
-
- /**
- * A snickers based BER Encoder factory.
- */
- private static final class EncoderFactoryImpl implements EncoderFactory
+ private class LdapProtocolHandler extends ProtocolHandlerAdapter
{
- final Hashtable env;
-
- public EncoderFactoryImpl()
+ public void messageReceived( ProtocolSession session, Object request )
{
- this.env = null;
+ CommandHandler handler = getCommandHandler( request );
+ handler.handle( session, request );
}
-
- public EncoderFactoryImpl( Hashtable env )
+ public void sessionClosed( ProtocolSession session )
{
- this.env = env;
+ SessionRegistry.getSingleton().remove( session );
}
-
- public StatefulEncoder createEncoder()
+ public void exceptionCaught( ProtocolSession session, Throwable cause )
{
- if ( env == null || env.get( Provider.BERLIB_PROVIDER ) == null )
- {
- return new MessageEncoder();
- }
- else
- {
- return new MessageEncoder( env );
- }
+ cause.printStackTrace();
}
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyDnHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyDnHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyDnHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyDnHandler.java Sun Feb 6 01:14:30 2005
@@ -21,8 +21,6 @@
import javax.naming.directory.DirContext;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ModifyDnRequest;
@@ -31,6 +29,7 @@
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.name.LdapName;
import org.apache.ldap.common.util.ExceptionUtils;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -39,12 +38,9 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class ModifyDnHandler extends AbstractSingleReplyHandler
+public class ModifyDnHandler implements CommandHandler
{
- /**
- * @see org.apache.apseda.protocol.SingleReplyHandler#handle(ClientKey,Object)
- */
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
ModifyDnRequest req = ( ModifyDnRequest ) request;
ModifyDnResponse resp = new ModifyDnResponseImpl( req.getMessageId() );
@@ -53,7 +49,7 @@
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, true );
+ .getInitialLdapContext( session, null, true );
DirContext ctx = ( DirContext ) ictx.lookup( "" );
String deleteRDN = String.valueOf( req.getDeleteOldRdn() );
ctx.addToEnvironment( "java.naming.ldap.deleteRDN", deleteRDN );
@@ -105,11 +101,12 @@
resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
}
- return resp;
+ session.write( resp );
+ return;
}
resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
resp.getLdapResult().setMatchedDn( req.getName() );
- return resp;
+ session.write( resp );
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/ModifyHandler.java Sun Feb 6 01:14:30 2005
@@ -22,8 +22,6 @@
import javax.naming.directory.ModificationItem;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractSingleReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ModifyRequest;
@@ -31,6 +29,7 @@
import org.apache.ldap.common.message.ModifyResponseImpl;
import org.apache.ldap.common.message.ResultCodeEnum;
import org.apache.ldap.common.util.ExceptionUtils;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -39,13 +38,11 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class ModifyHandler extends AbstractSingleReplyHandler
+public class ModifyHandler implements CommandHandler
{
private static final ModificationItem[] EMPTY = new ModificationItem[0];
- /**
- * @see org.apache.apseda.protocol.SingleReplyHandler#handle(ClientKey,Object)
- */
- public Object handle( ClientKey key, Object request )
+
+ public void handle( ProtocolSession session, Object request )
{
ModifyRequest req = ( ModifyRequest ) request;
ModifyResponse resp = new ModifyResponseImpl( req.getMessageId() );
@@ -54,7 +51,7 @@
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, true );
+ .getInitialLdapContext( session, null, true );
DirContext ctx = ( DirContext ) ictx.lookup( "" );
Object[] mods = req.getModificationItems().toArray( EMPTY );
ctx.modifyAttributes( req.getName(), ( ModificationItem[] ) mods );
@@ -82,11 +79,13 @@
resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
}
- return resp;
+ session.write( resp );
+ return;
}
resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
resp.getLdapResult().setMatchedDn( req.getName() );
- return resp;
+ session.write( resp );
+ return;
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SearchHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SearchHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SearchHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SearchHandler.java Sun Feb 6 01:14:30 2005
@@ -16,7 +16,6 @@
*/
package org.apache.ldap.server.protocol;
-
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -31,8 +30,6 @@
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractManyReplyHandler;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.message.LdapResultImpl;
import org.apache.ldap.common.message.ReferralImpl;
@@ -46,7 +43,7 @@
import org.apache.ldap.common.message.SearchResponseReferenceImpl;
import org.apache.ldap.common.util.ArrayUtils;
import org.apache.ldap.common.util.ExceptionUtils;
-
+import org.apache.mina.protocol.ProtocolSession;
/**
* A handler for processing search requests.
@@ -54,18 +51,11 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class SearchHandler extends AbstractManyReplyHandler
+public class SearchHandler implements CommandHandler
{
private static final String DEREFALIASES_KEY = "java.naming.ldap.derefAliases";
-
- public SearchHandler()
- {
- super( true );
- }
-
-
- public Iterator handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
LdapContext ctx;
SearchRequest req = ( SearchRequest ) request;
@@ -75,14 +65,16 @@
String[] ids = null;
Collection retAttrs = new HashSet();
retAttrs.addAll( req.getAttributes() );
- if ( retAttrs.size() > 0 && ! retAttrs.contains( "ref" ) )
+ if( retAttrs.size() > 0 && !retAttrs.contains( "ref" ) )
{
retAttrs.add( "ref" );
- ids = ( String [] ) retAttrs.toArray( ArrayUtils.EMPTY_STRING_ARRAY );
+ ids = ( String[] ) retAttrs
+ .toArray( ArrayUtils.EMPTY_STRING_ARRAY );
}
- else if ( retAttrs.size() > 0 )
+ else if( retAttrs.size() > 0 )
{
- ids = ( String [] ) retAttrs.toArray( ArrayUtils.EMPTY_STRING_ARRAY );
+ ids = ( String[] ) retAttrs
+ .toArray( ArrayUtils.EMPTY_STRING_ARRAY );
}
// prepare all the search controls
@@ -97,9 +89,10 @@
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, true );
+ .getInitialLdapContext( session, null, true );
ctx = ( LdapContext ) ictx.lookup( "" );
- ctx.addToEnvironment( DEREFALIASES_KEY, req.getDerefAliases().getName() );
+ ctx.addToEnvironment( DEREFALIASES_KEY, req.getDerefAliases()
+ .getName() );
/*
* Eve JNDI Provider Specific Hack!
@@ -121,30 +114,42 @@
list = ctx.search( req.getBase(), null, controls );
ctx.removeFromEnvironment( "__filter__" );
- if ( list.hasMore() )
+ if( list.hasMore() )
{
- return new SearchResponseIterator( req, list );
+ Iterator it = new SearchResponseIterator( req, list );
+ while( it.hasNext() )
+ {
+ session.write( it.next() );
+ }
+ return;
}
else
{
list.close();
- SearchResponseDone resp = new SearchResponseDoneImpl( req.getMessageId() );
+ SearchResponseDone resp = new SearchResponseDoneImpl( req
+ .getMessageId() );
resp.setLdapResult( new LdapResultImpl( resp ) );
resp.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
resp.getLdapResult().setMatchedDn( req.getBase() );
- return Collections.singleton( resp ).iterator();
+ Iterator it = Collections.singleton( resp ).iterator();
+ while( it.hasNext() )
+ {
+ session.write( it.next() );
+ }
+ return;
}
}
- catch ( NamingException e )
+ catch( NamingException e )
{
String msg = "failed on search operation:\n" + req + "\n";
msg += ExceptionUtils.getStackTrace( e );
- SearchResponseDone resp = new SearchResponseDoneImpl( req.getMessageId() );
+ SearchResponseDone resp = new SearchResponseDoneImpl( req
+ .getMessageId() );
ResultCodeEnum rc = null;
- if ( e instanceof LdapException )
+ if( e instanceof LdapException )
{
- rc = ( ( LdapException ) e ).getResultCode() ;
+ rc = ( ( LdapException ) e ).getResultCode();
}
else
{
@@ -154,30 +159,35 @@
resp.setLdapResult( new LdapResultImpl( resp ) );
resp.getLdapResult().setResultCode( rc );
resp.getLdapResult().setErrorMessage( msg );
- if ( e.getResolvedName() != null )
+ if( e.getResolvedName() != null )
{
- resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
+ resp.getLdapResult().setMatchedDn(
+ e.getResolvedName().toString() );
}
else
{
resp.getLdapResult().setMatchedDn( "" );
}
- return Collections.singleton( resp ).iterator();
+ Iterator it = Collections.singleton( resp ).iterator();
+ while( it.hasNext() )
+ {
+ session.write( it.next() );
+ }
}
}
-
SearchResponseDone getResponse( SearchRequest req, NamingException e )
{
String msg = "failed on search operation:\n" + req + "\n";
msg += ExceptionUtils.getStackTrace( e );
- SearchResponseDone resp = new SearchResponseDoneImpl( req.getMessageId() );
+ SearchResponseDone resp = new SearchResponseDoneImpl( req
+ .getMessageId() );
ResultCodeEnum rc = null;
- if ( e instanceof LdapException )
+ if( e instanceof LdapException )
{
- rc = ( ( LdapException ) e ).getResultCode() ;
+ rc = ( ( LdapException ) e ).getResultCode();
}
else
{
@@ -187,9 +197,10 @@
resp.setLdapResult( new LdapResultImpl( resp ) );
resp.getLdapResult().setResultCode( rc );
resp.getLdapResult().setErrorMessage( msg );
- if ( e.getResolvedName() != null )
+ if( e.getResolvedName() != null )
{
- resp.getLdapResult().setMatchedDn( e.getResolvedName().toString() );
+ resp.getLdapResult()
+ .setMatchedDn( e.getResolvedName().toString() );
}
else
{
@@ -199,15 +210,17 @@
return resp;
}
-
class SearchResponseIterator implements Iterator
{
private final SearchRequest req;
+
private final NamingEnumeration underlying;
+
private SearchResponseDone respDone;
+
private boolean done = false;
- private Object prefetched;
+ private Object prefetched;
/**
* Creates a search response iterator for the resulting enumeration
@@ -216,14 +229,15 @@
* @param req the search request to generate responses to
* @param underlying the underlying JNDI enumeration containing SearchResults
*/
- public SearchResponseIterator( SearchRequest req, NamingEnumeration underlying )
+ public SearchResponseIterator( SearchRequest req,
+ NamingEnumeration underlying )
{
this.req = req;
this.underlying = underlying;
try
{
- if ( underlying.hasMore() )
+ if( underlying.hasMore() )
{
SearchResult result = ( SearchResult ) underlying.next();
@@ -232,10 +246,11 @@
* local variable for the following call to next()
*/
Attribute ref = result.getAttributes().get( "ref" );
- if ( ref == null || ref.size() > 0 )
+ if( ref == null || ref.size() > 0 )
{
SearchResponseEntry respEntry;
- respEntry = new SearchResponseEntryImpl( req.getMessageId() );
+ respEntry = new SearchResponseEntryImpl( req
+ .getMessageId() );
respEntry.setAttributes( result.getAttributes() );
respEntry.setObjectName( result.getName() );
prefetched = respEntry;
@@ -243,9 +258,10 @@
else
{
SearchResponseReference respRef;
- respRef = new SearchResponseReferenceImpl( req.getMessageId() );
+ respRef = new SearchResponseReferenceImpl( req
+ .getMessageId() );
respRef.setReferral( new ReferralImpl( respRef ) );
- for ( int ii = 0; ii < ref.size(); ii++ )
+ for( int ii = 0; ii < ref.size(); ii ++ )
{
String url;
@@ -254,9 +270,15 @@
url = ( String ) ref.get( ii );
respRef.getReferral().addLdapUrl( url );
}
- catch ( NamingException e )
+ catch( NamingException e )
{
- try { underlying.close(); } catch( Throwable t ) {}
+ try
+ {
+ underlying.close();
+ }
+ catch( Throwable t )
+ {
+ }
prefetched = null;
respDone = getResponse( req, e );
}
@@ -265,33 +287,37 @@
}
}
}
- catch ( NamingException e )
+ catch( NamingException e )
{
- try { this.underlying.close(); } catch( Exception e2 ) {}
+ try
+ {
+ this.underlying.close();
+ }
+ catch( Exception e2 )
+ {
+ }
respDone = getResponse( req, e );
}
}
-
public boolean hasNext()
{
return !done;
}
-
public Object next()
{
Object next = prefetched;
SearchResult result = null;
// if we're done we got nothing to give back
- if ( done )
+ if( done )
{
throw new NoSuchElementException();
}
// if respDone has been assembled this is our last object to return
- if ( respDone != null )
+ if( respDone != null )
{
done = true;
return respDone;
@@ -307,24 +333,37 @@
* If we have more results from the underlying cursorr then
* we just set the result and build the response object below.
*/
- if ( underlying.hasMore() )
+ if( underlying.hasMore() )
{
result = ( SearchResult ) underlying.next();
}
else
{
- try { underlying.close(); } catch( Throwable t ) {}
+ try
+ {
+ underlying.close();
+ }
+ catch( Throwable t )
+ {
+ }
respDone = new SearchResponseDoneImpl( req.getMessageId() );
respDone.setLdapResult( new LdapResultImpl( respDone ) );
- respDone.getLdapResult().setResultCode( ResultCodeEnum.SUCCESS );
+ respDone.getLdapResult().setResultCode(
+ ResultCodeEnum.SUCCESS );
respDone.getLdapResult().setMatchedDn( req.getBase() );
prefetched = null;
return next;
}
}
- catch ( NamingException e )
+ catch( NamingException e )
{
- try { underlying.close(); } catch( Throwable t ) {}
+ try
+ {
+ underlying.close();
+ }
+ catch( Throwable t )
+ {
+ }
prefetched = null;
respDone = getResponse( req, e );
return next;
@@ -335,18 +374,20 @@
* local variable for the following call to next()
*/
Attribute ref = result.getAttributes().get( "ref" );
- if ( ref == null || ref.size() > 0 )
+ if( ref == null || ref.size() > 0 )
{
- SearchResponseEntry respEntry = new SearchResponseEntryImpl( req.getMessageId() );
+ SearchResponseEntry respEntry = new SearchResponseEntryImpl(
+ req.getMessageId() );
respEntry.setAttributes( result.getAttributes() );
respEntry.setObjectName( result.getName() );
prefetched = respEntry;
}
else
{
- SearchResponseReference respRef = new SearchResponseReferenceImpl( req.getMessageId() );
+ SearchResponseReference respRef = new SearchResponseReferenceImpl(
+ req.getMessageId() );
respRef.setReferral( new ReferralImpl( respRef ) );
- for ( int ii = 0; ii < ref.size(); ii++ )
+ for( int ii = 0; ii < ref.size(); ii ++ )
{
String url;
@@ -355,9 +396,15 @@
url = ( String ) ref.get( ii );
respRef.getReferral().addLdapUrl( url );
}
- catch ( NamingException e )
+ catch( NamingException e )
{
- try { underlying.close(); } catch( Throwable t ) {}
+ try
+ {
+ underlying.close();
+ }
+ catch( Throwable t )
+ {
+ }
prefetched = null;
respDone = getResponse( req, e );
return next;
@@ -368,7 +415,6 @@
return next;
}
-
/**
* Unsupported so it throws an exception.
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SessionRegistry.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SessionRegistry.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SessionRegistry.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/SessionRegistry.java Sun Feb 6 01:14:30 2005
@@ -20,8 +20,6 @@
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
-import java.util.Observable;
-import java.util.Observer;
import javax.naming.Context;
import javax.naming.NamingException;
@@ -29,10 +27,8 @@
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.event.DisconnectEvent;
-import org.apache.apseda.event.EventRouter;
-import org.apache.apseda.listener.ClientKey;
import org.apache.ldap.common.exception.LdapNoPermissionException;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -44,12 +40,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 */
- private final Observer keyObserver = new KeyExpirationObserver();
/** the properties associated with this SessionRegistry */
private Hashtable env;
@@ -77,10 +69,8 @@
*
* @param env the properties associated with this SessionRegistry
*/
- SessionRegistry( Hashtable env, EventRouter router )
+ SessionRegistry( Hashtable env )
{
- this.router = router;
-
if ( s_singleton == null )
{
s_singleton = this;
@@ -121,24 +111,22 @@
* client. If the context is not present then there was no bind operation
* that set it. Hence this operation requesting the IC is anonymous.
*
- * @param key the client's key
+ * @param session the client's key
* @param connCtls connection controls if any to use if creating anon context
* @param allowAnonymous true if anonymous requests will create anonymous
* InitialContext if one is not present for the operation
* @return the InitialContext or null
*/
- public InitialLdapContext getInitialLdapContext( ClientKey key,
+ public InitialLdapContext getInitialLdapContext( ProtocolSession session,
Control[] connCtls,
boolean allowAnonymous )
throws NamingException
{
InitialLdapContext ictx = null;
- key.addObserver( keyObserver );
-
synchronized( contexts )
{
- ictx = ( InitialLdapContext ) contexts.get( key );
+ ictx = ( InitialLdapContext ) contexts.get( session );
}
if ( ictx == null && allowAnonymous )
@@ -159,16 +147,14 @@
/**
* Sets the initial context associated with a newly authenticated client.
*
- * @param key the client's key
+ * @param session the client session
* @param ictx the initial context gotten
*/
- public void setInitialLdapContext( ClientKey key, InitialDirContext ictx )
+ public void setInitialLdapContext( ProtocolSession session, InitialDirContext ictx )
{
- key.deleteObserver( keyObserver ); // remove first just in case
- key.addObserver( keyObserver );
synchronized( contexts )
{
- contexts.put( key, ictx );
+ contexts.put( session, ictx );
}
}
@@ -176,39 +162,13 @@
/**
* Removes the state mapping a JNDI initial context for the client's key.
*
- * @param key the client's key
+ * @param session the client's key
*/
- public void remove( ClientKey key )
+ public void remove( ProtocolSession session )
{
- key.deleteObserver( keyObserver );
synchronized( contexts )
{
- contexts.remove( key );
- }
- }
-
-
- /**
- * A key expiration observer.
- */
- class KeyExpirationObserver implements Observer
- {
- /**
- * This is called whenever the client's key expires. We react by removing
- * the entry if any of the client's in our InitialContext registry.
- *
- * @param o the ClientKey that has expired
- * @param arg will be null
- */
- public void update( Observable o, Object arg )
- {
- // cast just to make sure
- ClientKey key = ( ClientKey ) o;
- key.deleteObserver( keyObserver );
- synchronized( contexts )
- {
- contexts.remove( key );
- }
+ contexts.remove( session );
}
}
@@ -216,11 +176,10 @@
/**
* Terminates the session by publishing a disconnect event.
*
- * @param key the client key of the client to disconnect
+ * @param session the client key of the client to disconnect
*/
- public void terminateSession( ClientKey key )
+ public void terminateSession( ProtocolSession session )
{
- DisconnectEvent event = new DisconnectEvent( this, key );
- router.publish( event );
+ session.close();
}
}
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/UnbindHandler.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/UnbindHandler.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/UnbindHandler.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/main/java/org/apache/ldap/server/protocol/UnbindHandler.java Sun Feb 6 01:14:30 2005
@@ -20,8 +20,7 @@
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.AbstractNoReplyHandler;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -31,22 +30,22 @@
* @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
* @version $Rev$
*/
-public class UnbindHandler extends AbstractNoReplyHandler
+public class UnbindHandler implements CommandHandler
{
- public void handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
SessionRegistry registry = SessionRegistry.getSingleton();
try
{
InitialLdapContext ictx = SessionRegistry.getSingleton()
- .getInitialLdapContext( key, null, false );
+ .getInitialLdapContext( session, null, false );
if ( ictx != null )
{
ictx.close();
}
- registry.terminateSession( key );
- registry.remove( key );
+ registry.terminateSession( session );
+ registry.remove( session );
}
catch ( NamingException e )
{
Modified: incubator/directory/apacheds/branches/mina-port/protocol/src/test/org/apache/ldap/server/protocol/LdapProtocolProviderTest.java
URL: http://svn.apache.org/viewcvs/incubator/directory/apacheds/branches/mina-port/protocol/src/test/org/apache/ldap/server/protocol/LdapProtocolProviderTest.java?view=diff&r1=151559&r2=151560
==============================================================================
--- incubator/directory/apacheds/branches/mina-port/protocol/src/test/org/apache/ldap/server/protocol/LdapProtocolProviderTest.java (original)
+++ incubator/directory/apacheds/branches/mina-port/protocol/src/test/org/apache/ldap/server/protocol/LdapProtocolProviderTest.java Sun Feb 6 01:14:30 2005
@@ -18,17 +18,32 @@
import java.util.Properties;
-import java.util.Iterator;
import junit.framework.TestCase;
-import org.apache.ldap.common.exception.LdapNamingException;
-import org.apache.ldap.common.message.*;
import org.apache.ldap.common.NotImplementedException;
-import org.apache.ldap.server.protocol.*;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.listener.ClientKey;
-import org.apache.apseda.protocol.*;
+import org.apache.ldap.common.exception.LdapNamingException;
+import org.apache.ldap.common.message.AbandonRequest;
+import org.apache.ldap.common.message.AbandonRequestImpl;
+import org.apache.ldap.common.message.AddRequest;
+import org.apache.ldap.common.message.AddRequestImpl;
+import org.apache.ldap.common.message.BindRequest;
+import org.apache.ldap.common.message.BindRequestImpl;
+import org.apache.ldap.common.message.CompareRequest;
+import org.apache.ldap.common.message.CompareRequestImpl;
+import org.apache.ldap.common.message.DeleteRequest;
+import org.apache.ldap.common.message.DeleteRequestImpl;
+import org.apache.ldap.common.message.ExtendedRequest;
+import org.apache.ldap.common.message.ExtendedRequestImpl;
+import org.apache.ldap.common.message.ModifyDnRequest;
+import org.apache.ldap.common.message.ModifyDnRequestImpl;
+import org.apache.ldap.common.message.ModifyRequest;
+import org.apache.ldap.common.message.ModifyRequestImpl;
+import org.apache.ldap.common.message.SearchRequest;
+import org.apache.ldap.common.message.SearchRequestImpl;
+import org.apache.ldap.common.message.UnbindRequest;
+import org.apache.ldap.common.message.UnbindRequestImpl;
+import org.apache.mina.protocol.ProtocolSession;
/**
@@ -50,42 +65,41 @@
*/
public void testDefaultOperation() throws LdapNamingException
{
- LdapProtocolProvider provider = new LdapProtocolProvider( null );
- assertNotNull( provider.getDecoderFactory() );
- assertNotNull( provider.getEncoderFactory() );
+ LdapProtocolProvider provider = new LdapProtocolProvider();
+ assertNotNull( provider.getCodecFactory() );
assertTrue( provider.getName() == LdapProtocolProvider.SERVICE_NAME );
Object req = null;
req = new AbandonRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof AbandonHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof AbandonHandler );
req = new AddRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof AddHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof AddHandler );
req = new BindRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof BindHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof BindHandler );
req = new CompareRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof CompareHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof CompareHandler );
req = new DeleteRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof DeleteHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof DeleteHandler );
req = new ExtendedRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof ExtendedHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof ExtendedHandler );
req = new ModifyDnRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof ModifyDnHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof ModifyDnHandler );
req = new ModifyRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof ModifyHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof ModifyHandler );
req = new SearchRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof SearchHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof SearchHandler );
req = new UnbindRequestImpl( 0 );
- assertTrue( provider.getHandler( null, req ) instanceof UnbindHandler );
+ assertTrue( provider.getCommandHandler( req ) instanceof UnbindHandler );
}
@@ -130,155 +144,139 @@
props.setProperty( UnbindRequest.class.getName(), BogusUnbindHandler.class.getName() );
props.setProperty( UnbindRequestImpl.class.getName(), BogusUnbindHandler.class.getName() );
- LdapProtocolProvider provider = new LdapProtocolProvider( props, null );
- assertNotNull( provider.getDecoderFactory() );
- assertNotNull( provider.getEncoderFactory() );
+ LdapProtocolProvider provider = new LdapProtocolProvider( props );
+ assertNotNull( provider.getCodecFactory() );
assertTrue( provider.getName() == LdapProtocolProvider.SERVICE_NAME );
Object req = null;
- RequestHandler handler = null;
+ CommandHandler handler = null;
req = new AbandonRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.NOREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusAbandonHandler );
req = new AddRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusAddHandler );
req = new BindRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusBindHandler );
req = new CompareRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusCompareHandler );
req = new DeleteRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusDeleteHandler );
req = new ExtendedRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusExtendedHandler );
req = new ModifyDnRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusModifyDnHandler );
req = new ModifyRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.SINGLEREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusModifyHandler );
req = new SearchRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.MANYREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusSearchHandler );
req = new UnbindRequestImpl( 0 );
- handler = provider.getHandler( null, req );
- assertEquals( HandlerTypeEnum.NOREPLY, handler.getHandlerType() );
+ handler = provider.getCommandHandler( req );
assertTrue( handler instanceof BogusUnbindHandler );
}
- public static class BogusAbandonHandler extends AbstractNoReplyHandler
+ public static class BogusAbandonHandler implements CommandHandler
{
- public void handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusUnbindHandler extends AbstractNoReplyHandler
+ public static class BogusUnbindHandler implements CommandHandler
{
- public void handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusAddHandler extends AbstractSingleReplyHandler
+ public static class BogusAddHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusBindHandler extends AbstractSingleReplyHandler
+ public static class BogusBindHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusCompareHandler extends AbstractSingleReplyHandler
+ public static class BogusCompareHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusDeleteHandler extends AbstractSingleReplyHandler
+ public static class BogusDeleteHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusExtendedHandler extends AbstractSingleReplyHandler
+ public static class BogusExtendedHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusModifyDnHandler extends AbstractSingleReplyHandler
+ public static class BogusModifyDnHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusModifyHandler extends AbstractSingleReplyHandler
+ public static class BogusModifyHandler implements CommandHandler
{
- public Object handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}
}
- public static class BogusSearchHandler extends AbstractManyReplyHandler
+ public static class BogusSearchHandler implements CommandHandler
{
- public BogusSearchHandler()
- {
- super( true );
- }
-
- public Iterator handle( ClientKey key, Object request )
+ public void handle( ProtocolSession session, Object request )
{
throw new NotImplementedException( "handler not implemented!" );
}