Nie używaj lokalnych nazw JNDI

W aplikacjach WebLogic i JBoss element <local-jndi-name> definiuje nazwę JNDI lokalnego katalogu głównego komponentu bean w globalnym drzewie JNDI. Jest on zdefiniowany w pliku weblogic-ejb-jar.xml lub jboss.xml.

Produkt WebSphere(R) nie zezwala na odwzorowywanie lokalnych katalogów głównych na nazwy JNDI w globalnym drzewie JNDI. Zamiast tego są one odwzorowywane na drzewo JNDI lokalnego kontenera. Z tego powodu programiści muszą uzyskiwać dostęp do lokalnych komponentów EJB przy użyciu odwołania JNDI w lokalnej przestrzeni nazw, a nie nazwy JNDI w globalnej przestrzeni nazw.

Ta reguła jest wyzwalana, gdy element <local-jndi-name> zostanie znaleziony w pliku weblogic-ejb-jar.xml lub w pliku jboss.xml. Szybka poprawka jest dostępna w skanerze kodu źródłowego. Szybka poprawka przetwarza pliki Java, deskryptory wdrażania i powiązania, umożliwiając działanie tych odwołań w produkcie WebSphere.

Przetwarzane są wszystkie pakiety powiązane z aplikacją, w której znajduje się element <local-jndi-name>. Jeśli projekt EAR aplikacji nie zostanie znaleziony lub nie jest powiązany ze znalezionym projektem EJB, przetwarzany jest tylko projekt EJB. Ważną kwestią jest poprawne zdefiniowanie projektów pokrewnych.

Szybka poprawka uruchomiona w skanerze kodu źródłowego skanuje wszystkie pliki Java aplikacji, w których znajduje się element <local-jndi-name>. Poszukuje bezpośrednich wyszukiwań kontekstu lokalnej nazwy JNDI oraz wyszukiwań odwołania komponentu EJB do tej nazwy.

Jeśli na przykład lokalna nazwa JNDI to ejb/myBeanLocalHome, w poniższych przykładach kodu wyzwalane są aktualizacje kodu, deskryptorów wdrażania lub powiązań.

Przykłady wyszukiwań Java:

ctx.lookup("ejb/myBeanLocalHome");

ctx.lookup("java:comp/ejb/myBeanLocalHome");

ctx.lookup(myBeanLocalHomeNameVariable);

W pierwszym przykładzie kod Java zostanie zmieniony na ctx.lookup("java:comp/ejb/myBeanLocalHome"), co umożliwia wyszukiwanie odwołań do komponentu EJB. Pozostałe dwa przykłady kodu Java pozostają niezmienione. We wszystkich trzech przypadkach szybka poprawka aktualizuje deskryptory wdrażania i powiązania projektu.

Po wykryciu w projekcie wyszukiwania konkretnej lokalnej nazwy JNDI, gdy używana jest zmienna i nie można określić wyszukiwania, plik web.xml lub ejb-jar.xml zostanie zmodyfikowany w taki sposób, aby zawierał element <ejb-local-ref> dla komponentu bean, który zdefiniował lokalną nazwę JNDI. W przypadku projektu EJB element <ejb-local-ref> jest dodawany do każdego komponentu bean, który jest zdefiniowany w pliku ejb-jar.xml. W przypadku pliku web.xml do komponentu bean, który zdefiniował lokalną nazwę JNDI, dodawane jest jedno odwołanie. W obu tych przypadkach nazwa <ejb-local-ref> JNDI jest dodawana do pliku powiązań projektu.