2012-02-17 21 views
10

Sto cercando di iniettare un EJB con l'annotazione @EJB:WebSphere 7. Iniettare EJB da un'altra applicazione

  • quando ho iniettare un EJB in un altro EJB nello stesso orecchio funziona benissimo.
  • quando ho iniettare un EJB in un altro EJB da un altro orecchio sullo stesso server ottengo un'eccezione:

EJB ha gettato un'eccezione imprevista (non dichiarata) durante l'invocazione del metodo "sayHello" . Dati di eccezione: javax.ejb.EJBException: Iniezione errore; l'eccezione annidata è: com.ibm.ejs.container.EJBNotFoundException: EJB con interfaccia com.mycompany.myapp.ejb.test2 non presente in applicazione myapp1

sto utilizzando WebSphere 7 e EJB 3.0. Quando sto facendo una ricerca jndi, funziona perfettamente. Come faccio a far sapere al container dove iniettare i miei fagioli remoti?

myapp1.ear contiene: myapp1.jar (dove il bean è)

myapp1 bean:

package com.mycompany.myapp1.ejb.test1; 

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

bean 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 il seguente : myapp2.jar (dove è 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"; 
    } 
} 

risposta

5

Specificare il (myapp1) modulo di rilegatura quando si distribuisce l'applicazione (1, 2), o includere un META-INF/ibm-ejb-jar-bnd.xml nel client EJB. Sarebbe simile a questa:

<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> 

Il ejb-ref name="..." può essere semplificata se si utilizza @EJB(name="myrefname"). Il nome del binding può essere semplificato se myapp2.jar include un file di binding simile con un elemento <interface class="..." binding-name="..."/>.

+1

grazie, 'ibm-ejb-jar-bnd.xml' era la chiave –

+0

Potresti spiegare un po 'di più sul primo approccio (vincolante durante la distribuzione dell'applicazione)? Grazie. – MyTitle

+0

Ho aggiornato per aggiungere alcuni collegamenti a InfoCenter. Ci sono molte informazioni nell'InfoCenter, ma se vuoi risposte dettagliate, potrebbe essere più facile iniziare una nuova domanda. –

Problemi correlati