Pregunta

Tengo una aplicación de oreja contiene dos módulos.

Módulo EJB y módulo web.

En el módulo web, estoy tratando de obtener una árbitro a algunos EJB SLSB, no uso la inyección porque la clase en la que necesito invocar el método no se gestiona.

Estoy usando el siguiente código del módulo web:

IFooBarService service = InitialContext.doLookup("IFooBarService");

Ifoobarservice: la interfaz local que definió como (en el módulo EJB):

@Local
public interface IFooBarService
{
    // ...
}

¿Me pierdo algo? (¿Debo proporcionar información del entorno?)

¿Fue útil?

Solución 2

De aquí: https://forums.oracle.com/forums/thread.jspa?threadid=476903

La solucion es:

fooBarService = (FooBarService) ((StatelessSessionDefaultLocalHome)
    new InitialContext().lookup("EJBModuleName_FooBarServiceLocal")).create();

Otros consejos

Estás seguro que IFooBarService ¿Está obligado el nombre JNDI al que está obligado el servicio de Ifoobarservice? JBoss, por ejemplo, muestra los nombres JNDI en el registro de arranque. Luego puede usarlo para fines de búsqueda.

En general, si desea que su aplicación sea portátil, no debe confiar en el mecanismo del servidor para generar nombres JNDI, ya que la especificación de Java EE tiene la suya. Deberías poder hacer:

IFooBarService service = InitialContext.doLookup("java:comp/env/IFooBarService");

Si está utilizando versiones más nuevas de Java EE (Java EE 6) y desea buscar un EJB que esté en la misma aplicación pero en un módulo diferente, puede hacer:

IFooBarService service = InitialContext.doLookup("java:app/[module name]/IFooBarService");

Más información sobre nombres estándar aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top