I percorsi di bind EJB definiti dall'utente sono stati precedentemente ignorati in Liberty

Nelle versioni di Liberty precedenti alla 20.0.0.12, i bean Enterprise JavaBeans (EJB) erano collegati solo allo spazio dei nomi java:[scope]. I bean EJB non sono vincolati ad uno spazio dei nomi Java Naming and Directory Interface (JNDI) della root del server, il che significa che non è stato possibile definire i nomi di bind JNDI. Gli attributi di bind EJB che consentono di specificare il nome JNDI in WebSphere Application Server tradizionale sono stati ignorati in Liberty.

I seguenti attributi bind EJB del file ibm-ejb-jar-bnd.xml vengono ignorati Liberty.

I seguenti attributi bind EJB del file ibm-ejb-jar-bnd.xmi vengono ignorati Liberty.

Questa regola contrassegna tutti i nomi di bind JNDI ignorati nelle versioni di Liberty precedenti alla 20.0.0.12. Se l'applicazione utilizza questi nomi nelle ricerche JNDI dirette piuttosto che utilizzare i riferimenti EJB, utilizzare Liberty 20.0.0.12 o versioni successive oppure modificare la propria applicazione.

Se si utilizzano riferimenti EJB, la regola Cambio di comportamento sulle ricerche JavaBeans Enterprise nelle versioni precedenti della Liberty contrassegna eventuali nomi JNDI che devono essere convertiti nello spazio dei nomi java: se si utilizza una versione di Liberty successiva alla 20.0.0.12.

Se non si utilizzano riferimenti EJB e si utilizza una versione di Liberty successiva alla 20.0.0.12, si consiglia di utilizzare una versione più recente della Liberty o di creare un riferimento EJB utilizzando lo stesso nome JNDI e impostare il riferimento dell'EJB binding-name con al nome JNDI java:[scope]. Se non si aggiunge un riferimento EJB, è necessario eseguire la scansione del codice Java per utilizzare i nomi JNDI e convertire il nome di ricerca nel nome JNDI java:.


Esempio di migrazione EJB:

Il seguente esempio crea un riferimento EJB per consentire di migrare eventuali problemi di ricerca se non si utilizza Liberty versione 20.0.0.12 o successiva.

EJB di riferimento:

@Stateless
public class MyEJB implements MyEJBInterface {
public String sayHello(String name) {
return "Ciao" + nome + ".";
}
}

Interfaccia remota:

@Remote
public interface MyEJBInterface {
String sayHello(String name);
}

Esempi di riferimento EJB:

Di seguito sono riportati esempi che illustrano come dichiarare un riferimento EJB in Liberty. È richiesto 1a o 1b in combinazione con 2a, 2b, 3a o 3b per collegare correttamente un EJB e il suo riferimento. Ad esempio, le opzioni raccomandate sono 1a e 2b per una configurazione facile e di successo, ma se 1b è dichiarato insieme a 3b otterrai la stessa funzionalità dell'impostazione consigliata.

  1. Il riferimento stesso deve essere dichiarato usando un'annotazione all'interno della classe che fa riferimento al bean, in ejb-jar.xml o in web.xml.
    1. Annotazione EJB:
      < span class="Code"> < span class= "JavaKeyword"> classe pubblica < /span> < span class="JavaType">TestServlet< /span> {
      @EJB(name="ejb/MyEJB")
      MyEJB myEjb;
      ....
      }

    2. ejb-jar.xml and web.xml:
      < span class="Code"> < ejb-ref>
      <ejb-ref-name>ejb /MyEJB</ejb-ref-name>
      <ejb-ref-type>Sessione</ejb-ref-type>
      <remote>com.test.MyEJBInterface</remote>
      < rif - ejb>

  2. Se il bean di riferimento è nella stessa applicazione del suo riferimento, una voce ibm-ejb-jar-bnd.xml o ibm-web-bnd.xml non è necessaria. Uno dei seguenti passaggi consentirà al contenitore EJB di collegare automaticamente l'EJB e il suo riferimento se si trovano nella stessa applicazione:

    1. Se solo un bean nell'applicazione implementa l'interfaccia EJB remota, non è necessaria alcuna configurazione aggiuntiva.

    2. Se più bean nell'applicazione implementano l'interfaccia EJB remota, l'elemento beanName deve essere aggiunto all'annotazione @EJB. Se si utilizza un ejb-jar.xml o un web.xml, l'elemento <ejb-link> deve essere aggiunto all'elemento <ejb-ref> esistente. Le modifiche a 1a e 1b sono illustrate qui:
      < span classica ="Code"> < span class= "JavaKeyword"> classe pubblica < /span> TestServlet {
      @EJB(name="ejb/MyEJB" beanName="MyEJB")
      MyEJB myEjb;
      ....
      }

      < span class="Code"> < ejb-ref>
      <ejb-ref-name>ejb /MyEJB</ejb-ref-name>
      <ejb-ref-type>Sessione</ejb-ref-type>
      <remote>com.test.MyEJBInterface</remote>
      <ejb-link>MyEJB</ejb-link>
      < rif - ejb>

  3. Se il bean di riferimento si trova in un'applicazione diversa da quella di riferimento, è necessario completare uno dei seguenti passaggi per aggiungere una stringa di ricerca. Questi esempi mostrano le stringhe di ricerca per un'applicazione in esecuzione nello stesso server:

    1. Aggiungi l'elemento lookup all'annotazione @EJB. Se si utilizza un ejb-jar.xml o web.xml, l'elemento <lookup-name> deve essere aggiunto all'elemento <ejb-ref> esistente. Le modifiche a 1a e 1b sono illustrate qui:
      < span classica ="Code"> < span class= "JavaKeyword"> classe pubblica < /span> TestServlet {
      @EJB(name="ejb/MyEJB" lookup="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface")
      MyEJB myEjb;
      ....
      }

      < span class="Code"> < ejb-ref>
      <ejb-ref-name>ejb /MyEJB</ejb-ref-name>
      <ejb-ref-type>Sessione</ejb-ref-type>
      <remote>com.test.MyEJBInterface</remote>
      <lookup-name>java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface</lookup-name>
      < rif - ejb>

    2. Dichiarare l'associazione di riferimento in ibm-ejb-jar-bnd.xml or the ibm-web-bnd.xml:
      < span class="Code"> < ejb - ref name="ejb/MyEJB"
      nome - bind="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface" />
      L'attributo lookup, lookup-name o binding-name può essere utilizzato facoltativamente per referenziare EJB nella stessa applicazione. In tal caso, il valore può essere impostato su qualsiasi richiesta di EJB diretta applicabile descritta alla fine di questa pagina.

Di seguito è riportata la ricerca finale del riferimento EJB:

< span class="Code"> < span class= "JavaKeyword"> classe pubblica < /span> TestEJBClient {
public static void main(String[] args) {
....
MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:comp/env/ejb/MyEJB");
}
}

In alternativa, ci sono tre opzioni per cercare direttamente un EJB, non usando un riferimento EJB:

  1. Quando un bean si trova nello stesso modulo del suo riferimento:
    < span class="Code"> < span class= "JavaKeyword"> classe pubblica < /span> TestEJBClient {
    public static void main(String[] args) {
    ....
    MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:module/MyEJB!com.test.MyEJBInterface");
    }
    }

  2. Quando un bean si trova nella stessa applicazione del suo riferimento:
    < span class="Code"> < span class= "JavaKeyword"> classe pubblica < /span> TestEJBClient {
    public static void main(String[] args) {
    ....
    MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:app/moduleA/MyEJB!com.test.MyEJBInterface");
    }
    }

  3. Quando la definizione del bean deve essere trovata globalmente all'interno dello stesso server:
    < span class="Code"> < span class= "JavaKeyword"> classe pubblica < /span> TestEJBClient {
    public static void main(String[] args) {
    ....
    MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface");
    }
    }

Per ulteriori informazioni sull'utilizzo di bind EJB, consultare Using enterprise JavaBeans with remote interfaces on Liberty e EJB 3.0 and EJB 3.1 application bindings overview.