[jboss-cvs] JBossAS SVN: r68665 - in projects/ejb3/trunk/ejb3-socket-inflow: src/main/java and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jan 7 18:50:12 EST 2008


Author: ALRubinger
Date: 2008-01-07 18:50:11 -0500 (Mon, 07 Jan 2008)
New Revision: 68665

Added:
   projects/ejb3/trunk/ejb3-socket-inflow/build.sh
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/HttpRequestMessage.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/ResourceAdaptorNonBlockingSocketServer.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/TestNonBlockingSocketServer.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/ResourceAdaptorHttpRequestHandlerImpl.java
Removed:
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketMessage.java
Modified:
   projects/ejb3/trunk/ejb3-socket-inflow/pom.xml
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/Main.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/NonBlockingSocketServer.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketResourceAdaptor.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/SocketBasedRequestHandler.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/CopyHttpRequestToResponseRequestHandler.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/inflow/SocketActivationSpec.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/listener/SocketMessageListener.java
   projects/ejb3/trunk/ejb3-socket-inflow/src/main/resources/META-INF/ra.xml
   projects/ejb3/trunk/ejb3-socket-inflow/src/test/java/org/jboss/ejb3/resource/adaptor/socket/test/stress/StressSocketServerTestCase.java
Log:
Working, ugly, adaptor.

Added: projects/ejb3/trunk/ejb3-socket-inflow/build.sh
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/build.sh	                        (rev 0)
+++ projects/ejb3/trunk/ejb3-socket-inflow/build.sh	2008-01-07 23:50:11 UTC (rev 68665)
@@ -0,0 +1 @@
+mvn clean compile jar:jar rar:rar install
\ No newline at end of file


Property changes on: projects/ejb3/trunk/ejb3-socket-inflow/build.sh
___________________________________________________________________
Name: svn:executable
   + *

Modified: projects/ejb3/trunk/ejb3-socket-inflow/pom.xml
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/pom.xml	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/pom.xml	2008-01-07 23:50:11 UTC (rev 68665)
@@ -18,7 +18,7 @@
   <modelVersion>4.0.0</modelVersion>
 
   <!-- Artifact Information -->
-  <groupId>org.jboss</groupId>
+  <groupId>org.jboss.ejb3</groupId>
   <artifactId>jboss-ejb3-socket-inflow</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <packaging>jar</packaging>

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/Main.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/Main.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/Main.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -1,5 +1,4 @@
-import org.jboss.ejb3.resource.adaptor.socket.NonBlockingSocketServer;
-import org.jboss.ejb3.resource.adaptor.socket.handler.http.CopyHttpRequestToResponseRequestHandler;
+import org.jboss.ejb3.resource.adaptor.socket.TestNonBlockingSocketServer;
 
 /**
  * Standalone Application to launch Server for Testing
@@ -15,7 +14,7 @@
     */
    public static void main(String[] args)
    {
-      NonBlockingSocketServer server = new NonBlockingSocketServer(new CopyHttpRequestToResponseRequestHandler());
+      TestNonBlockingSocketServer server = new TestNonBlockingSocketServer();
       server.start();
 
       while (true)

Copied: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/HttpRequestMessage.java (from rev 68634, projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketMessage.java)
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/HttpRequestMessage.java	                        (rev 0)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/HttpRequestMessage.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -0,0 +1,33 @@
+package org.jboss.ejb3.resource.adaptor.socket;
+
+/**
+ * 
+ * 
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class HttpRequestMessage
+{
+   // Instance Members
+
+   String request;
+
+   // Constructor
+
+   public HttpRequestMessage(String request)
+   {
+      this.setRequest(request);
+   }
+
+   // Accessors / Mutators
+   public String getRequest()
+   {
+      return request;
+   }
+
+   public void setRequest(String request)
+   {
+      this.request = request;
+   }
+
+}


Property changes on: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/HttpRequestMessage.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/NonBlockingSocketServer.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/NonBlockingSocketServer.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/NonBlockingSocketServer.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -31,8 +31,6 @@
 import java.nio.channels.ServerSocketChannel;
 import java.util.Set;
 
-import org.jboss.ejb3.resource.adaptor.socket.handler.RequestHandlingException;
-import org.jboss.ejb3.resource.adaptor.socket.handler.SocketBasedRequestHandler;
 import org.jboss.logging.Logger;
 
 /**
@@ -42,7 +40,7 @@
  * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
  * @version $Revision: $
  */
-public class NonBlockingSocketServer
+public abstract class NonBlockingSocketServer
 {
    // Class Members
 
@@ -57,7 +55,7 @@
    public static final int DEFAULT_BIND_PORT = 9001;
 
    /*
-    * The Default Bind Address 
+    * The Default Bind Host 
     */
    public static final InetAddress DEFAULT_BIND_HOST;
    static
@@ -84,23 +82,18 @@
 
    private ServerSocketChannel channel;
 
-   private SocketBasedRequestHandler handler;
-
    // Constructors
 
-   public NonBlockingSocketServer(SocketBasedRequestHandler handler)
+   public NonBlockingSocketServer()
    {
-      this(NonBlockingSocketServer.DEFAULT_BIND_HOST, NonBlockingSocketServer.DEFAULT_BIND_PORT, handler);
+      this(NonBlockingSocketServer.DEFAULT_BIND_HOST, NonBlockingSocketServer.DEFAULT_BIND_PORT);
    }
 
-   public NonBlockingSocketServer(InetAddress bindHost, int bindPort, SocketBasedRequestHandler handler)
+   public NonBlockingSocketServer(InetAddress bindHost, int bindPort)
    {
       // Set as not Running
       this.setRunning(false);
 
-      // Set Handler
-      this.setHandler(handler);
-
       // Set Bind Address
       this.setBindAddress(new InetSocketAddress(bindHost, bindPort));
 
@@ -116,7 +109,7 @@
    /**
     * Starts the Server
     */
-   public void start()
+   public synchronized void start()
    {
       // Only Start if not Running
       if (!this.isRunning())
@@ -231,16 +224,8 @@
                   // Accept the client channel, and get a reference to its socket                  
                   clientSocket = clientChannel.accept().socket();
 
-                  // Dispatch to handler
-                  try
-                  {
-                     handler.handleClientRequest(clientSocket);
-                  }
-                  // An error has occurred in processing the request
-                  catch (RequestHandlingException e)
-                  {
-                     throw new RuntimeException(e);
-                  }
+                  // Dispatch the client request
+                  this.dispatchClientRequest(clientSocket);
 
                }
                finally
@@ -259,6 +244,13 @@
       }
    }
 
+   /**
+    * 
+    * 
+    * @param clientSocket
+    */
+   protected abstract void dispatchClientRequest(Socket clientSocket);
+
    // Accessors / Mutators
 
    protected InetSocketAddress getBindAddress()
@@ -301,16 +293,6 @@
       this.channel = channel;
    }
 
-   protected SocketBasedRequestHandler getHandler()
-   {
-      return handler;
-   }
-
-   protected void setHandler(SocketBasedRequestHandler handler)
-   {
-      this.handler = handler;
-   }
-
    public int getNumberOfConnections()
    {
       return numberOfConnections;

Added: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/ResourceAdaptorNonBlockingSocketServer.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/ResourceAdaptorNonBlockingSocketServer.java	                        (rev 0)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/ResourceAdaptorNonBlockingSocketServer.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -0,0 +1,74 @@
+package org.jboss.ejb3.resource.adaptor.socket;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.Socket;
+
+import javax.resource.spi.work.WorkException;
+
+import org.jboss.ejb3.resource.adaptor.socket.handler.http.ResourceAdaptorHttpRequestHandlerImpl;
+import org.jboss.logging.Logger;
+
+public class ResourceAdaptorNonBlockingSocketServer extends NonBlockingSocketServer
+{
+   // Class Members
+   /*
+    * Logger
+    */
+   private static final Logger logger = Logger.getLogger(ResourceAdaptorNonBlockingSocketServer.class);
+
+   // Instance Members
+
+   private SocketResourceAdaptor ra;
+
+   // Constructors
+
+   public ResourceAdaptorNonBlockingSocketServer(SocketResourceAdaptor ra, InetAddress bindHost, int bindPort)
+   {
+      super(bindHost, bindPort);
+      this.ra = ra;
+   }
+
+   public ResourceAdaptorNonBlockingSocketServer(SocketResourceAdaptor ra)
+   {
+      this.ra = ra;
+   }
+
+   // Accessors / Mutators
+
+   public SocketResourceAdaptor getRa()
+   {
+      return ra;
+   }
+
+   public void setRa(SocketResourceAdaptor ra)
+   {
+      this.ra = ra;
+   }
+
+   // Required Implementations
+
+   @Override
+   protected void dispatchClientRequest(Socket clientSocket)
+   {
+      try
+      {
+         this.getRa().getCtx().getWorkManager().scheduleWork(
+               new ResourceAdaptorHttpRequestHandlerImpl(clientSocket, this.getRa()));
+
+         try
+         {
+            clientSocket.close();
+         }
+         // Ignore
+         catch (IOException e)
+         {
+            logger.warn(e);
+         }
+      }
+      catch (WorkException e)
+      {
+         throw new RuntimeException(e);
+      }
+   }
+}


Property changes on: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/ResourceAdaptorNonBlockingSocketServer.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Deleted: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketMessage.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketMessage.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketMessage.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -1,37 +0,0 @@
-package org.jboss.ejb3.resource.adaptor.socket;
-
-import java.net.Socket;
-
-/**
- * A SocketMessage is an incoming socket-based request from a
- * client, to be sent to the Listener for processing 
- * 
- * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
- * @version $Revision: $
- */
-public class SocketMessage
-{
-   // Instance Members
-
-   Socket socket = new Socket();
-
-   // Constructor
-
-   public SocketMessage(Socket socket)
-   {
-      this.setSocket(socket);
-   }
-
-   // Accessors / Mutators
-
-   public Socket getSocket()
-   {
-      return socket;
-   }
-
-   private void setSocket(Socket socket)
-   {
-      this.socket = socket;
-   }
-
-}

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketResourceAdaptor.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketResourceAdaptor.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/SocketResourceAdaptor.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -35,9 +35,14 @@
 import javax.resource.spi.work.WorkException;
 import javax.transaction.xa.XAResource;
 
-import org.jboss.ejb3.resource.adaptor.socket.handler.http.CopyHttpRequestToResponseRequestHandler;
 import org.jboss.ejb3.resource.adaptor.socket.inflow.SocketActivationSpec;
 
+/**
+ * A Socket Server Resource Adaptor
+ * 
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
 public class SocketResourceAdaptor implements ResourceAdapter, Work
 {
    // Class Members
@@ -45,7 +50,7 @@
    /*
     * Server to handle Socket Requests
     */
-   private static NonBlockingSocketServer server;
+   private static ResourceAdaptorNonBlockingSocketServer server;
 
    // Instance Members
    /*
@@ -56,7 +61,7 @@
    /*
     * ActivationSpec / MessageEndpoint Factories 
     */
-   private ConcurrentMap<ActivationSpec, MessageEndpointFactory> activationSpecFactories = new ConcurrentHashMap<ActivationSpec, MessageEndpointFactory>();
+   private ConcurrentMap<ActivationSpec, MessageEndpointFactory> messageEndpointFactories = new ConcurrentHashMap<ActivationSpec, MessageEndpointFactory>();
 
    // Accessors / Mutators
    public BootstrapContext getCtx()
@@ -69,9 +74,9 @@
       this.ctx = ctx;
    }
 
-   private Map<ActivationSpec, MessageEndpointFactory> getActivationSpecFactories()
+   public Map<ActivationSpec, MessageEndpointFactory> getMessageEndpointFactories()
    {
-      return activationSpecFactories;
+      return messageEndpointFactories;
    }
 
    // ResourceAdaptor Required Implementations
@@ -81,20 +86,22 @@
    {
       // Initialize
       Class<?> activationSpecType = SocketActivationSpec.class;
+
       // Ensure assignable
       if (!(activationSpecType.isAssignableFrom(activationSpec.getClass())))
       {
          throw new ResourceException("Supplied ActivationSpec must be of type " + activationSpecType.getName()
                + "; is instead of type " + activationSpec.getClass().getName());
       }
-      // Place Activation Spec into factories
-      this.getActivationSpecFactories().put(activationSpec, messageEndpointFactory);
+
+      // Place ActivationSpec/Factory
+      this.getMessageEndpointFactories().put(activationSpec, messageEndpointFactory);
    }
 
    public void endpointDeactivation(MessageEndpointFactory messageEndpointFactory, ActivationSpec activationSpec)
    {
-      // Remove ActivationSpec from factories
-      this.getActivationSpecFactories().remove(activationSpec);
+      // Remove ActivationSpec/Factory
+      this.getMessageEndpointFactories().remove(activationSpec);
    }
 
    public XAResource[] getXAResources(ActivationSpec[] activationSpec) throws ResourceException
@@ -108,31 +115,22 @@
       // Set Context
       this.setCtx(bootstrapContext);
 
-      // Create new Server
-      try
+      // If the Server has not yet been created
+      if (SocketResourceAdaptor.server == null)
       {
-         //TODO Handler from ActivationConfig properties
-         SocketResourceAdaptor.server = new NonBlockingSocketServer(CopyHttpRequestToResponseRequestHandler.class
-               .newInstance());
-      }
-      catch (InstantiationException e)
-      {
-         throw new ResourceAdapterInternalException(e);
-      }
-      catch (IllegalAccessException e)
-      {
-         throw new ResourceAdapterInternalException(e);
-      }
+         // Create new Server
+         SocketResourceAdaptor.server = new ResourceAdaptorNonBlockingSocketServer(this);
 
-      // Start the Server in own Thread
-      try
-      {
-         this.getCtx().getWorkManager().startWork(this);
+         // Start the Server in own Thread
+         try
+         {
+            this.getCtx().getWorkManager().startWork(this);
+         }
+         catch (WorkException e)
+         {
+            throw new ResourceAdapterInternalException(e);
+         }
       }
-      catch (WorkException e)
-      {
-         throw new ResourceAdapterInternalException(e);
-      }
    }
 
    public void stop()

Added: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/TestNonBlockingSocketServer.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/TestNonBlockingSocketServer.java	                        (rev 0)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/TestNonBlockingSocketServer.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -0,0 +1,37 @@
+package org.jboss.ejb3.resource.adaptor.socket;
+
+import java.net.InetAddress;
+import java.net.Socket;
+
+import org.jboss.ejb3.resource.adaptor.socket.handler.RequestHandlingException;
+import org.jboss.ejb3.resource.adaptor.socket.handler.http.CopyHttpRequestToResponseRequestHandler;
+
+public class TestNonBlockingSocketServer extends NonBlockingSocketServer
+{
+
+   public TestNonBlockingSocketServer(InetAddress bindHost, int bindPort,
+         CopyHttpRequestToResponseRequestHandler handler)
+   {
+      super(bindHost, bindPort);
+   }
+
+   public TestNonBlockingSocketServer()
+   {
+      super();
+   }
+
+   @Override
+   protected void dispatchClientRequest(Socket clientSocket)
+   {
+      try
+      {
+         CopyHttpRequestToResponseRequestHandler handler = new CopyHttpRequestToResponseRequestHandler(clientSocket);
+         handler.handleClientRequest();
+      }
+      catch (RequestHandlingException e)
+      {
+         throw new RuntimeException(e);
+      };
+
+   }
+}


Property changes on: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/TestNonBlockingSocketServer.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/SocketBasedRequestHandler.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/SocketBasedRequestHandler.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/SocketBasedRequestHandler.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -21,10 +21,8 @@
  */
 package org.jboss.ejb3.resource.adaptor.socket.handler;
 
-import java.net.Socket;
-
 /**
- * Contract defining how socket-bsaed requests from a client
+ * Contract defining how socket-based requests from a client
  * may be implemented
  * 
  * @author <a href="mailto:andrew.rubinger at redhat.com">ALR</a>
@@ -33,13 +31,9 @@
 public interface SocketBasedRequestHandler
 {
    /**
-    * Services the client request represented by the specified
-    * socket.  Typical implementations may read in request data,
-    * perform appropriate processing, and write the response, closing
-    * the socket when complete.  
-    * 
-    * @param socket
+    * Services the Client Request
+    *
     * @throws RequestHandlingException
     */
-   void handleClientRequest(Socket socket) throws RequestHandlingException;
+   void handleClientRequest() throws RequestHandlingException;
 }

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/CopyHttpRequestToResponseRequestHandler.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/CopyHttpRequestToResponseRequestHandler.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/CopyHttpRequestToResponseRequestHandler.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -39,6 +39,16 @@
 public class CopyHttpRequestToResponseRequestHandler implements SocketBasedRequestHandler
 {
 
+   // Instance Members
+
+   private Socket socket;
+
+   // Constructor
+   public CopyHttpRequestToResponseRequestHandler(Socket socket)
+   {
+      this.setSocket(socket);
+   }
+
    // Class Members
    /*
     * Byte Pattern designating HTTP Request EOF
@@ -53,7 +63,7 @@
     * @param clientSocket
     * @throws RequestHandlingException
     */
-   public void handleClientRequest(Socket clientSocket) throws RequestHandlingException
+   public void handleClientRequest() throws RequestHandlingException
    {
       // Initialize Streams
       PrintStream outStream = null;
@@ -62,8 +72,8 @@
       // Obtain Streams
       try
       {
-         outStream = new PrintStream(clientSocket.getOutputStream());
-         inStream = clientSocket.getInputStream();
+         outStream = new PrintStream(this.getSocket().getOutputStream());
+         inStream = this.getSocket().getInputStream();
 
          // Copy request content to response
          int bufferSize = 1024;
@@ -105,6 +115,20 @@
       }
    }
 
+   // Accesors / Mutators
+
+   public Socket getSocket()
+   {
+      return socket;
+   }
+
+   public void setSocket(Socket socket)
+   {
+      this.socket = socket;
+   }
+
+   // Internal Helper Methods
+
    /**
     * Returns the index of the specified pattern to find in the specified byte array, 
     * or -1 if not found 
@@ -114,7 +138,7 @@
     * @return
     */
    //TODO Should be centralized to I/O Utility
-   private static int indexOf(byte[] arrayToSearch, byte[] patternToFind)
+   public static int indexOf(byte[] arrayToSearch, byte[] patternToFind)
    {
       String toSearch = new String(arrayToSearch);
       String toFind = new String(patternToFind);

Added: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/ResourceAdaptorHttpRequestHandlerImpl.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/ResourceAdaptorHttpRequestHandlerImpl.java	                        (rev 0)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/ResourceAdaptorHttpRequestHandlerImpl.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -0,0 +1,212 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.resource.adaptor.socket.handler.http;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.Socket;
+import java.util.Set;
+
+import javax.resource.spi.ActivationSpec;
+import javax.resource.spi.UnavailableException;
+import javax.resource.spi.endpoint.MessageEndpointFactory;
+import javax.resource.spi.work.Work;
+
+import org.jboss.ejb3.resource.adaptor.socket.HttpRequestMessage;
+import org.jboss.ejb3.resource.adaptor.socket.SocketResourceAdaptor;
+import org.jboss.ejb3.resource.adaptor.socket.handler.RequestHandlingException;
+import org.jboss.ejb3.resource.adaptor.socket.handler.SocketBasedRequestHandler;
+import org.jboss.ejb3.resource.adaptor.socket.listener.SocketMessageListener;
+import org.jboss.logging.Logger;
+
+/**
+ * 
+ * 
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class ResourceAdaptorHttpRequestHandlerImpl implements SocketBasedRequestHandler, Work
+{
+
+   // Class Members
+
+   /*
+    * Logger
+    */
+   private static final Logger logger = Logger.getLogger(ResourceAdaptorHttpRequestHandlerImpl.class);
+
+   /*
+    * Byte Pattern designating HTTP Request EOF
+    */
+   public static final byte[] HTTP_REQUEST_EOF = "\r\n\r\n".getBytes();
+
+   // Instance Members
+   
+   private String requestContents;
+
+   private SocketResourceAdaptor ra;
+
+   // Constructor
+
+   public ResourceAdaptorHttpRequestHandlerImpl(Socket clientSocket, SocketResourceAdaptor ra)
+   {
+      this.setRequestContents(this.getRequest(clientSocket));
+      this.setRa(ra);
+   }
+
+   // Required Implementations
+
+   /**
+    * 
+    * 
+    * @param clientSocket
+    * @throws RequestHandlingException
+    */
+   public void handleClientRequest() throws RequestHandlingException
+   {
+      // Initialize
+      MessageEndpointFactory factory = null;
+      SocketMessageListener endpoint = null;
+
+      // Obtain all ActivationSpecs
+      Set<ActivationSpec> activationSpecs = this.getRa().getMessageEndpointFactories().keySet();
+
+      // For each ActivationSpec
+      for (ActivationSpec spec : activationSpecs)
+      {
+         // Obtain the associated EndpointFactory
+         factory = (MessageEndpointFactory) this.getRa().getMessageEndpointFactories().get(spec);
+
+         // Create the Endpoint
+         try
+         {
+            endpoint = (SocketMessageListener) factory.createEndpoint(null);
+         }
+         catch (UnavailableException e)
+         {
+            throw new RuntimeException(e);
+         }
+         
+         // Send the Message to the Endpoint
+         endpoint.onMessage(new HttpRequestMessage(this.getRequestContents()));
+
+      }
+
+   }
+
+   public void release()
+   {
+
+   }
+
+   public void run()
+   {
+      try
+      {
+         this.handleClientRequest();
+      }
+      catch (RequestHandlingException e)
+      {
+         logger.error(e);
+         throw new RuntimeException(e);
+      }
+      catch (Throwable t)
+      {
+         logger.error(t);
+      }
+   }
+
+   // Internal Helper Methods
+
+   private String getRequest(Socket clientSocket)
+   {
+      // Initialize 
+      StringBuffer sb = new StringBuffer();
+      InputStream inStream = null;
+
+      // Obtain Streams
+      try
+      {
+         inStream = clientSocket.getInputStream();
+
+         // Copy request content to response
+         int bufferSize = 1024;
+         byte[] buffer = new byte[bufferSize];
+         int i = 0;
+         while ((i = inStream.read(buffer)) != -1)
+         {
+
+            // Find HTTP EOF
+            int httpEof = CopyHttpRequestToResponseRequestHandler.indexOf(buffer,
+                  CopyHttpRequestToResponseRequestHandler.HTTP_REQUEST_EOF);
+
+            // If EOF is encountered
+            if (httpEof != -1)
+            {
+               // Print only part of buffer until EOF is reached
+               int useableSize = httpEof + CopyHttpRequestToResponseRequestHandler.HTTP_REQUEST_EOF.length;
+               byte[] newBuffer = new byte[useableSize];
+               System.arraycopy(buffer, 0, newBuffer, 0, newBuffer.length);
+               sb.append(new String(newBuffer));
+
+               // Stop
+               break;
+            }
+            // EOF not encountered
+            else
+            {
+               // Print entire buffer
+               sb.append(new String(buffer));
+            }
+         }
+
+         // Return
+         return sb.toString();
+      }
+      catch (IOException ioe)
+      {
+         throw new RuntimeException(ioe);
+      }
+   }
+
+   // Accessors / Mutators
+
+   public SocketResourceAdaptor getRa()
+   {
+      return ra;
+   }
+
+   public void setRa(SocketResourceAdaptor ra)
+   {
+      this.ra = ra;
+   }
+
+   public String getRequestContents()
+   {
+      return requestContents;
+   }
+
+   public void setRequestContents(String requestContents)
+   {
+      this.requestContents = requestContents;
+   }
+}
\ No newline at end of file


Property changes on: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/handler/http/ResourceAdaptorHttpRequestHandlerImpl.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/inflow/SocketActivationSpec.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/inflow/SocketActivationSpec.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/inflow/SocketActivationSpec.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -40,7 +40,7 @@
 public class SocketActivationSpec implements ActivationSpec, Serializable
 {
    // Class Members
-   
+
    /*
     * Serial Version UID
     */
@@ -61,13 +61,8 @@
    /*
     * Port upon which to bind Server to listen for incoming Socket Requests
     */
-   private int port;
+   private String port;
 
-   /*
-    * Handler to Service incoming client requests 
-    */
-   private String handlerClassName;
-
    // ActivationSpec Required Implementations
    public void validate() throws InvalidPropertyException
    {
@@ -77,37 +72,13 @@
          throw new InvalidPropertyException("ActivationSpec Property 'host' is required");
       }
       // Ensure Port is specified
-      if (this.getPort() == 0)
+      if (Integer.parseInt(this.getPort()) == 0)
       {
          throw new InvalidPropertyException("ActivationSpec Property 'port' is required");
       }
 
-      // Ensure Handler is specified
-      if (this.getHandlerClassName() == null || this.getHandlerClassName().equals(""))
-      {
-         throw new InvalidPropertyException("ActivationSpec Property 'handlerClassName' is required");
-      }
-
-      // Ensure Handler is Valid
-      try
-      {
-         Class.forName(this.getHandlerClassName()).newInstance();
-      }
-      catch (InstantiationException e)
-      {
-         throw new InvalidPropertyException(e);
-      }
-      catch (IllegalAccessException e)
-      {
-         throw new InvalidPropertyException(e);
-      }
-      catch (ClassNotFoundException e)
-      {
-         throw new InvalidPropertyException(e);
-      }
-
       // Create an InetSocketAddress to ensure binding is possible to properties specified
-      InetSocketAddress address = new InetSocketAddress(this.getHost(), this.getPort());
+      InetSocketAddress address = new InetSocketAddress(this.getHost(), Integer.parseInt(this.getPort()));
       // Ensure binding succeeds
       if (address.isUnresolved())
       {
@@ -126,7 +97,7 @@
    }
 
    // Accessors / Mutators
-   
+
    protected SocketResourceAdaptor getResourceAdaptor()
    {
       return resourceAdaptor;
@@ -137,33 +108,24 @@
       this.resourceAdaptor = resourceAdaptor;
    }
 
-   protected String getHost()
+   public String getHost()
    {
       return host;
    }
 
-   protected void setHost(String host)
+   public void setHost(String host)
    {
       this.host = host;
    }
 
-   protected int getPort()
+   public String getPort()
    {
       return port;
    }
 
-   protected void setPort(int port)
+   public void setPort(String port)
    {
       this.port = port;
    }
 
-   protected String getHandlerClassName()
-   {
-      return handlerClassName;
-   }
-
-   protected void setHandlerClassName(String handler)
-   {
-      this.handlerClassName = handler;
-   }
 }
\ No newline at end of file

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/listener/SocketMessageListener.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/listener/SocketMessageListener.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/java/org/jboss/ejb3/resource/adaptor/socket/listener/SocketMessageListener.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -1,6 +1,6 @@
 package org.jboss.ejb3.resource.adaptor.socket.listener;
 
-import org.jboss.ejb3.resource.adaptor.socket.SocketMessage;
+import org.jboss.ejb3.resource.adaptor.socket.HttpRequestMessage;
 
 /**
  * Listener for new Socket Messages
@@ -15,5 +15,5 @@
     * 
     * @param message
     */
-   public void onMessage(SocketMessage message);
+   public void onMessage(HttpRequestMessage message);
 }

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/main/resources/META-INF/ra.xml
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/main/resources/META-INF/ra.xml	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/main/resources/META-INF/ra.xml	2008-01-07 23:50:11 UTC (rev 68665)
@@ -47,23 +47,23 @@
     </resourceadapter-class>
 
     <!-- Default Configuration Properties 
-    <config-property>
+      <config-property>
       <config-property-name>Port</config-property-name>
       <config-property-type>java.lang.Integer</config-property-type>
       <config-property-value>9001</config-property-value>
-    </config-property>
-    <config-property>
+      </config-property>
+      <config-property>
       <config-property-name>Host</config-property-name>
       <config-property-type>java.lang.String</config-property-type>
       <config-property-value>localhost</config-property-value>
-    </config-property>
-    <config-property>
+      </config-property>
+      <config-property>
       <config-property-name>HandlerClassName</config-property-name>
       <config-property-type>java.lang.String</config-property-type>
       <config-property-value>
-        org.jboss.ejb3.resource.adaptor.socket.handler.SocketBasedRequestHandler
+      org.jboss.ejb3.resource.adaptor.socket.handler.SocketBasedRequestHandler
       </config-property-value>
-    </config-property> -->
+      </config-property> -->
 
     <!-- The Inbound Resource Adaptor -->
 
@@ -78,20 +78,11 @@
               org.jboss.ejb3.resource.adaptor.socket.inflow.SocketActivationSpec
             </activationspec-class>
             <required-config-property>
-              <config-property-name>
-                HandlerClassName
-              </config-property-name>
+              <config-property-name>host</config-property-name>
             </required-config-property>
             <required-config-property>
-              <config-property-name>
-                Host
-              </config-property-name>
+              <config-property-name>port</config-property-name>
             </required-config-property>
-            <required-config-property>
-              <config-property-name>
-                Port
-              </config-property-name>
-            </required-config-property>
           </activationspec>
         </messagelistener>
       </messageadapter>

Modified: projects/ejb3/trunk/ejb3-socket-inflow/src/test/java/org/jboss/ejb3/resource/adaptor/socket/test/stress/StressSocketServerTestCase.java
===================================================================
--- projects/ejb3/trunk/ejb3-socket-inflow/src/test/java/org/jboss/ejb3/resource/adaptor/socket/test/stress/StressSocketServerTestCase.java	2008-01-07 23:13:43 UTC (rev 68664)
+++ projects/ejb3/trunk/ejb3-socket-inflow/src/test/java/org/jboss/ejb3/resource/adaptor/socket/test/stress/StressSocketServerTestCase.java	2008-01-07 23:50:11 UTC (rev 68665)
@@ -32,6 +32,7 @@
 import junit.framework.TestCase;
 
 import org.jboss.ejb3.resource.adaptor.socket.NonBlockingSocketServer;
+import org.jboss.ejb3.resource.adaptor.socket.TestNonBlockingSocketServer;
 import org.jboss.ejb3.resource.adaptor.socket.handler.http.CopyHttpRequestToResponseRequestHandler;
 import org.junit.Test;
 
@@ -243,21 +244,21 @@
          // Call super implementation
          super.run();
          // Create new Server
-         this.setServer(new NonBlockingSocketServer(new CopyHttpRequestToResponseRequestHandler()));
+         this.setServer(new TestNonBlockingSocketServer());
          // Start Server
          this.getServer().start();
       }
 
       // Functional Methods
       public void shutdown()
-      {         
+      {
          // Delegate to Server to shutdown
          this.getServer().shutdown();
 
          // Block until shutdown
          while (this.getServer().isRunning())
          {
-            
+
          }
 
          // Stop Thread




More information about the jboss-cvs-commits mailing list