Ziarna w serwerze aplikacji

Obiekt EJB to namiastka (prokurent, proxy) komponentu EJB, ale przeznaczona do działania na stacji klienta. Ma tzw. zdalny interfejs, dokładnie taki jak powiązany z nim komponent (pozwala na wywołanie tych samych metod), chociaż nie wykonuje bezpośrednio żadnej z metod wbudowanych w komponent. Zapewnia natomiast komunikację do komponentu na serwerze i wywołanie odpowiedniej metody. To coś jak pilot zdalnego sterowania do telewizora lub magnetowidu: sam nie wykonuje czynności przewijania taśmy, ale pozwala ją wywołać.

Obiekt EJB jest tworzony podczas tworzenia komponentu przez narzędzie programistyczne do ich budowy.

Typy komponentów EJB

Istnieją dwa podstawowe typy komponentów EJB: komponent (bean) sesyjny i komponent (bean) encji.

Bean sesyjny jest związany z konkretnym klientem, nie jest trwały (nie przetrwa awarii systemu) i na ogół nie uczestniczy w transakcjach. Przykładem beanu sesyjnego może być obiekt służący do połączenia klienta z serwerem stron HTML. Gdy użytkownik nie działa przez określony czas lub odłączy połączenie z Internetem, bean ten zostaje usunięty. Może przenosić informacje od klienta do bazy danych, lecz nie reprezentuje bazy danych.

Bean encji reprezentuje trwałe dane zawarte w bazie danych. Dane w bazie są trwałe, toteż bean encji przetrwa awarię systemu. Służy również do połączenia się z wieloma klientami (a raczej ich beanami sesyjnymi). Przykładami komponentu encji są wiersz w relacyjnej bazie danych, wynik zapytania do tej bazy lub obiekt z bazy obiektowej. Koncepcyjnie bean encji zastępuje różne zapytania do bazy danych w tradycyjnym systemie klient/serwer. Pozostałe czynności w środowisku EJB wykonują beany sesyjne.

Każdy bean ma unikatowy identyfikator. Dla beanów sesyjnych zwykle będzie to nazwa komputera z numerem portu lub numer seryjny nadawany przez system. W przypadku beanów encji identyfikator ma znaczenie związane z bazą i może dotyczyć np. jej klucza głównego.

Jak działają EJB w aplikacji

Gdy stacja klienta musi przetworzyć dane, wysyła do serwera żądanie wywołania odpowiedniego komponentu EJB. Serwer powołuje instancję właściwego komponentu i przesyła do klienta obiekt będący prokurentem komponentu. Obiekt ma ten sam interfejs, co właściwy komponent, i pozwala na zdalne wywołanie jego metod. Klient używa tego obiektu, nie zdając sobie sprawy, że całą pracę wykonuje komponent na serwerze.

Komponenty EJB na serwerze są zgrupowane w klasy, mające tzw. interfejs rodzimy (home interface), który określa, w jaki sposób tworzy się, inicjalizuje, usuwa i znajduje (dotyczy tylko komponentów encji) odpowiednie komponenty EJB.

Jak klient znajduje komponent odpowiedni do jego potrzeb? W tym celu korzysta z usług nazewniczo-katalogowych (Java Naming and Directory Interface - JNDI). JNDI to ogólny zestaw funkcji API, służący do tworzenia i korzystania z dowolnych usług katalogowych systemu komputerowego, na którym działa aplikacja. Za pomocą JNDI klient znajduje interfejs rodzimy potrzebnej mu klasy, po czym wywołuje metodę tworzenia odpowiedniego komponentu. Obsługą czasu "życia" (usuwaniem komponentów), zapewnieniem właściwej przestrzeni w pamięci dla komponentu, obsługą błędów (np. brak komponentu) i innymi usługami dla niego zajmuje się kontener komponentów na serwerze.

Komponenty encji mają dodatkowy interfejs, służący do znajdowania jedynego komponentu spośród wielu istniejących encji, oparty na kluczu głównym.

Rozszerzalny serwer aplikacji

Podstawowy cel serwerowej technologii komponentów polega na uzyskaniu takiego rozwiązania, które pozwala na rozszerzanie właściwości serwera podczas działania systemu, bez konieczności restartowania go. Jak zrobić, aby zakupiony pakiet rozszerzający możliwości funkcjonalne aplikacji można było dołączyć do niej w dowolnej chwili?

Do tego celu służy właśnie zdalny interfejs, działający na stacjach klienta, korzystający z metod domenowych (usługowych) na serwerze. Serwer EJB korzysta z interfejsu JNDI do publikowania informacji o dostępnych usługach. Klient lokalizuje odpowiednią klasę komponentów i wywołuje komponent EJB o potrzebnej mu funkcjonalności. Powiązanie w czasie działania systemu (tzw. late binding) między interfejsem na serwerze a nazwami dostępnych usług pozwala na stworzenie rozszerzalnego serwera EJB.


TOP 200