This topic applies only to the IBM Business Process Manager Advanced configuration.

Standardy EJB 3.0 i EJB 2.1

Standard EJB 3.0 w znaczący sposób różni się od standardu EJB 2.1. Należy być świadomym tych różnic podczas tworzenia aplikacji z powiązaniami EJB opartymi na wersji 3.0 lub późniejszej.

Standard EJB 3.0 jest ponownie przemyślaną wersją komponentów EJB (Enterprise JavaBeans), opartą na analizie coraz większych problemów, jakie programiści napotkali podczas tworzenia aplikacji przy użyciu standardu EJB. W niniejszej sekcji omawiane są wyzwania, które rozwiązuje standard EJB 3.0, różnice między standardem EJB 3.0 i jego poprzednikiem - EJB 2.1 oraz zmiany w interfejsie lokalnym komponentów EJB 3.0.

Wyzwania, które rozwiązuje standard EJB 3.0

Architektura EJB została zaprojektowana z myślą o aplikacjach zawierających rozproszone komponenty. Zanim wprowadzono standard EJB, najbardziej znanym standardem obsługującym obiekty rozproszone była architektura CORBA (Common Object Request Broker Architecture). Architektura ta jednak stała się zbyt złożona i jest postrzegana jako trudna do stosowania. Podczas rozwoju standardu EJB był on rozszerzany o wiele opcji i uzyskał reputację zbyt złożonego do używania przez programistów. Przed wprowadzeniem standardu EJB 3.0 programiści zgłosili następujące uwagi na temat komponentów EJB:

  • Trwałość zarządzana przez kontener utrudniała programowanie.
  • Nie było możliwości przetestowania modułów EJB poza kontenerem EJB.
  • Standard wymagał kilku interfejsów oraz implementowania niepotrzebnych metod.
  • Istniała konieczność implementowania interfejsów EJBObject i EJBLocalObject.
  • Konieczne było obsługiwanie wielu wyjątków.
  • Debugowanie było trudne, jeśli wykorzystywany był kontener EJB.
  • Niezbędna była szczegółowa wiedza na temat nazw JNDI.
  • Używanie deskryptora wdrażania było niewygodne.
W następnych sekcjach przedstawiono ogólny przegląd różnic między standardami EJB 3.0 i EJB 2.1. Są one punktem wyjścia do zrozumienia standardu EJB 3.0. Aby jednak poznać szczegółowo standard EJB 3.0, należy przeczytać podręcznik poświęcony tej specyfikacji. W większości bibliotek można znaleźć wiele podręczników na temat standardu EJB 3.0. Zawierają one przykłady kodu, zalecenia i wskazówki dotyczące budowania aplikacji korzystających ze standardu EJB 3.0. Poniższe odsyłacze również udostępniają pomocne informacje.

Różnice między standardami EJB 3.0 i EJB 2.1

Przez ponad dekadę komponenty EJB były podstawowym elementem używanym podczas tworzenia rozbudowanych aplikacji pisanych w języku Java. W tym czasie standard EJB rozwijał się i stał się standardową platformą do programowania, wdrażania i wykonywania rozproszonych komponentów używanych w środowiskach wielu użytkowników. Platforma zawierała usługi do monitorowania cyklu życia, realizacji współbieżności, zarządzania zasobami, obsługi transakcji, zabezpieczeń i trwałości.

W czasie, kiedy dostępna stała się wersja 2.1 architektury EJB, następujące standardowe opcje były dostępne dla programistów pracujących z komponentami EJB: komponenty bean sesji dla danych nietrwałych i komponenty bean obiektów dla danych trwałych, deskryptor wdrażania XML, lokalny lub główny interfejs (mimo że dostęp do niego mogły mieć tylko klienty wewnątrz kontenera Java 2 Platform Enterprise Edition), komponenty bean sterowane komunikatami dla komunikatów asynchronicznych oraz obsługa usług WWW, które ujawniały punkt końcowy tak, aby w razie potrzeby możliwe było wywołanie komponentu EJB. Wynikiem wprowadzenia tych opcji był jednak fakt, że programiści musieli napisać dużą ilość kodu, aby utworzyć komponent EJB. Musieli na przykład zakodować interfejs główny, interfejs komponentu, klasę komponentu bean oraz deskryptor wdrażania, który mógł być złożony dla komponentu bean obiektu. Musieli również kodować metody na potrzeby zarządzania cyklem życia, nawet jeśli nie były one wywoływane.

Standard EJB 3.0 wprowadził następujące główne zmiany, które doprowadziły do uproszczenia modelu programowania:

  • Kluczową różnicą między standardami EJB 3.0 i EJB 2.1 jest fakt, że komponenty bean obiektów zostały zastąpione zwykłymi obiektami Java (POJO), zwanymi po prostu obiektami. Obiekty POJO nie wymagają kontenera EJB, specjalnych interfejsów ani specyficznego kodu EJB.
  • Komponenty bean sesji nie wymagają już lokalnego interfejsu ani interfejsu specyficznego dla komponentu EJB.
  • Nie ma już potrzeby przechwytywania metadanych EJB w deskryptorze wdrażania XML. Można zamiast tego umieścić metadane EJB w kodzie źródłowym komponentu bean przy użyciu adnotacji. Jest to łatwiejsze dla wielu programistów. Deskryptor wdrażania XML jest nadal obsługiwany w przypadku aplikacji, w których istnieje potrzeba rozdzielenia kodu źródłowego języka Java od metadanych EJB.
  • W standardzie EJB 2.1 istniała potrzeba użycia wyszukiwania nazwy JNDI w celu uzyskania dostępu do innego komponentu EJB. W standardzie EJB 3.0 można użyć adnotacji (@EJB) w celu uzyskania dostępu do komponentu EJB, co upraszcza konfigurację.
  • Trwałość została uproszczona poprzez zastosowanie publikowanego interfejsu API trwałości języka Java, który używa standardowych operacji tworzenia, odczytywania, aktualizowania i usuwania (CRUD).
  • W przypadku standardów EJB 2.1 i JAX-RPC konfiguracja na potrzeby usług WWW była trudna, ponieważ istniała konieczność wygenerowania kodu WSDL opisującego usługę, utworzenia interfejsu punktu końcowego usługi i wykonania kilku innych czynności. Standard EJB 3.0 używający interfejsu API języka Java dla usług WWW w języku XML JAX-WS działa w prosty sposób z usługami WWW, ponieważ większość ręcznej pracy realizowanej w przypadku standardu EJB 2.1 jest generowana automatycznie w czasie wdrażania.
  • Powyżej wymieniono tylko podstawowe zmiany. Formalna specyfikacja JSR 220 dla standardu EJB 3.0 ma ponad 800 stron, a podręczniki dotyczące standardu EJB 3.0 mają zazwyczaj od 400 do 600 stron.

Standard EJB 3.0 jest formalnie zdefiniowany w dokumencie JSR 220: Enterprise JavaBeans 3.0. Ta specyfikacja JSR ma ponad 800 stron i jest podzielona na trzy sekcje: sekcja dotycząca interfejsu API trwałości języka Java definiuje strukturę trwałości i omawia obiekty, sekcja dotycząca podstawowych kontraktów i wymagań komponentów EJB opisuje komponenty bean sterowane komunikatami i komponenty bean sesji, a sekcja dotycząca uproszczonego interfejsu API komponentów EJB zawiera przegląd modelu programistycznego EJB.

W jaki sposób działa komponent EJB z interfejsem lokalnym

W związku z kwestiami poruszonymi we wcześniejszych sekcjach standard EJB 3.0 doprowadził do znacznego uproszczenia specyfikacji EJB. Dotyczy to w szczególności komponentów EJB z interfejsem lokalnym (czyli komponentów EJB, które będą uruchamiane w tej samej maszynie JVM co klient). Poniżej przedstawiono dowód na uproszczenie. Następujące wiersze kodu generują interfejs EJB.

package ejbeasy;

public interface EasyEJBClaim {
	public void stateClaim(String myName);
}

Poniższe wiersze tworzą implementację bezstanowego komponentu bean sesji.

package ejbeasy;

import javax.ejb.Stateless;

@Stateless
public class EasyEJBClaimBean implements EasyEJBClaim {
	public void stateClaim(String myName){
		System.out.println(myName + "mówi: Czy można jeszcze prościej?");
	}
}

Interfejs jest interfejsem POJO, a klasa komponentu bean jest klasą POJO. Adnotacja @Stateless przekształca klasę POJO w bezstanowy komponent EJB.