07 stycznia 2007

Chapter 4 - Stateless Session Beans za mną

Wracam do lektury specyfikacji EJB 3 Simplified. Tym razem przyszła pora na rozdział 4 o bezstanowych komponentach sesyjnych (ang. stateless session bean - SLSB). Rozdział bardzo krótki, bo i skomplikowanie tworzenia SLSB znacznie zmalało. W międzyczasie, na półce pojawiły się kolejne, nowe pozycje o EJB3, więc muszę zakasać rękawy. Na wtorkowym spotkaniu Warszawa JUG będzie idealna sposobność zweryfikowania wiedzy ;-)

Co napisano o SLSB w rozdziale 4 specyfikacji?
  • Interfejs biznesowy SLSB to zwykły interfejs w Javie (koniec z EJBObject czy EJBLocalObject, czyli innymi słowy włączania się do hierarchii klas) Nie ma konieczności definicji interfejsu dla usługi sieciowej (ang. Web Service) - służą do tego annotacje @WebMethod dla metod oraz @WebService dla komponentu, który jest punktem styku usługi (ang. web service endpoint). Annotacje są częścią specyfikacji JSR-181.
  • Koniec z pojęciem interfejs domowy. Dostęp do komponentu poprzez DI (ang. dependency injection) albo JNDI bezpośrednio poprzez interfejs biznesowy.
  • Annotacja @Stateless lub wpis do deskryptora instalacji (koniec z javax.ejb.SessionBean)
  • Kontener informuje komponent o zdarzeniach w życiu komponentu - utworzenia i usunięcia - za pomocą metod zwrotnych komponentu oznaczonych annotacją @PostConstruct oraz @PreDestroy, odpowiednio.
    @PostConstruct wywołane zostanie po pełnym skonstruowaniu komponentu, łącznie z wstrzeleniem zależności, a przed wywołaniem pierwszej metody biznesowej. Instancja komponentu podczas wywołania metod udekorowanych @PostConstruct oraz @PreDestroy nie związana jest z żadną transakcją oraz kontekstem bezpieczeństwa.
    Metody udekorowane przez annotacje @PostActivate oraz @PrePassivate są ignorowane (nie mają racji bytu w przypadku bezstanowego komponentu sesyjnego).
  • Wstrzeliwanie zależności wykonane jest przed wywołaniem dowolnej metody biznesowej.
  • Interceptory @AroundInvoke są wspierane dla wywołań metod biznesowych. Deklaracja interceptorów odbywa się poprzez deklarację na klasie komponentu albo w klasie interceptora. W specyfikacji zaprezentowano przykład klasy komponentu z zadeklarowanymi interceptorami - AccountAudit (odnotowywanie poprawnego wykonywania metody biznesowej), Metrics (śledzenie czasu wykonania metody biznesowej) oraz CustomSecurity (weryfikacja uprawnień wykonania metody biznesowej).
  • Klient pozyskuje referencję do interfejsu biznesowego komponentu przez DI albo JNDI.