[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/transport/socket ...
Tom Elrod
tom.elrod at jboss.com
Mon Sep 25 22:27:52 EDT 2006
User: telrod
Date: 06/09/25 22:27:52
Modified: src/main/org/jboss/remoting/transport/socket
MicroSocketClientInvoker.java ServerThread.java
Log:
JBREM-548 & JBREM-604 & JBREM-596 - updated so oneway invocations will only send data on client (and not wait for response) and only receive data on the server (and not write out response). Also allowing socket server invoker to receive raw data from any client and send along to the handler. Finally, fixed some issues where test cases were failing due to change leasing (JBREM-596) as well as changes made to http server invoker to work with messaging.
Revision Changes Path
1.16 +15 -1 JBossRemoting/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: MicroSocketClientInvoker.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- MicroSocketClientInvoker.java 20 Sep 2006 04:22:24 -0000 1.15
+++ MicroSocketClientInvoker.java 26 Sep 2006 02:27:52 -0000 1.16
@@ -31,7 +31,7 @@
*
* @author <a href="mailto:jhaynie at vocalocity.net">Jeff Haynie</a>
* @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
- * @version $Revision: 1.15 $
+ * @version $Revision: 1.16 $
*/
public class MicroSocketClientInvoker extends RemoteClientInvoker
{
@@ -343,6 +343,20 @@
writeTime += end;
start = System.currentTimeMillis();
+ // check to see if is one way invocation and return if is
+ if(metadata != null)
+ {
+ Object val = metadata.get(org.jboss.remoting.Client.ONEWAY_FLAG);
+ if(val != null && val instanceof String && Boolean.valueOf((String)val).booleanValue())
+ {
+ if(isTraceEnabled)
+ {
+ log.trace("Oneway invocation, so not waiting for response. Returning null.");
+ }
+ return null;
+ }
+ }
+
InputStream inputStream = socketWrapper.getInputStream();
if (performVersioning)
{
1.29 +70 -8 JBossRemoting/src/main/org/jboss/remoting/transport/socket/ServerThread.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: ServerThread.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/transport/socket/ServerThread.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- ServerThread.java 23 Aug 2006 03:57:37 -0000 1.28
+++ ServerThread.java 26 Sep 2006 02:27:52 -0000 1.29
@@ -24,6 +24,8 @@
package org.jboss.remoting.transport.socket;
import org.jboss.logging.Logger;
+import org.jboss.remoting.InvocationRequest;
+import org.jboss.remoting.InvocationResponse;
import org.jboss.remoting.ServerInvoker;
import org.jboss.remoting.Version;
import org.jboss.remoting.marshal.MarshalFactory;
@@ -37,6 +39,7 @@
import java.io.OutputStream;
import java.lang.reflect.Constructor;
import java.net.Socket;
+import java.net.SocketAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.LinkedList;
@@ -55,7 +58,7 @@
*
* @author <a href="mailto:bill at jboss.org">Bill Burke</a>
* @author <a href="mailto:tom at jboss.org">Tom Elrod</a>
- * @version $Revision: 1.28 $
+ * @version $Revision: 1.29 $
*/
public class ServerThread extends Thread
{
@@ -445,21 +448,44 @@
Object obj = versionedRead(inputStream, invoker, this.getClass().getClassLoader(), version);
+ InvocationRequest req = null;
+ boolean createdInvocationRequest = false;
+ boolean isError = false;
+ if(obj instanceof InvocationRequest)
+ {
+ req = (InvocationRequest)obj;
+ }
+ else
+ {
+ req = createInvocationRequest(obj, socketWrapper);
+ createdInvocationRequest = true;
+ performVersioning = false;
+ }
+
+
Object resp = null;
try
{
// Make absolutely sure thread interrupted is cleared.
boolean interrupted = Thread.interrupted();
// call transport on the subclass, get the result to handback
- resp = invoker.invoke(obj);
+ resp = invoker.invoke(req);
}
- catch (Exception ex)
+ catch (Throwable ex)
{
resp = ex;
+ isError = true;
}
Thread.interrupted(); // clear interrupted state so we don't fail on socket writes
+ if(!isOneway(req.getRequestPayload()))
+ {
+ if(!createdInvocationRequest)
+ {
+ // need to return invocation response
+ resp = new InvocationResponse(req.getSessionId(), resp, isError, req.getReturnPayload());
+ }
OutputStream outputStream = socketWrapper.getOutputStream();
if (performVersioning)
@@ -468,10 +494,46 @@
}
versionedWrite(outputStream, invoker, this.getClass().getClassLoader(), resp, version);
-
+ }
handlingResponse = false;
}
+ private boolean isOneway(Map metadata)
+ {
+ boolean isOneway = false;
+
+ if (metadata != null)
+ {
+ Object val = metadata.get(org.jboss.remoting.Client.ONEWAY_FLAG);
+ if (val != null && val instanceof String && Boolean.valueOf((String) val).booleanValue())
+ {
+ if (isTrace)
+ {
+ log.trace("Oneway invocation, so not waiting for response. Returning null.");
+ }
+ isOneway = true;
+ }
+ }
+ return isOneway;
+ }
+
+ private InvocationRequest createInvocationRequest(Object obj, SocketWrapper socketWrapper)
+ {
+ if(obj instanceof InvocationRequest)
+ {
+ return (InvocationRequest)obj;
+ }
+ else
+ {
+ // need to wrap request with invocation request
+ SocketAddress remoteAddress = socketWrapper.getSocket().getRemoteSocketAddress();
+
+ InvocationRequest request = new InvocationRequest(remoteAddress.toString(), invoker.getSupportedSubsystems()[0], obj, null, null, null);
+ return request;
+ }
+
+ }
+
private void versionedWrite(OutputStream outputStream, SocketServerInvoker invoker,
ClassLoader classLoader, Object resp, int version) throws IOException
{
More information about the jboss-cvs-commits
mailing list