1 22 package org.jboss.ejb3.remoting; 23 24 import java.io.Serializable ; 25 import java.util.Map ; 26 27 import org.jboss.aop.Dispatcher; 28 import org.jboss.aop.Advisor; 29 import org.jboss.aop.advice.Interceptor; 30 import org.jboss.aop.joinpoint.Invocation; 31 import org.jboss.serial.io.MarshalledObjectForLocalCalls; 32 import org.jboss.ejb3.Container; 33 import org.jboss.ejb3.Ejb3Registry; 34 35 41 public class IsLocalInterceptor implements Interceptor, Serializable 42 { 43 public static final String IS_LOCAL = "IS_LOCAL"; 44 public static final String IS_LOCAL_EXCEPTION = "IS_LOCAL_EXCEPTION"; 45 public String getName() 46 { 47 return getClass().getName(); 48 } 49 50 public Object invoke(Invocation invocation) throws Throwable 51 { 52 Object oid = invocation.getMetaData(Dispatcher.DISPATCHER, Dispatcher.OID); 53 Container container = Ejb3Registry.getContainer(oid.toString()); 54 if (container != null) 55 { 56 Invocation copy = (Invocation) new MarshalledObjectForLocalCalls(invocation).get(); 57 copy.getMetaData().addMetaData(IS_LOCAL, IS_LOCAL, Boolean.TRUE); 58 org.jboss.aop.joinpoint.InvocationResponse response = ((Advisor) container).dynamicInvoke(null, copy); 59 Map contextInfo = response.getContextInfo(); 60 if (contextInfo != null) 61 { 62 MarshalledObjectForLocalCalls wrappedException = (MarshalledObjectForLocalCalls) response.getContextInfo().get(IS_LOCAL_EXCEPTION); 63 if (wrappedException != null) 64 { 65 throw (Throwable ) wrappedException.get(); 66 } 67 } 68 invocation.setResponseContextInfo(response.getContextInfo()); 69 MarshalledObjectForLocalCalls wrapped = (MarshalledObjectForLocalCalls) response.getResponse(); 70 Object rtn = null; 71 if (wrapped != null) 72 { 73 rtn = wrapped.get(); 74 } 75 return rtn; 76 } 77 return invocation.invokeNext(); 78 } 79 80 } 81 | Popular Tags |