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/09/03 00:19:10 UTC

svn commit: rev 37431 - in incubator/directory/eve/branches/multi-listener/frontend: api/src/java/org/apache/eve/decoder api/src/java/org/apache/eve/encoder api/src/java/org/apache/eve/event api/src/java/org/apache/eve/processor api/src/java/org/apache/eve/protocol api/src/java/org/apache/eve/seda impl/src/java/org/apache/eve/decoder impl/src/java/org/apache/eve/encoder impl/src/java/org/apache/eve/processor impl/src/test/org/apache/eve/decoder

Author: akarasulu
Date: Thu Sep  2 15:19:09 2004
New Revision: 37431

Added:
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/ProtocolProvider.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/ProtocolRegistry.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/RequestHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/EncoderManagerMonitorAdapter.java
Removed:
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/AbandonHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/AddHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/BindHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/CompareHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/DefaultHandlerRegistry.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/DeleteHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ExtendedHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/HandlerRegistry.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ModifyDnHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ModifyHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/SearchHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/UnbindHandler.java
Modified:
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/ClientDecoder.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/DecoderManager.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/encoder/EncoderManager.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/RequestEvent.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/ResponseEvent.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessor.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessorMonitor.java
   incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/seda/StageMonitor.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecodeStageHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecoderManagerMonitorAdapter.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DefaultDecoderManager.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/DefaultEncoderManager.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/DefaultRequestProcessor.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ManyReplyHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/NoReplyHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestProcessorMonitorAdapter.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/SingleReplyHandler.java
   incubator/directory/eve/branches/multi-listener/frontend/impl/src/test/org/apache/eve/decoder/DefaultDecoderManagerTest.java
Log:
Summary:

Removed all LDAP dependencies in frontend plumbing in prep for creation of
the initial jinetd subproject.  Slowly formulating baseline architecture.

Commit changes:

 o removed references to LDAP message framework in events
 o using objects to represent requests and responses instead of LDAP interfaces
 o removed deps on LDAP encoders and decoders leaving stubs for now
 o altered handler design in process to accomodate any protocol
 
Things todo:

 o need to finalize the handler interfaces
 o need to add response serialization for multi-part responses
 o change maven deps 
 o alter project layout now that all is frontend
 o remove backend since this is eve specific
 o write lots of test code
 o figure out the best way to have protocol integration
 o start refactoring eve so it uses this
 o consider consolidating api & impl?
 o fix merlin wrapper project to account for changes



Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/ClientDecoder.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/ClientDecoder.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/ClientDecoder.java	Thu Sep  2 15:19:09 2004
@@ -57,7 +57,7 @@
     
 
     /* (non-Javadoc)
-     * @see org.apache.commons.codec.stateful.StatefulDecoder#decode(
+     * @see org.apache.commons.codec.stateful.StatefulDecoder#decodeNonBlocking(
      * java.lang.Object)
      */
     public void decode( Object encoded ) throws DecoderException

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/DecoderManager.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/DecoderManager.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/decoder/DecoderManager.java	Thu Sep  2 15:19:09 2004
@@ -14,16 +14,16 @@
  *   limitations under the License.
  *
  */
-package org.apache.eve.decoder ;
+package org.apache.eve.decoder;
 
 
-import java.nio.ByteBuffer ;
+import java.nio.ByteBuffer;
 
-import org.apache.eve.listener.ClientKey ;
+import org.apache.eve.listener.ClientKey;
 
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.stateful.DecoderMonitor;
+import org.apache.commons.codec.stateful.DecoderCallback;
 
 
 /**
@@ -37,49 +37,26 @@
  */
 public interface DecoderManager
 {
-    /** Avalon likes to have the ROLE associated with the service interface */
-    String ROLE = DecoderManager.class.getName() ;
-
-    /**
-     * Sets a client decoder's callback.
-     * 
-     * @param key the unique key associated with the client
-     * @param cb the decoder callback used to deliver decode events to
-     */
-    void setCallback( ClientKey key, DecoderCallback cb ) ;
-
-    /**
-     * Sets a client decoder's monitor.
-     * 
-     * @param key the unique key associated with the client
-     * @param monitor the monitor used to deliver events
-     */
-    void setDecoderMonitor( ClientKey key, DecoderMonitor monitor ) ;
-
-    /**
-     * Disables callback events for a client destroying decoding state if any.
-     * 
-     * @param key the unique key associated with the client
-     */
-    boolean disable( ClientKey key ) ;
-
     /**
-     * Decodes a buffer of encoded data.
+     * Decodes a chunk buffer of encoded data without blocking.  The chunk may
+     * contain one or more fragments of a message without necessarily containing
+     * an entire message.
      * 
      * @param key the unique key associated with the client
      * @param buffer the buffer of encoded data
-     * @return the set of keys for decoding sessions
      * @throws DecoderException if there is a failure while decoding
      */
-    void decode( ClientKey key, ByteBuffer buffer ) throws DecoderException ;
+    void decodeNonBlocking( ClientKey key, ByteBuffer buffer )
+            throws DecoderException;
     
     /**
-     * One shot synchronous decode operation requiring a complete unit of 
-     * encoded data to return the decoded equivalent immediately.
+     * One shot blocking operation requiring a single complete unit of encoded
+     * data to return the decoded request object immediately.
      * 
-     * @param buffer the buffer containing all the encoded data
-     * @return the decoded object
+     * @param buffer the buffer containing a single encoded message
+     * @return the decoded object representing the message
      * @throws DecoderException if there is a failure while decoding
      */
-    Object decode( ByteBuffer buffer ) throws DecoderException ;
+    Object decodeBlocking( ClientKey key, ByteBuffer buffer )
+            throws DecoderException;
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/encoder/EncoderManager.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/encoder/EncoderManager.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/encoder/EncoderManager.java	Thu Sep  2 15:19:09 2004
@@ -16,24 +16,31 @@
  */
 package org.apache.eve.encoder ;
 
+
 import org.apache.commons.codec.EncoderException ;
 
-import org.apache.ldap.common.message.Response ;
+import org.apache.eve.listener.ClientKey;
+
+import java.nio.ByteBuffer;
+
 
 /**
+ * An encoder manager used to encode a protocol specific response message into
+ * a byte buffer.  No requirement is enforced on the protocol or the type of
+ * encoding applied.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public interface EncoderManager
 {
 
     /**
-     * Synchronously encodes an LDAPv3 protocol Response message into a byte
-     * buffer that can be written to a Stream as an BER encoded PDU.
+     * Synchronously encodes a protocol Response message into a byte buffer.
      *
-     * @param a_response the LDAP Response message to be encoded.
+     * @param key the client's key
+     * @param response the protocol response message to be encoded.
      */
-    public byte [] encode( Response a_response ) throws EncoderException ;
+    public ByteBuffer encode( ClientKey key, Object response )
+            throws EncoderException;
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/RequestEvent.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/RequestEvent.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/RequestEvent.java	Thu Sep  2 15:19:09 2004
@@ -18,20 +18,18 @@
 
 
 import org.apache.eve.listener.ClientKey ;
-import org.apache.ldap.common.message.Request ;
 
 
 /**
- * An event used to denote the arrival of a client request.
+ * An event used to denote the arrival of a protocol client request.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public class RequestEvent extends ClientEvent
 {
-    /** the LDAP request message */
-    private final Request request ;
+    /** the request message */
+    private final Object request ;
 
     
     /**
@@ -39,9 +37,9 @@
      *  
      * @param source the source that created this event
      * @param clientKey the key of the client associated with this event
-     * @param request the LDAP request message
+     * @param request the request message
      */
-    public RequestEvent( Object source, ClientKey clientKey, Request request )
+    public RequestEvent( Object source, ClientKey clientKey, Object request )
     {
         super( source, clientKey ) ;
         this.request = request ; 
@@ -49,11 +47,11 @@
     
     
     /**
-     * Gets the LDAP request message associated with this event.
+     * Gets the request message associated with this event.
      * 
-     * @return the LDAP request message associated with this event
+     * @return the request message associated with this event
      */
-    public Request getRequest()
+    public Object getRequest()
     {
         return request ;
     }

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/ResponseEvent.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/ResponseEvent.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/event/ResponseEvent.java	Thu Sep  2 15:19:09 2004
@@ -18,7 +18,6 @@
 
 
 import org.apache.eve.listener.ClientKey ;
-import org.apache.ldap.common.message.Response ;
 
 
 /**
@@ -26,14 +25,13 @@
  * only connotates that a response was made not delivered.  The delivery is an
  * output event.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public class ResponseEvent extends ClientEvent
 {
-    /** the LDAP response message */
-    private final Response response ;
+    /** the response message */
+    private final Object response ;
 
     
     /**
@@ -42,10 +40,10 @@
      *  
      * @param source the source that created this event
      * @param clientKey the key of the client associated with this event
-     * @param response the LDAP response message
+     * @param response the response message
      */
     public ResponseEvent( Object source, ClientKey clientKey, 
-                          Response response )
+                          Object response )
     {
         super( source, clientKey ) ;
         this.response = response ;
@@ -53,11 +51,11 @@
     
     
     /**
-     * Gets the LDAP response message associated with this event.
+     * Gets the response message associated with this event.
      * 
-     * @return the LDAP response message associated with this event
+     * @return the response message associated with this event
      */
-    public Response getResponse()
+    public Object getResponse()
     {
         return response ;
     }

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessor.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessor.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessor.java	Thu Sep  2 15:19:09 2004
@@ -19,7 +19,7 @@
 
 /**
  * A service designed to process request events which denote the arrival, 
- * read, and decode of a client request ready to be handled.
+ * read, and decodeNonBlocking of a client request ready to be handled.
  *
  * @author <a href="mailto:directory-dev@incubator.apache.org">
  * Apache Directory Project</a>

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessorMonitor.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessorMonitor.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/processor/RequestProcessorMonitor.java	Thu Sep  2 15:19:09 2004
@@ -21,7 +21,6 @@
 
 import org.apache.eve.event.Subscriber ;
 import org.apache.eve.listener.ClientKey ;
-import org.apache.ldap.common.message.Request ;
 
 
 /**
@@ -49,5 +48,5 @@
      * @param request
      * @param t
      */
-    void failedOnSingleReply( ClientKey key, Request request, Throwable t ) ;
+    void failedOnSingleReply( ClientKey key, Object request, Throwable t ) ;
 }

Added: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/ProtocolProvider.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/ProtocolProvider.java	Thu Sep  2 15:19:09 2004
@@ -0,0 +1,39 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.protocol;
+
+
+import org.apache.commons.codec.stateful.StatefulDecoder;
+import org.apache.commons.codec.stateful.StatefulEncoder;
+
+
+/**
+ * Document me.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org"> Apache Directory
+ *         Project</a>
+ * @version $Rev$
+ */
+public interface ProtocolProvider
+{
+    StatefulDecoder getDecoder();
+    StatefulEncoder getEncoder();
+    boolean isNoReply( Object request );
+    boolean isSingleReply( Object request );
+    boolean isMultiReply( Object request );
+    
+}

Added: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/ProtocolRegistry.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/ProtocolRegistry.java	Thu Sep  2 15:19:09 2004
@@ -0,0 +1,70 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.protocol;
+
+
+/**
+ * A protocol registry service.  Components lookup the key(port) to protocol
+ * correspondence using this registry.  The registry need not store standard
+ * port to protocol mappings; it can have a protocol assigned to multiple
+ * ports as well.  This registry will be used to by the listener to bind server
+ * sockets and by other components to switch the apparatus to handle different
+ * protcol requests.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org"> Apache Directory
+ *         Project</a>
+ * @version $Rev$
+ */
+public interface ProtocolRegistry
+{
+    /**
+     * Looks up the ports used for a tcp or udp based protocol.
+     *
+     * @param protocol the protocol descriptor string (unique)
+     * @param isTcp whether or not the protocol ports are tcp or udp based
+     * @return the set of ports servicing the protocol
+     */
+    int[] getPorts( String protocol, boolean isTcp );
+
+    /**
+     * Looks up the protocol associated with a port and a transport.
+     *
+     * @param port the port to check the protocol of
+     * @param isTcp whether or not the protocol port is tcp or udp based
+     * @return the protocol descriptor string or null if the specificed port
+     * is not bound for the protocol on the specified transport
+     */
+    String getProtocol( int port, boolean isTcp );
+
+    /**
+     * Looks up the ports used for a tcp based protocol.
+     *
+     * @param protocol the protocol descriptor string (unique)
+     * @return the set of ports servicing the protocol, or an empty array if
+     * no ports are bound for the protocol
+     */
+    int[] getPorts( String protocol );
+
+    /**
+     * Looks up the protocol associated with a port using a tcp transport.
+     *
+     * @param port the port to check the protocol of
+     * @return the protocol descriptor string, or null if a protocol is not
+     * associated with that port using tcp
+     */
+    String getProtocol( int port );
+}

Added: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/RequestHandler.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/protocol/RequestHandler.java	Thu Sep  2 15:19:09 2004
@@ -0,0 +1,30 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.protocol ;
+
+
+
+/**
+ * Root of all request handler types.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface RequestHandler
+{
+}

Modified: incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/seda/StageMonitor.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/seda/StageMonitor.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/api/src/java/org/apache/eve/seda/StageMonitor.java	Thu Sep  2 15:19:09 2004
@@ -21,7 +21,7 @@
 
 
 /**
- * Interface used to monitor Stage services.
+ * Interface used to monitor Stage protocol.
  *
  * @author <a href="mailto:directory-dev@incubator.apache.org">
  * Apache Directory Project</a>

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecodeStageHandler.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecodeStageHandler.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecodeStageHandler.java	Thu Sep  2 15:19:09 2004
@@ -29,7 +29,7 @@
 
 
 /**
- * A decoder manager's decode StageHandler for use only with enqueued 
+ * A decoder manager's decodeNonBlocking StageHandler for use only with enqueued
  * InputEvents.
  *
  * @author <a href="mailto:directory-dev@incubator.apache.org">
@@ -43,7 +43,7 @@
 
     
     /**
-     * Creates the decoder manager's decode stage handler.
+     * Creates the decoder manager's decodeNonBlocking stage handler.
      * 
      * @param manager the decoder manager this handler is for
      */
@@ -55,7 +55,7 @@
 
     /**
      * Uses the client key to have the decoder manager lookup the client's 
-     * stateful decoder.  The decoder's decode method is called and control is
+     * stateful decoder.  The decoder's decodeNonBlocking method is called and control is
      * returned.  Error handling is left upto the decoder's monitor.
      * 
      * @see org.apache.eve.seda.StageHandler#handleEvent(java.util.EventObject)

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecoderManagerMonitorAdapter.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecoderManagerMonitorAdapter.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DecoderManagerMonitorAdapter.java	Thu Sep  2 15:19:09 2004
@@ -19,8 +19,6 @@
 
 import java.util.EventObject ; 
 
-import org.apache.commons.lang.exception.ExceptionUtils ;
-
 import org.apache.eve.event.Subscriber ;
 
 
@@ -28,8 +26,7 @@
  * An adapter for decoder manager monitors where all failures actually throw
  * a wrapped runtime exception of the throwables they encounter.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public class DecoderManagerMonitorAdapter implements DecoderManagerMonitor
@@ -39,9 +36,12 @@
      * org.apache.eve.event.Subscriber, 
      * java.util.EventObject, java.lang.Throwable)
      */
-    public void 
-        failedOnInform( Subscriber subscriber, EventObject event, Throwable t )
+    public void failedOnInform( Subscriber subscriber, EventObject event,
+                                Throwable t )
     {
-        System.out.println( ExceptionUtils.getFullStackTrace( t ) )     ;
+        if ( t != null )
+        {
+            t.printStackTrace();
+        }
     }
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DefaultDecoderManager.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DefaultDecoderManager.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/decoder/DefaultDecoderManager.java	Thu Sep  2 15:19:09 2004
@@ -14,43 +14,40 @@
  *   limitations under the License.
  *
  */
-package org.apache.eve.decoder ;
+package org.apache.eve.decoder;
 
 
-import java.util.Map ;
-import java.util.HashMap ;
-import java.util.EventObject ;
-
-import java.nio.ByteBuffer ;
-
-import org.apache.ldap.common.message.Request ;
-import org.apache.ldap.common.message.MessageDecoder;
-
-import org.apache.eve.event.InputEvent ;
-import org.apache.eve.seda.StageConfig ;
-import org.apache.eve.event.EventRouter ;
-import org.apache.eve.seda.DefaultStage ;
-import org.apache.eve.listener.ClientKey ;
-import org.apache.eve.event.ConnectEvent ;
-import org.apache.eve.event.RequestEvent ;
-import org.apache.eve.event.DisconnectEvent ;
-import org.apache.eve.event.InputSubscriber ;
-import org.apache.eve.event.ConnectSubscriber ;
-import org.apache.eve.seda.LoggingStageMonitor ;
-import org.apache.eve.event.AbstractSubscriber ;
-import org.apache.eve.event.DisconnectSubscriber ;
-
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-import org.apache.commons.codec.stateful.DecoderCallback ;
-import org.apache.commons.codec.stateful.StatefulDecoder ;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.EventObject;
+
+import java.nio.ByteBuffer;
+
+import org.apache.eve.event.InputEvent;
+import org.apache.eve.seda.StageConfig;
+import org.apache.eve.event.EventRouter;
+import org.apache.eve.seda.DefaultStage;
+import org.apache.eve.listener.ClientKey;
+import org.apache.eve.event.ConnectEvent;
+import org.apache.eve.event.RequestEvent;
+import org.apache.eve.event.DisconnectEvent;
+import org.apache.eve.event.InputSubscriber;
+import org.apache.eve.event.ConnectSubscriber;
+import org.apache.eve.seda.LoggingStageMonitor;
+import org.apache.eve.event.AbstractSubscriber;
+import org.apache.eve.event.DisconnectSubscriber;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.commons.codec.stateful.DecoderCallback;
+import org.apache.commons.codec.stateful.StatefulDecoder;
+
+import org.apache.commons.lang.NotImplementedException;
 
 
 /**
  * Default decoder managing component implementation.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public class DefaultDecoderManager extends DefaultStage
@@ -61,11 +58,11 @@
     DisconnectSubscriber
 {
     /** event router or bus this component subscribes and publishes events on */
-    private final EventRouter router ;
+    private final EventRouter router;
     /** map of decoders for client keys */
-    private final Map decoders = new HashMap() ;
+    private final Map decoders = new HashMap();
     /** the monitor used for this decoder manager */
-    private DecoderManagerMonitor monitor ;
+    private DecoderManagerMonitor monitor;
 
 
     /**
@@ -76,15 +73,15 @@
      */
     public DefaultDecoderManager( EventRouter router, StageConfig config )
     {
-        super( config ) ;
+        super( config );
         
-        this.router = router ;
-        this.monitor = new DecoderManagerMonitorAdapter() ;
-        super.setMonitor( new LoggingStageMonitor( getClass() ) ) ;
-
-        router.subscribe( InputEvent.class, this ) ;
-        router.subscribe( ConnectEvent.class, this ) ;
-        router.subscribe( DisconnectEvent.class, this ) ;
+        this.router = router;
+        this.monitor = new DecoderManagerMonitorAdapter();
+        super.setMonitor( new LoggingStageMonitor( getClass() ) );
+
+        router.subscribe( InputEvent.class, this );
+        router.subscribe( ConnectEvent.class, this );
+        router.subscribe( DisconnectEvent.class, this );
     }
     
     
@@ -104,11 +101,11 @@
     {
         try
         {
-            AbstractSubscriber.inform( this, event ) ;
+            AbstractSubscriber.inform( this, event );
         }
         catch ( Throwable t )
         {
-            monitor.failedOnInform( this, event, t ) ;
+            monitor.failedOnInform( this, event, t );
         }
     }
 
@@ -122,8 +119,8 @@
     public void inform( InputEvent event )
     {
         // claim interest and release after asynchronous processing of event
-        event.claimInterest( this ) ;
-        enqueue( event ) ;
+        event.claimInterest( this );
+        enqueue( event );
     }
     
 
@@ -135,9 +132,27 @@
      */
     public void inform( DisconnectEvent event )
     {
-        decoders.remove( event.getClientKey() ) ;
+        decoders.remove( event.getClientKey() );
     }
-    
+
+
+    /**
+     * Temporary place holder for functionality that looks up a protocol
+     * specific StatefulDecoder.
+     *
+     * @param key the client key used to determine associated protocol
+     * @return the new stateful nonblocking protocol specific decoder
+     */
+    private StatefulDecoder createClientDecoder( ClientKey key )
+    {
+        if ( key == null )
+        {
+            throw new NullPointerException(
+                    "non null client key required to create decoder" );
+        }
+        throw new NotImplementedException( "create new decoder for client" );
+    }
+
 
     /**
      * We basically create a new client decoder and put it into a map for
@@ -148,8 +163,9 @@
      */
     public void inform( ConnectEvent event )
     {
-        ClientKey key = event.getClientKey() ;
-        StatefulDecoder decoder = new ClientDecoder( key, new MessageDecoder() ) ;
+        StatefulDecoder decoder;
+        ClientKey key = event.getClientKey();
+        decoder = new ClientDecoder( key, createClientDecoder( key ) );
 
         /*
          * Here the decoder informs us that a unit of data is decoded.  In the
@@ -162,13 +178,12 @@
             public void decodeOccurred( StatefulDecoder decoder,
                                         Object decoded )
             {
-                ClientKey key = ( ( ClientDecoder ) decoder ).getClientKey() ;
-                RequestEvent event = new RequestEvent( this, key,
-                        ( Request ) decoded );
-                router.publish( event ) ;
+                ClientKey key = ( ( ClientDecoder ) decoder ).getClientKey();
+                RequestEvent event = new RequestEvent( this, key, decoded );
+                router.publish( event );
             }
         });
-        decoders.put( key, decoder ) ;
+        decoders.put( key, decoder );
     }
 
 
@@ -178,81 +193,48 @@
 
     
     /* (non-Javadoc)
-     * @see org.apache.eve.decoder.DecoderManager#setCallback(
-     * org.apache.eve.listener.ClientKey, 
-     * org.apache.commons.codec.stateful.DecoderCallback)
-     */
-    public void setCallback( ClientKey key, DecoderCallback cb )
-    {
-        StatefulDecoder decoder = ( StatefulDecoder ) decoders.get( key ) ;
-        decoder.setCallback( cb ) ;
-    }
-
-    
-    /* (non-Javadoc)
-     * @see org.apache.eve.decoder.DecoderManager#setDecoderMonitor(
-     * org.apache.eve.listener.ClientKey, 
-     * org.apache.commons.codec.stateful.DecoderMonitor)
-     */
-    public void setDecoderMonitor( ClientKey key, DecoderMonitor monitor )
-    {
-        StatefulDecoder decoder = ( StatefulDecoder ) decoders.get( key ) ;
-        decoder.setDecoderMonitor( monitor ) ;
-    }
-
-    
-    /* (non-Javadoc)
-     * @see org.apache.eve.decoder.DecoderManager#disable(
-     * org.apache.eve.listener.ClientKey)
-     */
-    public boolean disable( ClientKey key )
-    {
-        StatefulDecoder decoder = ( StatefulDecoder ) decoders.remove( key ) ;
-        return decoder != null ;
-    }
-    
-
-    /* (non-Javadoc)
-     * @see org.apache.eve.decoder.DecoderManager#decode(
+     * @see org.apache.eve.decoder.DecoderManager#decodeNonBlocking(
      * org.apache.eve.listener.ClientKey, java.nio.ByteBuffer)
      */
-    public void decode( ClientKey key, ByteBuffer buffer ) 
+    public void decodeNonBlocking( ClientKey key, ByteBuffer buffer )
         throws DecoderException
     {
-        StatefulDecoder decoder = ( StatefulDecoder ) decoders.get( key ) ;
-        decoder.decode( buffer ) ;
+        StatefulDecoder decoder = ( StatefulDecoder ) decoders.get( key );
+        decoder.decode( buffer );
     }
 
     
     /* (non-Javadoc)
-     * @see org.apache.eve.decoder.DecoderManager#decode(java.nio.ByteBuffer)
+     * @see org.apache.eve.decoder.DecoderManager#
+     * decodeNonBlocking(java.nio.ByteBuffer)
      */
-    public Object decode( ByteBuffer buffer ) throws DecoderException
+    public Object decodeBlocking( ClientKey key, ByteBuffer buffer )
+            throws DecoderException
     {
         // replace this decoder with a real one later
-        StatefulDecoder decoder = new MessageDecoder();
+        StatefulDecoder decoder = createClientDecoder( key );
         // used array to set a value on final variable and get by compiler
-        final Object[] decoded = new Object[1] ;
+        final Object[] decoded = new Object[1];
         
         decoder.setCallback( new DecoderCallback() 
         {
             public void decodeOccurred( StatefulDecoder decoder, Object obj )
             {
-                decoded[0] = obj ;
+                decoded[0] = obj;
             }
         });
         
         // force synchronous callback 
-        decoder.decode( buffer ) ;
+        decoder.decode( buffer );
         
         // the decoded value should be set
         if ( decoded[0] == null )
         {
             throw new DecoderException( "Expected a complete encoded unit of "
-                    + "data but got a partial encoding in buffer arg" ) ;
+                    + "data but got a partial encoding in buffer arg" );
         }
         
-        return decoded[0] ;
+        return decoded[0];
     }
 
 
@@ -268,7 +250,7 @@
      */
     public DecoderManagerMonitor getMonitor()
     {
-        return monitor ;
+        return monitor;
     }
     
 
@@ -277,7 +259,7 @@
      */
     public void setMonitor( DecoderManagerMonitor monitor )
     {
-        this.monitor = monitor ;
+        this.monitor = monitor;
     }
 
 
@@ -289,6 +271,6 @@
      */
     StatefulDecoder getDecoder( ClientKey key )
     {
-        return ( StatefulDecoder ) decoders.get( key ) ;
+        return ( StatefulDecoder ) decoders.get( key );
     }
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/DefaultEncoderManager.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/DefaultEncoderManager.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/DefaultEncoderManager.java	Thu Sep  2 15:19:09 2004
@@ -14,26 +14,27 @@
  *   limitations under the License.
  *
  */
-package org.apache.eve.encoder ;
+package org.apache.eve.encoder;
 
 
 import java.nio.ByteBuffer;
 import java.util.EventObject;
 
 import org.apache.commons.codec.EncoderException;
-import org.apache.eve.encoder.EncoderManager ;
-import org.apache.eve.encoder.EncoderManagerMonitor;
-import org.apache.eve.event.AbstractSubscriber;
+import org.apache.commons.lang.NotImplementedException;
+
 import org.apache.eve.event.EventRouter;
 import org.apache.eve.event.OutputEvent;
 import org.apache.eve.event.ResponseEvent;
 import org.apache.eve.event.ResponseSubscriber;
+import org.apache.eve.event.AbstractSubscriber;
+
 import org.apache.eve.seda.DefaultStage;
-import org.apache.eve.seda.DefaultStageConfig;
 import org.apache.eve.seda.StageHandler;
+import org.apache.eve.seda.DefaultStageConfig;
 import org.apache.eve.seda.LoggingStageMonitor;
-import org.apache.ldap.common.message.MessageEncoder;
-import org.apache.ldap.common.message.Response;
+
+import org.apache.eve.listener.ClientKey;
 
 
 /**
@@ -49,8 +50,8 @@
     implements EncoderManager, ResponseSubscriber
 {
     /** the event router used to publish and subscribe to events on */
-    private final EventRouter router ;
-    private EncoderManagerMonitor monitor ;
+    private final EventRouter router;
+    private EncoderManagerMonitor monitor;
     
     
     /**
@@ -61,11 +62,12 @@
     public DefaultEncoderManager( EventRouter router, 
                                   DefaultStageConfig config )
     {
-        super( config ) ;
-        super.setMonitor( new LoggingStageMonitor( this.getClass() ) ) ;
-        config.setHandler( new EncoderStageHandler() ) ;
-        this.router = router ;
-        this.router.subscribe( ResponseEvent.class, this ) ;
+        super( config );
+        super.setMonitor( new LoggingStageMonitor( this.getClass() ) );
+        monitor = new EncoderManagerMonitorAdapter();
+        config.setHandler( new EncoderStageHandler() );
+        this.router = router;
+        this.router.subscribe( ResponseEvent.class, this );
     }
     
     
@@ -76,11 +78,11 @@
     {
         try
         {
-            AbstractSubscriber.inform( this, event ) ;
+            AbstractSubscriber.inform( this, event );
         }
         catch( Throwable t )
         {
-            monitor.failedOnInform( this, event, t ) ;
+            monitor.failedOnInform( this, event, t );
         }
     }
     
@@ -91,18 +93,19 @@
      */
     public void inform( ResponseEvent event )
     {
-        super.enqueue( event ) ;
+        super.enqueue( event );
     }
 
 
     /* (non-Javadoc)
-     * @see org.apache.eve.encoder.EncoderManager#encode(
-     * org.apache.ldap.common.message.Response)
+     * @see org.apache.eve.encoder.EncoderManager#encode(ClientKey, Object)
      */
-    public byte[] encode( Response response ) throws EncoderException
+    public ByteBuffer encode( ClientKey key, Object response )
+            throws EncoderException
     {
-        MessageEncoder encoder = new MessageEncoder() ;
-        return encoder.encode( response ) ;
+//        MessageEncoder encoder = new MessageEncoder();
+//        return encoder.encode( response );
+        throw new NotImplementedException( "need to delegate to encoder" );
     }
     
     
@@ -114,21 +117,21 @@
          */
         public void handleEvent( EventObject generic )
         {
-            ByteBuffer buf = null ;
-            ResponseEvent event = ( ResponseEvent ) generic ;
+            ByteBuffer buf = null;
+            ResponseEvent event = ( ResponseEvent ) generic;
             
             try
             {
-                buf = ByteBuffer.wrap( encode( event.getResponse() ) ) ;
+                buf = encode( event.getClientKey(), event.getResponse() );
             }
             catch ( EncoderException e )
             {
-                monitor.failedOnEncode( DefaultEncoderManager.this, event, e ) ;
+                monitor.failedOnEncode( DefaultEncoderManager.this, event, e );
             }
             
             OutputEvent outEvent = new OutputEvent( DefaultEncoderManager.this, 
-                    event.getClientKey(), buf ) ;
-            router.publish( outEvent ) ;
+                    event.getClientKey(), buf );
+            router.publish( outEvent );
         }
     }
 }

Added: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/EncoderManagerMonitorAdapter.java
==============================================================================
--- (empty file)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/encoder/EncoderManagerMonitorAdapter.java	Thu Sep  2 15:19:09 2004
@@ -0,0 +1,48 @@
+/*
+ *   Copyright 2004 The Apache Software Foundation
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+package org.apache.eve.encoder;
+
+
+import java.util.EventObject;
+
+
+/**
+ * A minimalistic monitor adapter for the EncoderManager.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org"> Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class EncoderManagerMonitorAdapter implements EncoderManagerMonitor
+{
+    public void failedOnInform( EncoderManager manager, EventObject event,
+                                Throwable t )
+    {
+        if ( t != null )
+        {
+            t.printStackTrace();
+        }
+    }
+
+    public void failedOnEncode( EncoderManager manager, EventObject event,
+                                Throwable t )
+    {
+        if ( t != null )
+        {
+            t.printStackTrace();
+        }
+    }
+}

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/DefaultRequestProcessor.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/DefaultRequestProcessor.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/DefaultRequestProcessor.java	Thu Sep  2 15:19:09 2004
@@ -20,7 +20,7 @@
 import java.util.Iterator ;
 import java.util.EventObject ;
 
-import org.apache.commons.lang.exception.ExceptionUtils ;
+import org.apache.commons.lang.NotImplementedException;
 
 import org.apache.eve.event.EventRouter ;
 import org.apache.eve.event.RequestEvent ;
@@ -36,23 +36,6 @@
 import org.apache.eve.seda.DefaultStageConfig ;
 import org.apache.eve.seda.LoggingStageMonitor;
 
-import org.apache.ldap.common.message.Request ;
-import org.apache.ldap.common.message.Response ;
-import org.apache.ldap.common.message.LdapResult ;
-import org.apache.ldap.common.message.ResultCodeEnum ;
-import org.apache.ldap.common.message.ResultResponse ;
-import org.apache.ldap.common.message.LdapResultImpl ;
-import org.apache.ldap.common.message.MessageTypeEnum ;
-import org.apache.ldap.common.message.AddResponseImpl ;
-import org.apache.ldap.common.message.ManyReplyRequest ;
-import org.apache.ldap.common.message.BindResponseImpl ;
-import org.apache.ldap.common.message.ModifyResponseImpl ;
-import org.apache.ldap.common.message.SingleReplyRequest ;
-import org.apache.ldap.common.message.DeleteResponseImpl ;
-import org.apache.ldap.common.message.CompareResponseImpl ;
-import org.apache.ldap.common.message.ExtendedResponseImpl ;
-import org.apache.ldap.common.message.ModifyDnResponseImpl ;
-
 
 /**
  * Default RequestProcessor service implemented as a POJO.
@@ -64,7 +47,6 @@
 public class DefaultRequestProcessor extends DefaultStage
     implements RequestProcessor, RequestSubscriber
 {
-    private final HandlerRegistry hooks ;
     private final EventRouter router ;
     private RequestProcessorMonitor monitor = null ;
     
@@ -74,10 +56,8 @@
      * 
      * @param router the event router we subscribe and publish to
      * @param config the configuration for this stage 
-     * @param hooks the handler registry to use for setting the request hooks
      */
-    public DefaultRequestProcessor( EventRouter router, StageConfig config, 
-                                    HandlerRegistry hooks )
+    public DefaultRequestProcessor( EventRouter router, StageConfig config )
     {
         super( config ) ;
         
@@ -85,7 +65,6 @@
         defaultConfig.setHandler( new ProcessorStageHandler() ) ;
         super.setMonitor( new LoggingStageMonitor( getClass() ) ) ;
         
-        this.hooks = hooks ;
         this.router = router ;
         this.router.subscribe( RequestEvent.class, this ) ;
         this.monitor = new RequestProcessorMonitorAdapter() ;
@@ -123,43 +102,49 @@
         /**
          * Event handler method for processing RequestEvents.
          *
-         * @param unspecific the RequestEvent to process.
+         * @param nonspecific the RequestEvent to process.
          */
-        public void handleEvent( EventObject unspecific )
+        public void handleEvent( EventObject nonspecific )
         {
-            RequestEvent event = ( RequestEvent ) unspecific ;
-            Request request = event.getRequest() ;
+            RequestEvent event = ( RequestEvent ) nonspecific ;
             ClientKey key = event.getClientKey() ;
-            RequestHandler handler = hooks.lookup( request.getType() ) ;
 
-            if( handler == null )
-            {
-                throw new IllegalArgumentException( 
-                        "Unknown request message type: "
-                        + request.getType().getName() ) ;
-            }
+            RequestHandler handler = getProtocolHandler( event.getClientKey(),
+                    event.getRequest() );
 
             switch( handler.getHandlerType().getValue() )
             {
             case( HandlerTypeEnum.NOREPLY_VAL ):
                 NoReplyHandler noreply = ( NoReplyHandler ) handler ;
-                noreply.handle( request ) ;
+                noreply.handle( event.getRequest() ) ;
                 break ;
             case( HandlerTypeEnum.SINGLEREPLY_VAL ):
                 SingleReplyHandler single = ( SingleReplyHandler ) handler ;
-                reply( single, ( SingleReplyRequest ) request, key ) ;
+                reply( single, event.getRequest(), key ) ;
                 break ;
             case( HandlerTypeEnum.MANYREPLY_VAL ):
                 ManyReplyHandler many = ( ManyReplyHandler ) handler ;
-                reply( many, ( ManyReplyRequest ) request, key ) ;
+                reply( many, event.getRequest(), key ) ;
                 break ;
             default:
-                throw new IllegalArgumentException( "Unrecognized type: "
-                    + handler.getRequestType().getName() ) ;
+                throw new IllegalArgumentException(
+                        "Unrecognized handler type: "
+                        + handler.getHandlerType() ) ;
             }
         }
     }
-    
+
+
+    private RequestHandler getProtocolHandler( ClientKey key, Object request )
+    {
+        if ( key == null || request == null )
+        {
+            throw new NullPointerException(
+                    "both key and request must not be null" );
+        }
+        throw new NotImplementedException( "need mech to acquire handler" );
+    }
+
 
     /**
      * Handles the generation and return of multiple responses.
@@ -168,36 +153,42 @@
      * @param request the request responded to
      */
     private void reply( ManyReplyHandler handler, 
-                        ManyReplyRequest request,
+                        Object request,
                         ClientKey key )
     {
-        Response response = null ;
-        LdapResult result = null ;
+        Object response = null ;
 
         try
          {
              Iterator list = handler.handle( request ) ;
-             while ( list.hasNext() ) 
+
+             if ( handler.isResponseOrdered() )
              {
-                 response = ( Response ) list.next() ;
+                 while ( list.hasNext() )
+                 {
+                     response = list.next() ;
+
+                     // @todo: need to force serialized response processing
+                     // perhaps we need to add an isResponseOrdered or a
+                     // response sequence number for multi-part responses
+
+                     throw new NotImplementedException(
+                             "need response serialization" );
+                 }
+             }
+             else
+             {
+                 while ( list.hasNext() )
+                 {
+                     response = list.next() ;
+                     router.publish( new ResponseEvent( this, key, response ) );
+                 }
              }
          }
 
-         // If the individual handlers do not do a global catch and report this
-         // will sheild the server from complete failure on a request reporting
-         // at a minimum the stack trace that cause the request to fail.
          catch( Throwable t )
          {
              monitor.failedOnSingleReply( key, request, t ) ;
-            
-             ResultResponse resultResponse = handler.getDoneResponse( 
-                     request.getMessageId() ) ;
-             result = new LdapResultImpl( response ) ;
-             result.setMatchedDn( "" ) ;
-             result.setErrorMessage( ExceptionUtils.getFullStackTrace( t ) ) ;
-             result.setResultCode( ResultCodeEnum.OPERATIONSERROR ) ;
-             resultResponse.setLdapResult( result ) ;
-             router.publish( new ResponseEvent( this, key, resultResponse ) ) ;
          }
     }
     
@@ -208,12 +199,10 @@
      * @param handler the handler that generates the single response
      * @param request the request responded to
      */
-    private void reply( SingleReplyHandler handler, SingleReplyRequest request,
+    private void reply( SingleReplyHandler handler, Object request,
                         ClientKey key )
     {
-        int id = request.getMessageId() ;
-        LdapResult result = null ;
-        ResultResponse response = null ;
+        Object response = null ;
 
         try
         {
@@ -225,38 +214,8 @@
         // at a minimum the stack trace that cause the request to fail.
         catch( Throwable t )
         {
-            switch( request.getResponseType().getValue() )
-            {
-            case( MessageTypeEnum.ADDRESPONSE_VAL ):
-                response = new AddResponseImpl( id ) ;
-                break ;
-            case( MessageTypeEnum.BINDRESPONSE_VAL ):
-                response = new BindResponseImpl( id ) ;
-                break ;
-            case( MessageTypeEnum.COMPARERESPONSE_VAL ):
-                response = new CompareResponseImpl( id ) ;
-                break ;
-            case( MessageTypeEnum.DELRESPONSE_VAL ):
-                response = new DeleteResponseImpl( id ) ;
-                break ;
-            case( MessageTypeEnum.EXTENDEDRESP_VAL ):
-                response = new ExtendedResponseImpl( id ) ;
-                break ;
-            case( MessageTypeEnum.MODDNRESPONSE_VAL ):
-                response = new ModifyDnResponseImpl( id ) ;
-                break ;
-            case( MessageTypeEnum.MODIFYRESPONSE_VAL ):
-                response = new ModifyResponseImpl( id ) ;
-                break ;
-            }
-
             monitor.failedOnSingleReply( key, request, t ) ;
-            
-            result = new LdapResultImpl( response ) ;
-            result.setMatchedDn( "" ) ;
-            result.setErrorMessage( ExceptionUtils.getFullStackTrace( t ) ) ;
-            result.setResultCode( ResultCodeEnum.OPERATIONSERROR ) ;
-            response.setLdapResult( result ) ;
+            return;
         }
 
         router.publish( new ResponseEvent( this, key, response ) ) ;

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ManyReplyHandler.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ManyReplyHandler.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/ManyReplyHandler.java	Thu Sep  2 15:19:09 2004
@@ -19,15 +19,11 @@
 
 import java.util.Iterator ;
 
-import org.apache.ldap.common.message.ManyReplyRequest ;
-import org.apache.ldap.common.message.ResultResponse;
-
 
 /**
  * A handler for requests that can generate zero, one or more responses.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public interface ManyReplyHandler extends RequestHandler
@@ -39,12 +35,14 @@
      * @param request the request that may generate many replies
      * @return an enumeration over the responses
      */
-    Iterator handle( ManyReplyRequest request ) ;
-    
+    Iterator handle( Object request ) ;
+
     /**
-     * Gets the terminating response.
-     * 
-     * @return the finishing response that carries the result
+     * Determinates whether or not a multi-reply request's responses should be
+     * returned in sequence to a client.
+     *
+     * @return true if order of replies are required by the protocol, false
+     * if response order is insignificant.
      */
-    ResultResponse getDoneResponse( int id ) ;
+    boolean isResponseOrdered();
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/NoReplyHandler.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/NoReplyHandler.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/NoReplyHandler.java	Thu Sep  2 15:19:09 2004
@@ -17,9 +17,6 @@
 package org.apache.eve.processor ;
 
 
-import org.apache.ldap.common.message.Request ;
-
-
 /**
  * Represents handlers that do not return a response to the client.
  *
@@ -36,5 +33,5 @@
      *
      * @param request the request without a response.
      */
-    void handle( Request request ) ;
+    void handle( Object request ) ;
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestHandler.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestHandler.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestHandler.java	Thu Sep  2 15:19:09 2004
@@ -17,9 +17,6 @@
 package org.apache.eve.processor ;
 
 
-import org.apache.ldap.common.message.MessageTypeEnum ;
-
-
 /**
  * Root of all request handler types.
  *
@@ -35,11 +32,4 @@
      * @return a HandlerTypeEnum constant.
      */
     HandlerTypeEnum getHandlerType() ;
-
-    /**
-     * Gets the request message type handled by this handler.
-     *
-     * @return a MessageTypeEnum constant associated with the request message.
-     */
-    MessageTypeEnum getRequestType() ;
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestProcessorMonitorAdapter.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestProcessorMonitorAdapter.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/RequestProcessorMonitorAdapter.java	Thu Sep  2 15:19:09 2004
@@ -23,7 +23,6 @@
 
 import org.apache.eve.event.Subscriber ;
 import org.apache.eve.listener.ClientKey ;
-import org.apache.ldap.common.message.Request ;
 
 
 /**
@@ -53,7 +52,7 @@
      * (org.apache.eve.listener.ClientKey, 
      * org.apache.ldap.common.message.Request, java.lang.Throwable)
      */
-    public void failedOnSingleReply( ClientKey key, Request request, 
+    public void failedOnSingleReply( ClientKey key, Object request,
                                      Throwable t )
     {
         // @todo We should be able to email this or even post it to JIRA.
@@ -62,10 +61,10 @@
         
         StringBuffer buf = new StringBuffer() ;
         buf.append( "Encountered an operational error while processing " ) ;
-        buf.append( request.getType().getName() ) ;
+        buf.append( request ) ;
         buf.append( " request. Please report the the following server stack" );
-        buf.append( " trace to the Apache Directory Project:\n" ) ;
-        buf.append( ExceptionUtils.getFullStackTrace( t ) ) ;
+        buf.append( " trace to the Apache Directory Project.\n" ) ;
         System.err.println( buf.toString() ) ;
+        t.printStackTrace();
     }
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/SingleReplyHandler.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/SingleReplyHandler.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/java/org/apache/eve/processor/SingleReplyHandler.java	Thu Sep  2 15:19:09 2004
@@ -17,35 +17,22 @@
 package org.apache.eve.processor ;
 
 
-import org.apache.ldap.common.message.ResultResponse ;
-import org.apache.ldap.common.message.MessageTypeEnum ;
-import org.apache.ldap.common.message.SingleReplyRequest ;
-
-
 /**
  * Request handler signature for those requests that generate a single response
  * for a request.
  *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
  * @version $Rev$
  */
 public interface SingleReplyHandler
     extends RequestHandler
 {
     /**
-     * Gets the response message type for this SingleReplyHandler.
-     *
-     * @return the MessageTypeEnum constant associated with this handler.
-     */
-    MessageTypeEnum getResponseType() ;
-
-    /**
      * Handles a request that generates a sole response by returning the
      * response object back to the caller.
      *
      * @param request the request to handle.
      * @return the response to the request argument.
      */
-    ResultResponse handle( SingleReplyRequest request ) ;
+    Object handle( Object request ) ;
 }

Modified: incubator/directory/eve/branches/multi-listener/frontend/impl/src/test/org/apache/eve/decoder/DefaultDecoderManagerTest.java
==============================================================================
--- incubator/directory/eve/branches/multi-listener/frontend/impl/src/test/org/apache/eve/decoder/DefaultDecoderManagerTest.java	(original)
+++ incubator/directory/eve/branches/multi-listener/frontend/impl/src/test/org/apache/eve/decoder/DefaultDecoderManagerTest.java	Thu Sep  2 15:19:09 2004
@@ -17,7 +17,6 @@
 package org.apache.eve.decoder ;
 
 
-import java.nio.ByteBuffer ;
 import java.util.EventObject ;
 
 import org.apache.eve.buffer.BufferPool;
@@ -25,18 +24,13 @@
 import org.apache.eve.buffer.DefaultBufferPool;
 import org.apache.eve.buffer.DefaultBufferPoolConfig;
 import org.apache.eve.event.AbstractSubscriber;
-import org.apache.eve.event.ConnectEvent;
 import org.apache.eve.event.EventRouter ;
 import org.apache.eve.event.DefaultEventRouter ;
-import org.apache.eve.event.InputEvent;
 import org.apache.eve.event.RequestEvent;
 import org.apache.eve.event.RequestSubscriber;
 
 import org.apache.eve.seda.DefaultStageConfig ;
 import org.apache.eve.thread.ThreadPool;
-import org.apache.ldap.common.message.AbandonRequest;
-import org.apache.ldap.common.message.AbandonRequestImpl;
-import org.apache.ldap.common.message.MessageEncoder;
 
 import junit.framework.TestCase ;
 
@@ -123,42 +117,7 @@
         super( arg0 ) ;
     }
 
-    
-    public void testDefaultDecoderManager() throws Exception
-    {
-        AbandonRequest request = new AbandonRequestImpl( 6 ) ;
-        request.setAbandoned( 44 ) ;
-
-        MessageEncoder encoder = new MessageEncoder() ;
-        
-        byte [] encoded = encoder.encode( request ) ;
-        ByteBuffer buf = bp.getBuffer( this ) ;
-        buf.put( encoded ) ;
-        buf.flip() ;
-        
-        final BufferPool pool = bp ;
-        InputEvent e = new InputEvent( this, null, buf ) 
-        {
-            public ByteBuffer claimInterest(Object party)
-            {
-                pool.claimInterest(getBuffer(), party) ;
-                return getBuffer().asReadOnlyBuffer() ;
-            }
 
-            public void releaseInterest(Object party)
-            {
-                pool.releaseClaim(getBuffer(), party) ;
-            }
-        } ;
-        
-        bp.releaseClaim(buf, this) ;
-        router.publish( new ConnectEvent(this, null) ) ;
-        router.publish( e ) ;
-        decodeMan.stop() ;
-        assertNotNull( this.event ) ;
-    }
-    
-    
     public void inform( RequestEvent event )
     {
         System.out.println( "\n\nRequestEvent Set!!!\n\n" ) ;