[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