[jbosscache-commits] JBoss Cache SVN: r5539 - in core/trunk/src/main/java/org/jboss/cache: invocation and 1 other directories.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Sat Apr 12 11:34:17 EDT 2008
Author: manik.surtani at jboss.com
Date: 2008-04-12 11:34:16 -0400 (Sat, 12 Apr 2008)
New Revision: 5539
Added:
core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java
Modified:
core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
core/trunk/src/main/java/org/jboss/cache/invocation/AbstractInvocationDelegate.java
core/trunk/src/main/java/org/jboss/cache/marshall/InactiveRegionAwareRpcDispatcher.java
Log:
Added a CommandAwareRpcDispatcher
Modified: core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java 2008-04-12 15:24:21 UTC (rev 5538)
+++ core/trunk/src/main/java/org/jboss/cache/RPCManagerImpl.java 2008-04-12 15:34:16 UTC (rev 5539)
@@ -17,6 +17,7 @@
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;
@@ -269,7 +270,15 @@
// always use the InactiveRegionAwareRpcDispatcher - exceptions due to regions not being active should not propagate to remote
// nodes as errors. - Manik
- disp = new InactiveRegionAwareRpcDispatcher(channel, messageListener, new MembershipListenerAdaptor(), spi);
+ // but only if we are using region based marshalling?!??
+ if (configuration.isUseRegionBasedMarshalling())
+ {
+ disp = new InactiveRegionAwareRpcDispatcher(channel, messageListener, new MembershipListenerAdaptor(), spi);
+ }
+ else
+ {
+ disp = new CommandAwareRpcDispatcher(channel, messageListener, new MembershipListenerAdaptor(), spi);
+ }
disp.setRequestMarshaller(marshaller);
disp.setResponseMarshaller(marshaller);
Modified: core/trunk/src/main/java/org/jboss/cache/invocation/AbstractInvocationDelegate.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/invocation/AbstractInvocationDelegate.java 2008-04-12 15:24:21 UTC (rev 5538)
+++ core/trunk/src/main/java/org/jboss/cache/invocation/AbstractInvocationDelegate.java 2008-04-12 15:34:16 UTC (rev 5539)
@@ -25,7 +25,7 @@
public abstract class AbstractInvocationDelegate
{
protected Log log = LogFactory.getLog(getClass());
-
+
protected Configuration configuration;
protected InvocationContextContainer invocationContextContainer;
protected CacheLifecycleManager lifecycleManager;
@@ -53,7 +53,7 @@
* @return an Object, the generic return type for the interceptors.
* @throws Throwable in the event of problems
*/
- protected Object invoke(CacheCommand command) throws CacheException
+ public Object invoke(CacheCommand command) throws CacheException
{
assertIsConstructed();
InvocationContext ctx = invocationContextContainer.get();
Added: core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java (rev 0)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/CommandAwareRpcDispatcher.java 2008-04-12 15:34:16 UTC (rev 5539)
@@ -0,0 +1,66 @@
+package org.jboss.cache.marshall;
+
+import org.jboss.cache.commands.CacheCommand;
+import org.jboss.cache.invocation.CacheInvocationDelegate;
+import org.jgroups.Channel;
+import org.jgroups.MembershipListener;
+import org.jgroups.Message;
+import org.jgroups.MessageListener;
+import org.jgroups.blocks.RpcDispatcher;
+
+/**
+ * A JGroups RPC dispatcher that knows how to deal with {@link org.jboss.cache.commands.CacheCommand}s.
+ *
+ * @author Manik Surtani (<a href="mailto:manik at jboss.org">manik at jboss.org</a>)
+ * @since 2.2.0
+ */
+public class CommandAwareRpcDispatcher extends RpcDispatcher
+{
+ protected CacheInvocationDelegate cid;
+ protected boolean trace;
+
+ public CommandAwareRpcDispatcher(Channel channel, MessageListener l, MembershipListener l2, Object server_obj)
+ {
+ super(channel, l, l2, server_obj);
+ cid = (CacheInvocationDelegate) server_obj;
+ trace = log.isTraceEnabled();
+ }
+
+ /**
+ * Message contains a Command. Execute it against *this* object and return result.
+ */
+ @Override
+ public Object handle(Message req)
+ {
+ if (server_obj == null)
+ {
+ if (log.isErrorEnabled()) log.error("no method handler is registered. Discarding request.");
+ return null;
+ }
+
+ if (req == null || req.getLength() == 0)
+ {
+ if (log.isErrorEnabled()) log.error("message or message buffer is null");
+ return null;
+ }
+
+ try
+ {
+ CacheCommand cmd = (CacheCommand) req_marshaller.objectFromByteBuffer(req.getBuffer());
+
+ if (trace) log.trace("[sender=" + req.getSrc() + "], command: " + cmd);
+
+ return cid.invoke(cmd);
+ }
+ catch (Throwable x)
+ {
+ return x;
+ }
+ }
+
+ @Override
+ public String toString()
+ {
+ return getClass().getSimpleName() + "[Outgoing marshaller: " + req_marshaller + "; incoming marshaller: " + rsp_marshaller + "]";
+ }
+}
Modified: core/trunk/src/main/java/org/jboss/cache/marshall/InactiveRegionAwareRpcDispatcher.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/marshall/InactiveRegionAwareRpcDispatcher.java 2008-04-12 15:24:21 UTC (rev 5538)
+++ core/trunk/src/main/java/org/jboss/cache/marshall/InactiveRegionAwareRpcDispatcher.java 2008-04-12 15:34:16 UTC (rev 5539)
@@ -12,7 +12,7 @@
* @author <a href="mailto:manik at jboss.org">Manik Surtani</a>
* @since 2.0.0
*/
-public class InactiveRegionAwareRpcDispatcher extends RpcDispatcher
+public class InactiveRegionAwareRpcDispatcher extends CommandAwareRpcDispatcher
{
org.jboss.cache.marshall.Marshaller requestMarshaller;
More information about the jbosscache-commits
mailing list