1 package net.sf.crispy.impl; 2 3 import java.lang.reflect.Method; 4 import java.util.Map; 5 import java.util.Vector; 6 7 import net.sf.crispy.Executor; 8 import net.sf.crispy.InvocationException; 9 import net.sf.crispy.InvocationStrategy; 10 import net.sf.crispy.strategy.ClassMethodMapInvocationStrategy; 11 import net.sf.crispy.util.Util; 12 13 import org.jboss.remoting.Client; 14 import org.jboss.remoting.InvokerLocator; 15 16 /** 17 * Remote-Call for JBoss remoting. 18 * 19 * @author Linke 20 * 21 */ 22 public class JBossRemotingExecutor extends Executor { 23 24 public final static String DEFAULT_URL_AND_PORT = "socket://localhost:5411"; 25 26 private Client client = null; 27 28 public String getDefaultUrlAndPort() { return DEFAULT_URL_AND_PORT; } 29 public InvocationStrategy getDefaultInvocationStrategy() { return new ClassMethodMapInvocationStrategy(); } 30 31 public Object execute(Class pvProxyClass, Object pvProxy, Method pvMethod, Object[] pvArgs) throws Exception { 32 if (client == null) { 33 InvokerLocator locator = new InvokerLocator(getUrlAndPort()); 34 client = new org.jboss.remoting.Client(locator); 35 } 36 37 Vector params = new Vector(); 38 if (pvArgs != null) { 39 for (int i = 0; i < pvArgs.length; i++) { 40 params.add(pvArgs[i]); 41 } 42 } 43 44 45 Object lvInvocationStrategy = getInvocationStrategy(); 46 if (log.isDebugEnabled()) { log.debug("InvocationStrategy from JBossRemoting client: " + lvInvocationStrategy); } 47 48 Object lvResult = null; 49 try { 50 lvResult = client.invoke(params, (Map) lvInvocationStrategy); 51 } catch (Throwable e) { 52 lvResult = new InvocationException("Problem by invoke JBossRemoting client: " + lvInvocationStrategy, e); 53 } 54 55 if (lvResult instanceof Exception) { 56 Throwable lvThrowable = Util.findDeepestThrowable((Exception) lvResult); 57 if (lvThrowable instanceof Exception) { 58 throw (Exception) lvThrowable; 59 } else { 60 throw new InvocationException("Exception in " + this.getClass().getName() + ": ", lvThrowable); 61 } 62 } 63 64 return lvResult; 65 } 66 67 }