package org.jboss.proxy.ejb;
import java.lang.reflect.Method;
import java.rmi.RemoteException;
import javax.transaction.Transaction;
import org.jboss.ejb.plugins.AbstractInterceptor;
import org.jboss.invocation.Invocation;
import org.jboss.invocation.InvocationType;
import org.jboss.metadata.BeanMetaData;
import org.jboss.metadata.MetaData;
public class NoTxPropagationInterceptor extends AbstractInterceptor
{
public Object invokeHome(Invocation mi) throws Exception
{
checkNoTxPropagation(mi);
return getNext().invokeHome(mi);
}
public Object invoke(Invocation mi) throws Exception
{
checkNoTxPropagation(mi);
return getNext().invoke(mi);
}
protected void checkNoTxPropagation(Invocation mi) throws Exception
{
if (mi.isLocal())
return;
Transaction tx = mi.getTransaction();
if (tx == null || (tx instanceof ForeignTransaction) == false)
return;
byte txType = container.getBeanMetaData().getTransactionMethod(mi.getMethod(), mi.getType());
if (txType != MetaData.TX_NOT_SUPPORTED && txType != MetaData.TX_REQUIRES_NEW)
throw new RemoteException("TxPropagation is not supported: " + container.getJmxName() + " method=" + mi.getMethod());
mi.setTransaction(null);
}
}