2012-02-17 29 views
10

estoy tratando de inyectar un EJB con la anotación @EJB:WebSphere 7. Inyectar EJB desde otra aplicación

  • cuando me inyecto un EJB en otro EJB en el mismo oído funciona bien.
  • cuando me inyecto un EJB en otro EJB de otro oído en el mismo servidor I obtener una excepción:

EJB produjo una excepción inesperada (no declarado) durante la invocación de método "sayHello" . Datos de excepción: javax.ejb.EJBException: error de inyección ; excepción anidada es: com.ibm.ejs.container.EJBNotFoundException: EJB con interfaz com.mycompany.myapp.ejb.test2 no está presente en myapp1 aplicación

estoy usando WebSphere 7 y EJB 3.0. Cuando estoy haciendo una búsqueda jndi, funciona bien. ¿Cómo informo al contenedor dónde debo inyectar mis beans remotos?

myapp1.ear contiene lo siguiente: myapp1.jar (donde el EJB es)

myapp1 EJB:

package com.mycompany.myapp1.ejb.test1; 

@Remote 
public interface HelloEjb1 { 
    public String sayHello(); 
} 

EJB Impl:

package com.mycompany.myapp.ejb.test1; 

@Stateless 
public class HelloEjbImpl1 implements HelloEjb1 { 

    @EJB 
HelloEjb2 helloEjb2; 

    @Override 
    public String sayHello() { 
     return HelloEjb2.sayHello(); 
    } 
} 

myapp2.ear contiene la siguiente : myapp2.jar (donde está el EJB)

myapp2 EJB:

package com.mycompany.myapp2.ejb.test2; 

@Remote 
public interface HelloEjb2 { 
    public String sayHello(); 
} 

EJB Impl:

package com.mycompany.myapp2.ejb.test2; 

@Stateless 
public class HelloEjbImpl2 implements HelloEjb2 { 

    @Override 
    public String sayHello() { 
     return "Hello"; 
    } 
} 

Respuesta

5

Especificar el (myapp1) módulo EJB al desplegar la aplicación (1, 2), o incluir una META-INF/ibm-ejb-jar-bnd.xml en su cliente. Se vería algo como esto:

<ejb-jar-bnd 
    xmlns="http://websphere.ibm.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd" 
    version "1.0"> 
    <session name="HelloEjbImpl1"> 
    <ejb-ref name="com.mycompany.myapp.ejb.test1/helloEjb2" 
     binding-name="myapp2/myapp2.jar/HelloEjbImpl2#com.mycompany.myapp1.ejb.test1.HelloEjb1" 
    </session> 
</ejb-jar-bnd> 

El ejb-ref name="..." puede simplificarse si se utiliza @EJB(name="myrefname"). El nombre de enlace se puede simplificar si su myapp2.jar incluye un archivo de enlace similar con un elemento <interface class="..." binding-name="..."/>.

+1

gracias, 'ibm-ejb-jar-bnd.xml' fue la clave –

+0

¿Podría explicar un poco más sobre el primer enfoque (vinculante al implementar la aplicación)? Gracias. – MyTitle

+0

He actualizado para agregar algunos enlaces de InfoCenter. Hay mucha información en el InfoCenter, pero si desea respuestas detalladas, podría ser más fácil comenzar una nueva pregunta. –

Cuestiones relacionadas