[jbosscache-commits] JBoss Cache SVN: r5626 - in core/trunk/src/main/java/org/jboss/cache: marshall and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Tue Apr 22 12:37:15 EDT 2008


Author: manik.surtani at jboss.com
Date: 2008-04-22 12:37:15 -0400 (Tue, 22 Apr 2008)
New Revision: 5626

Removed:
   core/trunk/src/main/java/org/jboss/cache/marshall/MethodCallWrapper.java
Modified:
   core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
   core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
   core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java
Log:
Got rid of hacky MethodCallWrapper and implemented a new rpc invoke method in CommandAwareRpcDispatcher

Modified: core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java	2008-04-22 16:36:40 UTC (rev 5625)
+++ core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java	2008-04-22 16:37:15 UTC (rev 5626)
@@ -14,13 +14,15 @@
 import org.jboss.cache.config.RuntimeConfig;
 import org.jboss.cache.factories.annotations.Inject;
 import org.jboss.cache.factories.annotations.Stop;
+import org.jboss.cache.invocation.CacheLifecycleManager;
+import org.jboss.cache.invocation.InterceptorChain;
+import org.jboss.cache.invocation.InvocationContextContainer;
 import org.jboss.cache.lock.LockUtil;
 import org.jboss.cache.lock.NodeLock;
 import org.jboss.cache.lock.TimeoutException;
 import org.jboss.cache.marshall.CommandAwareRpcDispatcher;
 import org.jboss.cache.marshall.InactiveRegionAwareRpcDispatcher;
 import org.jboss.cache.marshall.Marshaller;
-import org.jboss.cache.marshall.MethodCallWrapper;
 import org.jboss.cache.notifications.Notifier;
 import org.jboss.cache.remoting.jgroups.ChannelMessageListener;
 import org.jboss.cache.statetransfer.StateTransferManager;
@@ -28,9 +30,6 @@
 import org.jboss.cache.transaction.TransactionTable;
 import org.jboss.cache.util.ThreadGate;
 import org.jboss.cache.util.reflect.ReflectionUtil;
-import org.jboss.cache.invocation.InvocationContextContainer;
-import org.jboss.cache.invocation.InterceptorChain;
-import org.jboss.cache.invocation.CacheLifecycleManager;
 import org.jgroups.Address;
 import org.jgroups.Channel;
 import org.jgroups.ChannelException;
@@ -40,7 +39,6 @@
 import org.jgroups.StateTransferException;
 import org.jgroups.View;
 import org.jgroups.blocks.GroupRequest;
-import org.jgroups.blocks.RpcDispatcher;
 import org.jgroups.blocks.RspFilter;
 import org.jgroups.util.Rsp;
 import org.jgroups.util.RspList;
@@ -76,7 +74,7 @@
    /**
     * JGroups RpcDispatcher in use.
     */
-   private RpcDispatcher disp = null;
+   private CommandAwareRpcDispatcher disp = null;
 
    /**
     * JGroups message listener.
@@ -100,7 +98,7 @@
    private void setupDependencies(ChannelMessageListener messageListener, Configuration configuration, Notifier notifier,
                                   CacheSPI spi, Marshaller marshaller, TransactionTable txTable,
                                   TransactionManager txManager, InvocationContextContainer container, InterceptorChain interceptorChain,
-                                    CacheLifecycleManager lifecycleManager)
+                                  CacheLifecycleManager lifecycleManager)
    {
       this.messageListener = messageListener;
       this.configuration = configuration;
@@ -410,10 +408,7 @@
          validMembers = new Vector<Address>(recipients);
       else
       {
-         synchronized (members)
-         {
-            validMembers = new Vector<Address>(members);
-         }
+         validMembers = new Vector<Address>(members);
       }
 
       if (excludeSelf && !validMembers.isEmpty())
@@ -439,10 +434,7 @@
 
       useOutOfBandMessage = false;
 
-      //todo check whether we can get rid of the MethodCallWrapper and use the command directly
-      rsps = responseFilter == null
-            ? disp.callRemoteMethods(validMembers, new MethodCallWrapper(command), modeToUse, timeout, isUsingBuddyReplication, useOutOfBandMessage)
-            : disp.callRemoteMethods(validMembers, new MethodCallWrapper(command), modeToUse, timeout, isUsingBuddyReplication, useOutOfBandMessage, responseFilter);
+      rsps = disp.invokeRemoteCommands(validMembers, command, modeToUse, timeout, isUsingBuddyReplication, useOutOfBandMessage, responseFilter);
 
       // a null response is 99% likely to be due to a marshalling problem - we throw a NSE, this needs to be changed when
       // JGroups supports http://jira.jboss.com/jira/browse/JGRP-193

Modified: core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java	2008-04-22 16:36:40 UTC (rev 5625)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CacheMarshaller200.java	2008-04-22 16:37:15 UTC (rev 5626)
@@ -92,9 +92,9 @@
             region = rrv.region;
             o = rrv.returnValue;
          }
-         else if (o instanceof MethodCallWrapper)
+         else if (o instanceof MarshallableCommand)
          {
-            MarshallableCommand marshallableCommand = ((MethodCallWrapper) o).getCommand();
+            MarshallableCommand marshallableCommand = (MarshallableCommand) o;
             region = extractFqnRegion(marshallableCommand);
          }
 
@@ -268,9 +268,9 @@
          out.writeByte(MAGICNUMBER_REF);
          writeReference(out, refMap.get(o));
       }
-      else if (o instanceof MethodCallWrapper || o instanceof MarshallableCommand)
+      else if (o instanceof MarshallableCommand)
       {
-         MarshallableCommand command = o instanceof MethodCallWrapper ? ((MethodCallWrapper) o).getCommand() : (MarshallableCommand) o;
+         MarshallableCommand command = (MarshallableCommand) o;
 
          if (command.getCommandId() > -1)
          {

Modified: core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java	2008-04-22 16:36:40 UTC (rev 5625)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java	2008-04-22 16:37:15 UTC (rev 5626)
@@ -2,6 +2,7 @@
 
 import org.jboss.cache.InvocationContext;
 import org.jboss.cache.commands.CacheCommand;
+import org.jboss.cache.commands.functional.MarshallableCommand;
 import org.jboss.cache.commands.remote.AnnounceBuddyPoolNameCommand;
 import org.jboss.cache.commands.remote.AssignToBuddyGroupCommand;
 import org.jboss.cache.commands.remote.DirectCommand;
@@ -9,12 +10,17 @@
 import org.jboss.cache.invocation.CacheLifecycleManager;
 import org.jboss.cache.invocation.InterceptorChain;
 import org.jboss.cache.invocation.InvocationContextContainer;
+import org.jgroups.Address;
 import org.jgroups.Channel;
 import org.jgroups.MembershipListener;
 import org.jgroups.Message;
 import org.jgroups.MessageListener;
 import org.jgroups.blocks.RpcDispatcher;
+import org.jgroups.blocks.RspFilter;
+import org.jgroups.util.RspList;
 
+import java.util.Vector;
+
 /**
  * A JGroups RPC dispatcher that knows how to deal with {@link org.jboss.cache.commands.CacheCommand}s.
  *
@@ -57,6 +63,42 @@
    }
 
    /**
+    * Similar to {@link #callRemoteMethods(java.util.Vector, org.jgroups.blocks.MethodCall, int, long, boolean, boolean, org.jgroups.blocks.RspFilter)} except that this version
+    * is aware of {@link org.jboss.cache.commands.CacheCommand} objects.
+    */
+   public RspList invokeRemoteCommands(Vector<Address> dests, MarshallableCommand command, int mode, long timeout,
+                                       boolean use_anycasting, boolean oob, RspFilter filter)
+   {
+      if (dests != null && dests.isEmpty())
+      {
+         // don't send if dest list is empty
+         if (trace) log.trace("Destination list is empty: no need to send message");
+         return new RspList();
+      }
+
+      if (trace)
+         log.trace(new StringBuilder("dests=").append(dests).append(", command=").append(command).
+               append(", mode=").append(mode).append(", timeout=").append(timeout));
+
+      byte[] buf;
+      try
+      {
+         buf = req_marshaller.objectToByteBuffer(command);
+      }
+      catch (Exception e)
+      {
+         throw new RuntimeException("failure to marshal argument(s)", e);
+      }
+
+      Message msg = new Message(null, null, buf);
+      if (oob)
+         msg.setFlag(Message.OOB);
+      RspList retval = super.castMessage(dests, msg, mode, timeout, use_anycasting, filter);
+      if (log.isTraceEnabled()) log.trace("responses: " + retval);
+      return retval;
+   }
+
+   /**
     * Message contains a Command. Execute it against *this* object and return result.
     */
    @Override

Deleted: core/trunk/src/main/java/org/jboss/cache/marshall/MethodCallWrapper.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/MethodCallWrapper.java	2008-04-22 16:36:40 UTC (rev 5625)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/MethodCallWrapper.java	2008-04-22 16:37:15 UTC (rev 5626)
@@ -1,53 +0,0 @@
-package org.jboss.cache.marshall;
-
-import org.jboss.cache.commands.functional.MarshallableCommand;
-
-import java.io.ObjectInput;
-import java.io.ObjectOutput;
-
-/**
- * This wrapper class is used when passing in {@link org.jboss.cache.commands.CacheCommand}s into JGroups RPC APIs.
- *
- * @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
- * @see org.jboss.cache.commands.CacheCommand
- * @since 2.2.0
- */
-public class MethodCallWrapper extends org.jgroups.blocks.MethodCall
-{
-   private MarshallableCommand command;
-
-   public MethodCallWrapper(MarshallableCommand command)
-   {
-      this.command = command;
-   }
-
-   public MethodCallWrapper()
-   {
-      throw new RuntimeException("Should never be invoked!");
-   }
-
-   @Override
-   public void readExternal(ObjectInput in)
-   {
-      throw new RuntimeException("Should never be invoked!");
-   }
-
-   @Override
-   public void writeExternal(ObjectOutput out)
-   {
-      throw new RuntimeException("Should never be invoked!");
-   }
-
-   public MarshallableCommand getCommand()
-   {
-      return command;
-   }
-
-   @Override
-   public String toString()
-   {
-      return "MethodCallWrapper[" +
-            "command wrapped=" + command +
-            ']';
-   }
-}




More information about the jbosscache-commits mailing list