1 package net.sf.crispy.impl;
2
3 import java.lang.reflect.Method;
4 import java.rmi.Naming;
5 import java.util.Vector;
6
7 import net.sf.crispy.ExceptionWrapper;
8 import net.sf.crispy.Executor;
9 import net.sf.crispy.impl.rmi.RmiInvocationHandler;
10 import net.sf.crispy.util.Invoker;
11
12 /**
13 * Remote-Call with Remote Method Invocation (RMI).
14 *
15 * @author Linke
16 */
17
18 public class RmiExecutor extends Executor {
19
20 /**
21 *
22 * @uml.property name="dEFAULT_URL_AND_PORT"
23 * @uml.associationEnd inverse=":java.lang.String" changeability="frozen" multiplicity=
24 * "(0 1)"
25 */
26 public final static String DEFAULT_URL_AND_PORT = "rmi://localhost:1098";
27
28 public final static String LOOKUP_NAME = "RmiInvocationHandler";
29
30 private RmiInvocationHandler rmiInvocationHandler = null;
31
32 public String getDefaultUrlAndPort() { return DEFAULT_URL_AND_PORT; }
33
34 public boolean withConverter() { return true; }
35
36 public Object execute(Class pvProxyClass, Object pvProxy, Method pvMethod, Object[] pvArgs) throws Exception {
37 if (rmiInvocationHandler == null) {
38 String lvLookupStr = getUrlAndPort() + "/" + LOOKUP_NAME;
39 rmiInvocationHandler = (RmiInvocationHandler) Naming.lookup(lvLookupStr);
40 }
41 Vector lvParams = Invoker.array2Vector(pvArgs);
42 Object lvReturn = rmiInvocationHandler.invoke(pvProxyClass.getName(), pvMethod.getName(), lvParams);
43
44 lvReturn = ExceptionWrapper.isResultExceptionThanThrowIt(lvReturn);
45
46 return lvReturn;
47 }
48
49 }