2010-08-01 4 views
6

SessionContext.getBusinessObject() jest opisane w Dokumentach w następującyW jaki sposób wartość zwracana obiektu SessionContext.getBusinessObject() różni się od słowa kluczowego "this" użytego w komponencie bean?

uzyskać obiekt, który może być używany w celu wywołania bieżący fasoli przez danego interfejsu służbowej.

Parametry: businessInterface - jeden z lokalnych interfejsów biznesowych lub zdalnych interfejsów biznesowych dla tego komponentu bean sesji.

Powraca: Obiekt biznesowy odpowiadający danemu interfejsowi biznesowemu.

Nie mogę zamiast tego użyć słowa kluczowego "this" w Javie, aby osiągnąć to samo? Jak są te różne?

Odpowiedz

14

Motywacją jest to, że większość implementacji EJB działa na serwerach proxy. Nie byłbyś zbyt daleko w myśleniu o tym, jako old-school AOP. Interfejs biznesowy jest zaimplementowany przez kontener EJB, często za pośrednictwem prostego java.lang.reflect.Proxy, a ten obiekt jest przekazywany wszystkim w systemie, którzy proszą o ejb poprzez @EJB lub wyszukiwanie JNDI.

Proxy jest podpięty do kontenera, a wszystkie połączenia na nim są kierowane bezpośrednio do kontenera, który przeprowadzi kontrolę bezpieczeństwa, rozpocznie/zatrzyma/zawiesza transakcje, wywoła przechwytywacze itd. Itd. Itd., A następnie przekazuje połączenie do instancja bean - i oczywiście czyszczenie wymagane ze względu na zgłaszane wyjątki - a następnie przekazanie wywołującej wartości zwracanej przez proxy.

Wywołanie this.foo() bezpośrednio, lub przekazanie "tego" do osoby dzwoniącej, aby można było wykonywać połączenia bezpośrednie, pominie to wszystko, a kontener zostanie skutecznie odcięty od obrazu. Metoda getBusinessObject (klasa) umożliwia instancji komponentu bean zasadniczo uzyskanie samego proxy, dzięki czemu może wywoływać własne metody i korzystać z powiązanych z nim usług zarządzania kontenerami - przechwytywacze, zarządzanie transakcjami, egzekwowanie zabezpieczeń itp.

+0

Bardzo jasne wyjaśnienie, David! Dzięki ! – stratwine

+0

Czy ktoś może również potwierdzić, że za pomocą SessionContext.getBusinessObject() gwarantujemy, że metody @Aynchroniczne będą wykonywane w różnych wątkach? –

Powiązane problemy