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 2004/11/04 17:00:24 UTC
svn commit: rev 56602 - in incubator/directory/seda/trunk/src/java/org/apache/seda: decoder encoder event protocol
Author: trustin
Date: Thu Nov 4 08:00:23 2004
New Revision: 56602
Removed:
incubator/directory/seda/trunk/src/java/org/apache/seda/event/AddProtocolEvent.java
incubator/directory/seda/trunk/src/java/org/apache/seda/event/ProtocolEvent.java
incubator/directory/seda/trunk/src/java/org/apache/seda/event/ProtocolSubscriber.java
Modified:
incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java
incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java
incubator/directory/seda/trunk/src/java/org/apache/seda/protocol/DefaultRequestProcessor.java
Log:
Changed EncoderManager, DecoderManager, and RequestProcessor to use the InetServiceEntry.getProtocolProvider() to get an appropriate provider and its EncoderFactory, DecoderFactory, and ProtocolHandler.
Modified: incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java
==============================================================================
--- incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java (original)
+++ incubator/directory/seda/trunk/src/java/org/apache/seda/decoder/DefaultDecoderManager.java Thu Nov 4 08:00:23 2004
@@ -20,14 +20,13 @@
import java.nio.ByteBuffer;
import java.util.EventObject;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.stateful.DecoderCallback;
-import org.apache.commons.codec.stateful.DecoderFactory;
import org.apache.commons.codec.stateful.StatefulDecoder;
import org.apache.seda.event.AbstractSubscriber;
-import org.apache.seda.event.AddProtocolEvent;
import org.apache.seda.event.ConnectEvent;
import org.apache.seda.event.ConnectSubscriber;
import org.apache.seda.event.DisconnectEvent;
@@ -35,13 +34,15 @@
import org.apache.seda.event.EventRouter;
import org.apache.seda.event.InputEvent;
import org.apache.seda.event.InputSubscriber;
-import org.apache.seda.event.ProtocolEvent;
-import org.apache.seda.event.ProtocolSubscriber;
import org.apache.seda.event.RequestEvent;
import org.apache.seda.event.filter.EventTypeFilter;
import org.apache.seda.listener.ClientKey;
import org.apache.seda.listener.KeyExpiryException;
+import org.apache.seda.listener.UDPClientKey;
+import org.apache.seda.protocol.InetServiceEntry;
import org.apache.seda.protocol.InetServicesDatabase;
+import org.apache.seda.protocol.ProtocolProvider;
+import org.apache.seda.protocol.TransportTypeEnum;
import org.apache.seda.stage.DefaultStage;
import org.apache.seda.stage.LoggingStageMonitor;
import org.apache.seda.stage.StageConfig;
@@ -55,7 +56,7 @@
*/
public class DefaultDecoderManager extends DefaultStage
implements DecoderManager, InputSubscriber, ConnectSubscriber,
- ProtocolSubscriber, DisconnectSubscriber
+ DisconnectSubscriber
{
/** event router or bus this component subscribes and publishes events on */
private final EventRouter router;
@@ -91,7 +92,6 @@
router.subscribe(new EventTypeFilter(InputEvent.class), this);
router.subscribe(new EventTypeFilter(ConnectEvent.class), this);
- router.subscribe(new EventTypeFilter(ProtocolEvent.class), this);
router.subscribe(new EventTypeFilter(DisconnectEvent.class), this);
}
@@ -119,24 +119,6 @@
}
/**
- * For now this method just adds the DecoderFactory associated with the
- * protocol to a map for use when setting up new clients. Later as other
- * events besides AddProtocolEvent are supported we'll add more
- * functionality.
- *
- * @param event the protocol event to be informed of
- */
- public void inform(ProtocolEvent event)
- {
- if (event instanceof AddProtocolEvent)
- {
- factories.put(
- event.getProtocolProvider().getName(),
- event.getProtocolProvider().getDecoderFactory());
- }
- }
-
- /**
* Enqueues the event onto this Stages event queue for processing.
*
* @see org.apache.seda.event.InputSubscriber#inform(
@@ -170,13 +152,27 @@
private StatefulDecoder createDecoder(ClientKey key)
throws KeyExpiryException
{
- String proto = inetdb.getProtoByPort(key.getLocalAddress().getPort());
+ TransportTypeEnum transportType;
+ if (key instanceof UDPClientKey) {
+ transportType = TransportTypeEnum.UDP;
+ } else {
+ transportType = TransportTypeEnum.TCP;
+ }
- // FIXME Better synchronization implementation or non asynchronous event firing
- DecoderFactory factory;
- while ((factory = (DecoderFactory) factories.get(proto)) == null)
- continue;
- return factory.createDecoder();
+ Iterator it = inetdb.getByPort(key.getLocalAddress().getPort());
+ ProtocolProvider provider = null;
+ while (it.hasNext()) {
+ InetServiceEntry entry = (InetServiceEntry) it.next();
+ if (entry.getTransport() == transportType) {
+ provider = entry.getProtocolProvider();
+ }
+ }
+
+ // TODO replace RuntimeException with ProtocolProviderNotFoundException
+ if (provider == null)
+ throw new RuntimeException("No protocol provider available");
+
+ return provider.getDecoderFactory().createDecoder();
}
/**
Modified: incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java
==============================================================================
--- incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java (original)
+++ incubator/directory/seda/trunk/src/java/org/apache/seda/encoder/DefaultEncoderManager.java Thu Nov 4 08:00:23 2004
@@ -20,27 +20,29 @@
import java.nio.ByteBuffer;
import java.util.EventObject;
import java.util.HashMap;
+import java.util.Iterator;
import org.apache.commons.codec.EncoderException;
import org.apache.commons.codec.stateful.EncoderCallback;
import org.apache.commons.codec.stateful.EncoderFactory;
import org.apache.commons.codec.stateful.StatefulEncoder;
import org.apache.seda.event.AbstractSubscriber;
-import org.apache.seda.event.AddProtocolEvent;
import org.apache.seda.event.ConnectEvent;
import org.apache.seda.event.ConnectSubscriber;
import org.apache.seda.event.DisconnectEvent;
import org.apache.seda.event.DisconnectSubscriber;
import org.apache.seda.event.EventRouter;
import org.apache.seda.event.OutputEvent;
-import org.apache.seda.event.ProtocolEvent;
-import org.apache.seda.event.ProtocolSubscriber;
import org.apache.seda.event.ResponseEvent;
import org.apache.seda.event.ResponseSubscriber;
import org.apache.seda.event.filter.EventTypeFilter;
import org.apache.seda.listener.ClientKey;
import org.apache.seda.listener.KeyExpiryException;
+import org.apache.seda.listener.UDPClientKey;
+import org.apache.seda.protocol.InetServiceEntry;
import org.apache.seda.protocol.InetServicesDatabase;
+import org.apache.seda.protocol.ProtocolProvider;
+import org.apache.seda.protocol.TransportTypeEnum;
import org.apache.seda.stage.DefaultStage;
import org.apache.seda.stage.LoggingStageMonitor;
import org.apache.seda.stage.StageConfig;
@@ -56,7 +58,7 @@
*/
public class DefaultEncoderManager extends DefaultStage
implements EncoderManager, ConnectSubscriber, ResponseSubscriber,
- ProtocolSubscriber, DisconnectSubscriber
+ DisconnectSubscriber
{
/** the event router used to publish and subscribe to events on */
private final EventRouter router;
@@ -87,7 +89,6 @@
this.inetdb = inetdb;
this.router = router;
this.router.subscribe(new EventTypeFilter(ConnectEvent.class), this);
- this.router.subscribe(new EventTypeFilter(ProtocolEvent.class), this);
this.router.subscribe(new EventTypeFilter(ResponseEvent.class), this);
}
@@ -126,15 +127,6 @@
super.enqueue(event);
}
- public void inform(ProtocolEvent event)
- {
- if (event instanceof AddProtocolEvent)
- {
- factories.put(event.getProtocolProvider().getName(),
- event.getProtocolProvider().getEncoderFactory());
- }
- }
-
/**
* Temporary place holder for functionality that looks up a protocol
* specific StatefulEncoder.
@@ -145,14 +137,27 @@
private StatefulEncoder createEncoder(ClientKey key)
throws KeyExpiryException
{
- String proto = inetdb.getProtoByPort(key.getLocalAddress().getPort());
- EncoderFactory factory;
-
- // FIXME Event synchronization
- while ((factory = (EncoderFactory) factories.get(proto)) == null)
- continue;
+ TransportTypeEnum transportType;
+ if (key instanceof UDPClientKey) {
+ transportType = TransportTypeEnum.UDP;
+ } else {
+ transportType = TransportTypeEnum.TCP;
+ }
+
+ Iterator it = inetdb.getByPort(key.getLocalAddress().getPort());
+ ProtocolProvider provider = null;
+ while (it.hasNext()) {
+ InetServiceEntry entry = (InetServiceEntry) it.next();
+ if (entry.getTransport() == transportType) {
+ provider = entry.getProtocolProvider();
+ }
+ }
+
+ // TODO replace RuntimeException with ProtocolProviderNotFoundException
+ if (provider == null)
+ throw new RuntimeException("No protocol provider available");
- return factory.createEncoder();
+ return provider.getEncoderFactory().createEncoder();
}
/**
@@ -197,16 +202,7 @@
public ByteBuffer encodeBlocking(ClientKey key, Object response)
throws EncoderException
{
- int port = -1;
-
- try
- {
- port = key.getLocalAddress().getPort();
- }
- catch (KeyExpiryException e)
- {
- monitor.failedOnEncode(this, key, response, e);
- }
+ int port = key.getLocalAddress().getPort();
EncoderFactory factory =
(EncoderFactory) factories.get(inetdb.getProtoByPort(port));
Modified: incubator/directory/seda/trunk/src/java/org/apache/seda/protocol/DefaultRequestProcessor.java
==============================================================================
--- incubator/directory/seda/trunk/src/java/org/apache/seda/protocol/DefaultRequestProcessor.java (original)
+++ incubator/directory/seda/trunk/src/java/org/apache/seda/protocol/DefaultRequestProcessor.java Thu Nov 4 08:00:23 2004
@@ -18,20 +18,17 @@
package org.apache.seda.protocol;
import java.util.EventObject;
-import java.util.HashMap;
import java.util.Iterator;
-import java.util.Map;
import org.apache.seda.event.AbstractSubscriber;
import org.apache.seda.event.EventRouter;
-import org.apache.seda.event.ProtocolEvent;
-import org.apache.seda.event.ProtocolSubscriber;
import org.apache.seda.event.RequestEvent;
import org.apache.seda.event.RequestSubscriber;
import org.apache.seda.event.ResponseEvent;
import org.apache.seda.event.filter.EventTypeFilter;
import org.apache.seda.listener.ClientKey;
import org.apache.seda.listener.KeyExpiryException;
+import org.apache.seda.listener.UDPClientKey;
import org.apache.seda.stage.DefaultStage;
import org.apache.seda.stage.DefaultStageConfig;
import org.apache.seda.stage.LoggingStageMonitor;
@@ -46,9 +43,8 @@
* @version $Rev$
*/
public class DefaultRequestProcessor extends DefaultStage
- implements RequestProcessor, RequestSubscriber, ProtocolSubscriber
-{
- private final Map protocols;
+ implements RequestProcessor, RequestSubscriber {
+
private final EventRouter router;
private final InetServicesDatabase inetDb;
private RequestProcessorMonitor monitor = null;
@@ -71,8 +67,6 @@
this.inetDb = inetDb;
this.router = router;
this.router.subscribe(new EventTypeFilter(RequestEvent.class), this);
- this.router.subscribe(new EventTypeFilter(ProtocolEvent.class), this);
- this.protocols = new HashMap(3);
this.monitor = new RequestProcessorMonitorAdapter();
}
@@ -100,33 +94,29 @@
}
}
- /**
- * Informs this subscriber of a protocol event.
- *
- * @param event the protocol event to inform of
- */
- public void inform(ProtocolEvent event)
- {
- ProtocolProvider proto = event.getProtocolProvider();
- protocols.put(proto.getName(), proto);
- }
-
private RequestHandler getProtocolHandler(ClientKey key, Object request)
{
- String name = null;
-
- try
- {
- name = inetDb.getProtoByPort(key.getLocalAddress().getPort());
- }
- catch (KeyExpiryException e)
- {
- monitor.keyExpired(key, request, e);
- throw new IllegalStateException("key expired can't service req");
- }
+ TransportTypeEnum transportType;
+ if (key instanceof UDPClientKey) {
+ transportType = TransportTypeEnum.UDP;
+ } else {
+ transportType = TransportTypeEnum.TCP;
+ }
+
+ Iterator it = inetDb.getByPort(key.getLocalAddress().getPort());
+ ProtocolProvider provider = null;
+ while (it.hasNext()) {
+ InetServiceEntry entry = (InetServiceEntry) it.next();
+ if (entry.getTransport() == transportType) {
+ provider = entry.getProtocolProvider();
+ }
+ }
+
+ // TODO replace RuntimeException with ProtocolProviderNotFoundException
+ if (provider == null)
+ throw new RuntimeException("No protocol provider available");
- ProtocolProvider proto = (ProtocolProvider) protocols.get(name);
- return proto.getHandler(key, request);
+ return provider.getHandler(key, request);
}
/**
@@ -204,6 +194,7 @@
* Event handler method for processing RequestEvents.
*
* @param nonspecific the RequestEvent to process.
+ * @throws KeyExpiryException
*/
public void handleEvent(EventObject nonspecific)
{