2010-03-01 14 views
6

W Weblogic 10.3, w jaki sposób mogę wprowadzić zdalny EJB z jednego pliku EAR do bezstanowego komponentu fasoli innego EAR, przy czym oba pakiety EAR są wdrażane w tym samym kontenerze? Idealnie chciałbym zrobić jak najwięcej z adnotacjami.Jak wywołać zdalne EJB w pliku EAR od innego?

Więc załóżmy, mam następujący interfejs:

public interface HelloService { 
    public String hello(); 
} 

realizowany przez następujące EJB:

@Stateless 
@Remote 
public class HelloServiceBean implements HelloService { 
    public String hello() { 
     return "hello"; 
    } 
} 

Załóżmy są one pakowane i wdrożony w server.ear. Teraz w client.ear, mam następujący:

@Stateless 
public class HelloClientBean { 
    @EJB 
    HelloService helloService; 

// other methods... 
} 

Co muszę dodać, że tak Weblogic domyśla się poprawnie okablowanie pomiędzy HelloClientBean w client.ear i HelloServiceBean w server.ear? Wskaźniki do oficjalnych dokumentów i/lub książek są mile widziane.

+0

Bezwstydny guz. Wszystko, co do tej pory odkryłem, polega na tym, że Weblogic będzie wiązał bezpaństwowy komponent bean z adnotacją @Stateless (mappedName = "foo") na "foo # fully.qualified.interface.name" w JNDI. Ale jak powinienem dodać adnotację do mojego pola 'helloService' w' HelloClientBean'? – lindelof

Odpowiedz

4

Najprostszym rozwiązaniem, jakie znalazłem do tej pory, jest poniższe.

pierwsze, opisywanie bezstanowy fasoli z atrybutem mappedName:

@Stateless(mappedName="HelloService") 
@Remote 
public class HelloServiceBean implements HelloService { 
    public String hello() { 
     return "hello"; 
    } 
} 

Według http://forums.oracle.com/forums/thread.jspa?threadID=800314&tstart=1 WebLogic nigdy nie będzie utworzyć wpis JNDI dla EJB, chyba że nazwa JNDI jest podana jako atrybut mappedName (lub w deskryptor wdrażania lub w zastrzeżonej adnotacji).

Następnie można teraz opisywać swoje pole klienta z @EJB z atrybutem mappedName, która powinna być taka sama jak atrybutu na serwerze fasoli. (Jestem szczerze zaskoczony przez ten NameNotFoundException when calling a EJB in Weblogic 10.3 sugeruje, że powinienem być w stanie użyć składni mappedName#interfaceName, ale w moich testach to nie działa..):

@Stateless 
public class HelloClientBean { 
    @EJB(mappedName="HelloService") 
    HelloService helloService; 

// other methods... 
} 

to teraz działa tak długo, jak oba uszy wdrożone w tym samym kontenerze. Następnie postaram się znaleźć właściwą składnię, gdy zostaną wdrożone na różnych komputerach.

+0

Używanie nazw jest przydatneI działa dobrze, ale nie nadaje się do personalizacji. Każda zmiana konfiguracji wpłynie na twój kod. Konfiguracja słoika JSML EJB lub niektóre wtyczki konfiguracji/inicjowania przy uruchamianiu za pomocą CDI będą robić to samo, ale także umożliwiają ich parametryzację, zwiększając wydajność konserwacji i wdrażania. – kij

+0

EJB używające odwzorowanych nazw mogą nie być przenośne. –

Powiązane problemy