1 22 package org.jboss.aspects.remoting; 23 24 import java.io.ObjectStreamException ; 25 26 import org.jboss.logging.Logger; 27 import org.jboss.remoting.Client; 28 import org.jboss.remoting.InvokerLocator; 29 35 public class InvokeRemoteInterceptor implements org.jboss.aop.advice.Interceptor, java.io.Serializable 36 { 37 private static final Logger log = Logger.getLogger(InvokeRemoteInterceptor.class); 38 39 private static final long serialVersionUID = -145166951731929406L; 40 41 public static final InvokeRemoteInterceptor singleton = new InvokeRemoteInterceptor(); 42 public static final String REMOTING = "REMOTING"; 43 public static final String INVOKER_LOCATOR = "INVOKER_LOCATOR"; 44 public static final String SUBSYSTEM = "SUBSYSTEM"; 45 46 public String getName() { return "InvokeRemoteInterceptor"; } 47 48 public Object invoke(org.jboss.aop.joinpoint.Invocation invocation) throws Throwable 49 { 50 InvokerLocator locator = (InvokerLocator)invocation.getMetaData(REMOTING, INVOKER_LOCATOR); 51 if (locator == null) 52 { 53 throw new RuntimeException ("No InvokerLocator supplied. Can't invoke remotely!"); 54 } 55 String subsystem = (String )invocation.getMetaData(REMOTING, SUBSYSTEM); 56 if (subsystem == null) subsystem = "AOP"; 57 Client client = new Client(locator, subsystem); 58 59 try 60 { 61 client.connect(); 62 org.jboss.aop.joinpoint.InvocationResponse response = (org.jboss.aop.joinpoint.InvocationResponse)client.invoke(invocation, null); 63 invocation.setResponseContextInfo(response.getContextInfo()); 64 return response.getResponse(); 65 } 66 catch (Exception e) 67 { 68 StackTraceElement [] serverStackTrace; 69 if (e.getCause() != null) 70 serverStackTrace = e.getCause().getStackTrace(); 71 else 72 serverStackTrace = e.getStackTrace(); 73 74 Exception clientException = new Exception (); 75 StackTraceElement [] clientStackTrace = clientException.getStackTrace(); 76 StackTraceElement [] completeStackTrace = new StackTraceElement [serverStackTrace.length + clientStackTrace.length]; 77 System.arraycopy(serverStackTrace, 0, completeStackTrace, 0, serverStackTrace.length); 78 System.arraycopy(clientStackTrace, 0, completeStackTrace, serverStackTrace.length, clientStackTrace.length); 79 80 if (e.getCause() != null) 81 e.getCause().setStackTrace(completeStackTrace); 82 else 83 e.setStackTrace(completeStackTrace); 84 85 throw e; 86 } 87 finally 88 { 89 client.disconnect(); 90 } 91 } 92 93 Object readResolve() throws ObjectStreamException { 94 return singleton; 95 } 96 } 97 | Popular Tags |