Вызвать EJB3 с помощью отражения - PullRequest
1 голос
/ 28 июля 2011

В EJB3, можем ли мы вызвать его метод, используя отражение Java?Если нет, можем ли мы использовать Spring для вызова метода сервиса EJB3 путем передачи имени сервиса, имени метода и параметров оценки ???

Ответы [ 3 ]

2 голосов
/ 17 апреля 2012

Здесь простой отл. (Я использую 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...");
}
0 голосов
/ 06 октября 2017

Этот код работает для меня. Я получаю 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");

}
}
0 голосов
/ 03 августа 2011

Да, мы можем вызвать метод EJB3 с помощью отражения. Использование JNDI для получения ссылки на этот компонент, а затем использование отражения для вызова.

...