[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