[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