[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