Zdefiniowane przez użytkownika położenia powiązań komponentów EJB były wcześniej ignorowane na serwerze Liberty

Na serwerze Liberty w wersjach wcześniejszych niż 20.0.0.12 komponenty EJB (Enterprise JavaBeans) były powiązane tylko z przestrzenią nazw java:[zasięg]. Komponenty EJB nie są powiązane z przestrzenią nazw JNDI (Java Naming and Directory Interface) katalogu głównego serwera, co oznacza, że nie można było zdefiniować nazw powiązań JNDI. Atrybuty powiązań komponentów EJB, które umożliwiają podanie nazwy JNDI na serwerze WebSphere Application Server traditional, były ignorowane na serwerze Liberty.

Na serwerze Liberty były ignorowane następujące atrybuty powiązań komponentów EJB z pliku ibm-ejb-jar-bnd.xml.

Na serwerze Liberty były ignorowane następujące atrybuty powiązań komponentów EJB z pliku ibm-ejb-jar-bnd.xm.

Ta reguła powoduje oznaczenie flagą wszystkich nazw powiązań JNDI, które były zignorowane na serwerze Liberty w wersjach wcześniejszych niż 20.0.0.12. Jeśli aplikacja używa tych nazw w bezpośrednich wyszukiwaniach JNDI zamiast używać odwołań do komponentów EJB, należy użyć serwera Liberty w wersji 20.0.0.12 lub nowszej lub zmodyfikować aplikację.

Jeśli używane są odwołania do komponentów EJB, reguła Zmiana zachowania w przypadku wyszukiwań komponentów EJB w poprzednich wersjach serwera Liberty oznacza wszystkie nazwy JNDI, które należy przekształcić do przestrzeni nazw java:, jeśli używana jest wersja serwera Liberty starsza niż 20.0.0.12.

Jeśli odwołania do komponentów EJB nie są używane i używane są wersje serwera Liberty starsze niż 20.0.0.12, zaleca się użycie nowszej wersji serwera Liberty lub utworzenie odwołania do komponentu EJB przy użyciu tej samej nazwy JNDI i ustawienie odwołania do komponentu EJB binding-name na nazwę JNDI java:[zasięg]. Jeśli nie dodasz odwołania do komponentu EJB, należy przeskanować kod Java pod kątem użycia tych nazw JNDI i przekształcić nazwę wyszukiwania w nazwę JNDI java:.


Przykład migracji komponentów EJB:

W poniższym przykładzie tworzone jest odwołanie do komponentu EJB ułatwiające eliminację wszystkich problemów z wyszukiwaniem, jeśli nie jest używany serwer Liberty w wersji 20.0.0.12 lub nowszej.

Przywoływany komponent EJB:

@Stateless
public class MyEJB implements MyEJBInterface {
public String sayHello(String name) {
return "Witaj tam" + nazwa + ".";
}
}

Interfejs zdalny:

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

Przykłady odwołań do komponentów EJB:

Poniżej znajdują się przykłady deklarowania odwołania do komponentu EJB na serwerze Liberty. Do pomyślnego połączenia komponentu EJB i jego odwołania wymagane jest 1a lub 1b w połączeniu z 2a, 2b, 3a lub 3b. Na przykład zalecanymi opcjami są 1a i 2b ułatwiające konfigurację, ale w przypadku zadeklarowania 1b w połączeniu z 3b dostępne będą te same funkcje, co w konfiguracji zalecanej.

  1. Samo odwołanie musi być zadeklarowane za pomocą adnotacji w klasie odwołującej się do komponentu EJB w pliku ejb-jar.xml lub web.xml.
    1. Adnotacja EJB:
      < span class="Code"> < span class= "JavaKeyword"> klasa publiczna < /span> < span class="JavaType">TestServlet< /span> {
      @EJB(name="ejb/MyEJB")
      MyEJB myEjb;
      ....
      }

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

  2. Jeśli przywoływany komponent EJB znajduje się w tej samej aplikacji, co odwołanie, wpis ibm-ejb-jar-bnd.xml lub ibm-web-bnd.xml nie jest wymagany. Jeden z następujących kroków pozwoli na to, aby kontener EJB automatycznie powiązał komponent EJB i jego odwołanie, jeśli znajdują się w tej samej aplikacji:

    1. Jeśli tylko jeden komponent bean w aplikacji implementuje zdalny interfejs EJB, nie jest wymagana żadna dodatkowa konfiguracja.

    2. Jeśli wiele komponentów bean w aplikacji implementuje zdalny interfejs komponentu EJB, do adnotacji @EJB należy dodać element beanName. Jeśli używany jest plik ejb-jar.xml lub web.xml, do istniejącego elementu <ejb-ref> należy dodać element <ejb-link>. Przedstawione są tu zmiany, które należy wprowadzić do 1a i 1b:
      < span class="Code"> < span class= "JavaKeyword"> klasa publiczna < /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>Sesja</ejb-ref-type>
      <remote>com.test.MyEJBInterface</remote>
      <ejb-link>MyEJB</ejb-link>
      < ejb-ref>

  3. Jeśli przywoływany komponent EJB znajduje się w innej aplikacji niż odwołanie, dodanie łańcucha wyszukiwania wymaga wykonania jednego z poniższych kroków. W poniższych przykładach przedstawiono łańcuchy wyszukiwania dla aplikacji działającej na tym samym serwerze:

    1. Dodaj element lookup do adnotacji @EJB. Jeśli używany jest plik ejb-jar.xml lub web.xml, do istniejącego elementu <ejb-ref> należy dodać element <ejb-ref>. Przedstawione są tu zmiany, które należy wprowadzić do 1a i 1b:
      < span class="Code"> < span class= "JavaKeyword"> klasa publiczna < /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>Sesja</ejb-ref-type>
      <remote>com.test.MyEJBInterface</remote>
      <lookup-name>java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface</lookup-name>
      < ejb-ref>

    2. Zadeklaruj powiązanie odwołania w pliku ibm-ejb-jar-bnd.xml lub ibm-web-bnd.xml:
      < span class="Code"> < ejb-ref name="ejb/MyEJB"
      binding-name="java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface" />
      W celu odwoływania się do komponentów EJB w tej samej aplikacji można opcjonalnie użyć atrybutu lookup, lookup-name lub binding-name. W takim przypadku wartość może zostać ustawiona na dowolne możliwe do zastosowania bezpośrednie wyszukiwanie EJB, które zostało opisane na końcu tej strony.

Poniżej przedstawiono ostateczne wyszukiwanie odwołania do komponentu EJB:

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

Istnieją również trzy alternatywne opcje wyszukiwania komponentu EJB bezpośrednio bez użycia odwołania do komponentu EJB:

  1. Gdy komponent bean znajduje się w tym samym module co odwołanie:
    < span class="Code"> < span class= "JavaKeyword"> klasa publiczna < /span> TestEJBClient {
    public static void main(String[] args) {
    ....
    MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:module/MyEJB!com.test.MyEJBInterface");
    }
    }

  2. Gdy komponent bean znajduje się w tej samej aplikacji co odwołanie:
    < span class="Code"> < span class= "JavaKeyword"> klasa publiczna < /span> TestEJBClient {
    public static void main(String[] args) {
    ....
    MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:app/moduleA/MyEJB!com.test.MyEJBInterface");
    }
    }

  3. Gdy definicję komponentu bean należy znaleźć globalnie na tym samym serwerze:
    < span class="Code"> < span class= "JavaKeyword"> klasa publiczna < /span> TestEJBClient {
    public static void main(String[] args) {
    ....
    MyEJBInterface myEjbInterface = (MyEJBInterface) context.lookup("java:global/MyAPP/moduleA/MyEJB!com.test.MyEJBInterface");
    }
    }

Więcej informacji o używaniu powiązań komponentów EJB zawierają tematy Używanie komponentów EJB z interfejsami zdalnymi na serwerze Liberty i Przegląd powiązań aplikacji EJB 3.0 i EJB 3.1.