[jboss-cvs] JBossCache/src/org/jboss/cache/marshall ...

Manik Surtani msurtani at jboss.com
Thu Nov 16 12:21:11 EST 2006


  User: msurtani
  Date: 06/11/16 12:21:11

  Added:       src/org/jboss/cache/marshall 
                        InactiveRegionAwareRpcDispatcher.java
  Log:
  Better handling of marshalling exceptions when regions are inactive
  
  Revision  Changes    Path
  1.1      date: 2006/11/16 17:21:10;  author: msurtani;  state: Exp;JBossCache/src/org/jboss/cache/marshall/InactiveRegionAwareRpcDispatcher.java
  
  Index: InactiveRegionAwareRpcDispatcher.java
  ===================================================================
  package org.jboss.cache.marshall;
  
  import org.jgroups.Channel;
  import org.jgroups.MembershipListener;
  import org.jgroups.Message;
  import org.jgroups.MessageListener;
  import org.jgroups.blocks.MethodCall;
  import org.jgroups.blocks.PullPushAdapter;
  import org.jgroups.blocks.RpcDispatcher;
  
  import java.io.Serializable;
  
  /**
   * Extends {@link org.jgroups.blocks.RpcDispatcher} and adds the possibility that the marshaller may throw {@link org.jboss.cache.marshall.InactiveRegionException}s.
   *
   * @author <a href="mailto:manik at jboss.org">Manik Surtani</a>
   * @since 2.0.0
   */
  public class InactiveRegionAwareRpcDispatcher extends RpcDispatcher
  {
     public InactiveRegionAwareRpcDispatcher(Channel channel, MessageListener l, MembershipListener l2, Object server_obj)
     {
        super(channel, l, l2, server_obj);
     }
  
     public InactiveRegionAwareRpcDispatcher(Channel channel, MessageListener l, MembershipListener l2, Object server_obj, boolean deadlock_detection)
     {
        super(channel, l, l2, server_obj, deadlock_detection);
     }
  
     public InactiveRegionAwareRpcDispatcher(Channel channel, MessageListener l, MembershipListener l2, Object server_obj, boolean deadlock_detection, boolean concurrent_processing)
     {
        super(channel, l, l2, server_obj, deadlock_detection, concurrent_processing);
     }
  
     public InactiveRegionAwareRpcDispatcher(PullPushAdapter adapter, Serializable id, MessageListener l, MembershipListener l2, Object server_obj)
     {
        super(adapter, id, l, l2, server_obj);
     }
  
     /**
      * Message contains MethodCall. Execute it against *this* object and return result.
      * Use MethodCall.invoke() to do this. Return result.
      */
     @Override
     public Object handle(Message req)
     {
        Object body = null;
        org.jgroups.blocks.MethodCall method_call;
  
        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
        {
           body = req_marshaller != null ? req_marshaller.objectFromByteBuffer(req.getBuffer()) : req.getObject();
        }
        catch (Throwable e)
        {
           if (e instanceof InactiveRegionException)
           {
              if (log.isTraceEnabled()) log.trace("Exception from marshaller: " + e.getMessage());
              return null;
           }
  
           if (log.isErrorEnabled()) log.error("exception marshalling object", e);
           return e;
        }
  
        if (body == null || !(body instanceof MethodCall))
        {
           if (log.isErrorEnabled()) log.error("message does not contain a MethodCall object");
           return null;
        }
  
        method_call = (MethodCall) body;
  
        try
        {
           if (log.isTraceEnabled())
              log.trace("[sender=" + req.getSrc() + "], method_call: " + method_call);
  
           return method_call.invoke(server_obj);
        }
        catch (Throwable x)
        {
           return x;
        }
     }
  }
  
  
  



More information about the jboss-cvs-commits mailing list