在EJB3中,我们可以使用java反射来调用它的'方法吗?如果没有,我们可以通过传递服务名称,方法名称和适当的参数来使用Spring来调用EJB3服务方法吗?
答案 0 :(得分:2)
这里有一个简单的例子。 (我正在使用OC4J)
/* import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;*/
public static void main(String[] args) throws NamingException,
ClassNotFoundException,
NoSuchMethodException,
IllegalAccessException,
InvocationTargetException,
InstantiationException {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"oracle.j2ee.rmi.RMIInitialContextFactory");
env.put(Context.SECURITY_PRINCIPAL, "oc4jadmin");
env.put(Context.SECURITY_CREDENTIALS, "welcome");
env.put(Context.PROVIDER_URL, "ormi://127.0.0.1:23891");
InitialContext ctx = new InitialContext(env);
Object obj =
ctx.lookup("mypackagename.MyEJBInterfaceName");
Class clazz = obj.getClass();
System.out.println("Creating method...");
Method mthd = clazz.getMethod("methodsName", null); /* without parameters in this case (public void methodsName() {...}) */
System.out.println("the call...");
mthd.invoke(obj, null);
System.out.println("end...");
}
答案 1 :(得分:0)
是的,我们可以使用反射来调用EJB3方法。使用JNDI获取对该bean的引用,然后使用反射来调用。
答案 2 :(得分:0)
此代码适用于我。我用反射消耗了一个ejb。
public class UTClasesReflects {
public Object retornaInvoc(String clase, String metodo,String contexto){
Class <?> remoto=null;
Proxy ed=null;
Object obj=null;
Method me=null;
UTCargaContextos utctx=null;
try {
utctx=UTCargaContextos.instancia();
obj=utctx.retornaContexto("wls_ejb_rs");//this method return jndi context, it's the same that ctx.lookup("jndiname");
ed=(Proxy) obj;
remoto=Class.forName(clase);
me=remoto.getMethod(metodo);
byte[] val=(byte[]) me.invoke(ed);
for (int i = 0; i < val.length; i++) {
System.out.println((char)val[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
public static void main(String[] args) {
UTClasesReflects a = new UTClasesReflects();
a.retornaInvoc("org.ve.bcv.extra.cta.producers.ConsumerRespuestaRemote","buscaRespuesta","wls_ejb_rs");
}
}