[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