Enterprise JavaBeans (EJB)

Podobne dokumenty
Aplikacje internetowe i rozproszone - laboratorium

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Web Services (SOAP) Ćwiczenie 1

Zaawansowane aplikacje internetowe

Aplikacje WWW - laboratorium

2) W wyświetlonym oknie należy zaznaczyć chęć utworzenia nowej aplikacji (wygląd okna może się różnić od powyższego); kliknąć OK

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Programowanie Obiektowe GUI

Java EE: JSF + EJB + JPA

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Java EE: JSF + EJB + JPA + CDI + BV

Zaawansowane aplikacje internetowe - laboratorium

Wybrane Działy Informatyki Stosowanej LABORATORIUM 1.

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

E:\DYDAKTYKA\ZAI\ZWWW\Laboratoria\L07\Java Persistence.doc 2011-lis-24, 17:0 Zaawansowane aplikacje internetowe Laboratorium Java Persistence.

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Programowanie komponentowe 5

Zastosowanie komponentów EJB typu Session

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Ćwiczenie dotyczące platformy Java EE zostało przygotowane z myślą o środowisku NetBeans w wersji 7.3 (do pobrania z

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Projektowanie aplikacji internetowych laboratorium

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Aplikacje WWW - laboratorium

Zaawansowane aplikacje internetowe

Programowanie wielowarstwowe i komponentowe

Zaawansowane aplikacje internetowe - laboratorium

16) Wprowadzenie do raportowania Rave

6. Powtórz kroki z punktu 5. dla strony sorry.jsp, zmieniając jedynie treść wyświetlanego tekstu ( Niestety zamiast Witaj )

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Serwery Statefull i Stateless

EJB 3.0 (Enterprise JavaBeans 3.0)

Wybrane działy Informatyki Stosowanej

Serwery aplikacji. dr Radosław Matusik. radmat

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Laboratorium 1 Wprowadzenie do PHP

Microsoft.NET: Warstwa dostępu do danych (DAL) w aplikacjach ASP.NET Web Forms

Wybierz kategorię Java Web i typ projektu Web Application. Kliknij przycisk Next >.

Instalacja i konfiguracja IIS-a na potrzeby dostępu WEB do aplikacji Wonderware InTouch Machine Edition

Zaawansowane aplikacje internetowe laboratorium

Aplikacje WWW - laboratorium

Enterprise JavaBeans (EJB)

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Załącznik 1 instrukcje instalacji

Java Database Connectivity

Wybrane działy Informatyki Stosowanej

1 Wprowadzenie do J2EE

Przesyłanie Pakietów Danych i TCP/IP

Katalog książek cz. 3: Web Service

Enterprise JavaBeans

Programowanie obiektowe zastosowanie języka Java SE

Aplikacje WWW - laboratorium

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Zaawansowane aplikacje WWW - laboratorium

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

Wykład 3 Inżynieria oprogramowania. Przykład 1 Bezpieczeństwo(2) wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Zaawansowane aplikacje internetowe laboratorium

Projekt INP Instrukcja 1. Autor Dr inż. Zofia Kruczkiewicz

Wywoływanie metod zdalnych

Testowanie podstawowej konfiguracji serwera w środowisku NetBeans

Aplikacje internetowe - laboratorium

Przewodnik użytkownika (instrukcja) AutoMagicTest

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Instrukcja laboratoryjna cz.3

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Instrukcja instalacji nośników USB w systemie internetowym Alior Banku

Ćwiczenie 2. Tworzenie serwisów internetowych. Zapoznanie z pakietem WebRatio

Podejście obiektowe do budowy systemów rozproszonych

Aplikacje internetowe i rozproszone - laboratorium

Laboratorium 7 Blog: dodawanie i edycja wpisów

Tworzenie i wykorzystanie usług sieciowych

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

Instrukcja pobrania i instalacji. certyfikatu Microsoft Code Signing. wersja 1.4

Instalacja i konfiguracja IIS-a na potrzeby dostępu WEBowego/Secure

Programowanie w Javie

Aplikacje internetowe - laboratorium

Spring Web MVC, Spring DI

Java Server Faces - wprowadzenie

Architektury Usług Internetowych. Laboratorium 1 Servlety

Aplikacje www laboratorium

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Aplikacje WWW - laboratorium

Wstęp - Prosta aplikacja internetowa w technologii Java EE 5. Programowanie komponentowe 1

enova Instalacja wersji demo

Wywoływanie metod zdalnych

Połączenie grzałki ze Smartfonem.

Wybrane działy Informatyki Stosowanej

Serwery aplikacji. mgr Radosław Matusik. Wydział Matematyki i Informatyki Uniwersytetu Łódzkiego radmat radmat@math.uni.lodz.

A Zasady współpracy. Ocena rozwiązań punktów punktów punktów punktów punktów

Transkrypt:

Enterprise JavaBeans (EJB) Celem tego zestawu ćwiczeń jest zapoznanie z sesyjnymi komponentami Enterprise JavaBeans. Zilustrowane będą różnice między komponentami stanowymi i bezstanowymi. Pokazane będzie tworzenie klientów aplikacyjnych i webowych. Ćwiczenia zostały przygotowane dla środowiska NetBeans 7.0 i zintegrowanego z NetBeans serwera GlassFish. Ćwiczenie 1 W tym ćwiczeniu zostanie utworzony projekt w środowisku NetBeans, składający się z trzech modułów. 1. Uruchom środowisko NetBeans. 2. Utwórz nowy projekt typu Enterprise Application: a) Wybierz z menu opcję File->New Project. b) W pierwszym kroku kreatora jako typ projektu wybierz Enterprise Application z kategorii Java EE. c) W drugim kroku kreatora jako nazwę projektu podaj EJBLab, a pozostałe ustawienia w tym oknie pozostaw domyślne. d) W ostatnim kroku kreatora wybierz najnowszą dostępną wersję serwera GlassFish (GlassFish Server 3.1 w NetBeans 7.0.1) i najnowszą dostępną wersję Java EE (Java EE 6 w NetBeans 7.0.1). Upewnij się że zaznaczone jest tworzenie wszystkich dwóch typów modułów: EJB i webowego. Pozostaw zaproponowane przez kreator nazwy modułów. e) Ponownie wybierz z menu opcję File->New Project. f) W pierwszym kroku kreatora jako typ projektu wybierz Enterprise Application Client z kategorii Java EE. g) W drugim kroku kreatora jako nazwę projektu podaj EJBLab-app-client, a pozostałe ustawienia w tym oknie pozostaw domyślne.

h) W ostatnim kroku kreatora z listy dostępnej dla opcji Add to Enterprise Application wybierz naszą aplikację EJBLab. Serwer i wersję Java EE wybierz takie jak wcześniej dla głównego projektu. Pozostałe opcje pozostaw domyślne. i) Po zakończeniu działania kreatora obejrzyj organizację aplikacji w oknie Projects. Zwróć uwagę, że w środowisku NetBeans moduły składowe aplikacji Enterprise Application stanowią odrębne projekty, a główny projekt łączy je w całość (inne środowiska IDE mogą stosować inną organizację kodu). Uwaga: Wcześniejsze wersje środowiska NetBeans (6.x) umożliwiały tworzenie klienta aplikacyjnego jako modułu aplikacji Java EE w ramach wywołania kreatora dla głównej aplikacji, analogicznie jak klienta webowego. Ćwiczenie 2 W tym ćwiczeniu utworzone zostaną utworzone 2 sesyjne komponenty EJB: jeden bezstanowy, a drugi stanowy. Komponenty będą implementowały funkcję licznika każda instancja będzie zliczała liczbę wywołań metody usługowej. 1. Utwórz nowy projekt typu Java Class Library z kategorii Java. Nazwij go EJBLab-remoteclient-lib. Uwaga: Projekt ten będzie zawierał interfejs zdalny komponentu EJB, który zostanie utworzony w kolejnym punkcie ćwiczenia. NetBeans 7 promuje praktykę umieszczania interfejsów zdalnym w odrębnym projekcie, co później ułatwi korzystanie z nich w tworzonych aplikacjach zdalnych klientów. 2. W projekcie modułu EJB utwórz bezstanowy sesyjny EJB: a) W oknie Projects wybierz z menu kontekstowego dla węzła projektu modułu EJB opcję New->Session Bean.

b) Jako nazwę komponentu podaj StatelessCounter, a jako nazwę pakietu counters. Jako typ komponentu wskaż: bezstanowy. Zaznacz opcję tworzenia zarówno interfejsu zdalnego jak i lokalnego. Wskaż, że interfejs zdalny ma być umieszczony w utworzonym w poprzednim punkcie ćwiczenia projekcie biblioteki. c) obejrzyj kod wygenerowanych przez kreator 3 plików źródłowych (2 interfejsy i klasa komponentu). Zwróć uwagę na adnotacje związane z technologią EJB. 3. Dodaj do utworzonego komponentu EJB prywatne pole counter typu int inicjowane na 0. 4. Dodaj do utworzonego komponentu EJB publiczną bezargumentową metodę count() zwracającą wartość int. Użyj sposobu zaproponowanego w komentarzu umieszczonym przez kreator w klasie komponentu (Insert Code -> Add Business Method). Spraw aby metoda była dostępna poprzez interfejs zdalny i lokalny.

Uwaga: Kreator ostrzega, że udostępnienie tej samej metody przez interfejs zdalny i lokalny jest niezalecane i potencjalnie może być źródłem problemów np. ze względu na różnice w sposobie przekazywania parametrów. W naszej prostej aplikacji możemy zignorować to ostrzeżenie. 5. Zmień kod metody wygenerowany przez kreator, tak aby metoda zwiększała licznik o 1 i po zwiększeniu zwracała wartość licznika jako wynik. 6. Obejrzyj kod interfejsu lokalnego i zdalnego i upewnij się, że oba zawierają metodę count().

7. Utwórz w tym samym projekcie (module) stanowy sesyjny komponent EJB. Nazwij go StatefulCounter, a jako nazwę pakietu podaj counters. Zaznacz opcję tworzenia zarówno interfejsu zdalnego jak i lokalnego, umieszczając zdalny interfejs w projekcie biblioteki. 8. Powtórz kroki 3-6 dla komponentu stanowego, tak aby podobnie jak bezstanowy pełnił funkcję licznika wywołań. Ćwiczenie 3 W tym ćwiczeniu utworzone zostaną utworzeni aplikacyjni klienci komunikujący się z sesyjnymi komponentami przez interfejs zdalny. W oparciu o tych klientów przeprowadzony zostanie eksperyment ilustrujący różnicę między stanowymi i bezstanowymi sesyjnymi EJB. 1. Przejdź do edycji głównej klasy w projekcie modułu klienta aplikacyjnego. 2. Dodaj w klasie głównej klienta aplikacyjnego odwołanie do komponentu EJB: a) Wybierz z menu kontekstowego opcję Insert Code -> Call Enterprise Bean. b) Z wyświetlonej listy dostępnych komponentów wybierz komponent bezstanowy. Pozostaw bez zmian zaproponowaną nazwę referencji. Zaznacz, że komunikacja będzie realizowana przez interfejs zdalny.

UWAGA: Jeśli po rozwinięciu gałęzi projektu EJB nie pojawią się do wyboru dwa utworzone wcześniej sesyjne komponenty EJB, zapisz zmiany i zrestartuj środowisko NetBeans. c) Zwróć uwagę na dodane przez kreator wstrzyknięcie zależności dla komponentu EJB do statycznej zmiennej w klasie. 3. Podejrzyj właściwości projektu klienta aplikacyjnego. Odszukaj dodane przez wywołany przed chwilą kreator wywołania komponentu EJB ustawienie dzięki któremu projekt klienta aplikacyjnego widzi interfejsy zdalne komponentów EJB. 4. Umieść w metodzie main() poniższy kod, wywołujący metodę usługową komponentu w jednosekundowych odstępach czasowych: System.out.println( statelesscounter.count( ) ); try {Thread.sleep(1000);} catch (InterruptedException e) {}; System.out.println( statelesscounter.count( ) ); try {Thread.sleep(1000);} catch (InterruptedException e) {}; System.out.println( statelesscounter.count( ) ); try {Thread.sleep(1000);} catch (InterruptedException e) {}; System.out.println( statelesscounter.count( ) ); try {Thread.sleep(1000);} catch (InterruptedException e) {}; System.out.println( statelesscounter.count( ) );

5. Upewnij się, że moduł klienta aplikacyjnego jest wybrany jako moduł klienta naszej aplikacji. W tym celu przejdź do właściwości głównego projektu (EJBLab) i podejrzyj zakładkę Run. Jeśli jako Client Module nie jest wybrany EJBLab-app-client, to go wybierz z listy. 6. Uruchom główny projekt aplikacji. Zaobserwuj wynik działania na konsoli. 7. Uruchom współbieżnie aplikację 2 razy poprzez wywołanie opcji Run w możliwie krótkim odstępie czasu. Zinterpretuj zaobserwowane wyświetlone wartości licznika. 8. Zmodyfikuj (ręcznie) kod klasy głównej klienta aplikacyjnego, tak aby tym razem korzystała ze stanowego sesyjnego EJB. 9. Uruchom główny projekt aplikacji. Zaobserwuj wynik działania na konsoli. 10. Uruchom współbieżnie aplikację 2 razy poprzez wywołanie opcji Run w możliwie krótkim odstępie czasu. Zinterpretuj zaobserwowane wyświetlone wartości licznika. Ćwiczenie 4 W tym ćwiczeniu zostanie utworzony serwlet wywołujący metody sesyjnych komponentów EJB poprzez interfejs lokalny. 1. Zaznacz moduł klienta webowego jako moduł klienta naszej aplikacji. W tym celu przejdź do właściwości głównego projektu (EJBLab) i podejrzyj zakładkę Run. Jeśli jako Client Module nie jest wybrany EJBLab-war, to go wybierz z listy. 2. Utwórz w projekcie webowym (EJBLab-war) nowy serwlet. Jako jego nazwę podaj ClientServlet a jako nazwę pakietu web. Pozostałe ustawienia serwletu pozostaw domyślne (w szczególności nie zaznaczaj opcji dodawania informacji do pliku web.xml).

Obejrzyj kod klasy wygenerowanego serwletu zwracając uwagę na adnotację specyfikującą ścieżkę URL, która będzie wywoływać serwlet. 3. Dodaj w kodzie serwletu (na poziomie klasy) referencje do obu utworzonych wcześniej komponentów EJB. Wykorzystaj do tego opcję Insert Code->Call Enterprise Bean. Zaakceptuj proponowane nazwy referencji. Dla obu komponentów zwróć uwagę, aby odwołanie było poprzez interfejs lokalny.

Obejrzyj sposób w jaki serwletowi udostępnione zostały referencje do stanowego i bezstanowego komponentu EJB. Komponent stanowy powinien być jawnie wyszukiwany przez interfejs JNDI, gdyż wstrzykiwanie zależności w serwlecie dostępne jest tylko na poziomie klasy serwletu, a nie wewnątrz metod co okaże się konieczne w dalszej części ćwiczenia. Zwróć uwagę na dodaną przez kreator metodę pomocniczą realizującą lookup JNDI. Przeanalizuj nazwę globalną przez którą komponent jest identyfikowany w JNDI. 4. Rozwiń kod wygenerowanego serwletu. Przeanalizuj zależności między metodami doget(), dopost() i processrequest(). 5. Zmodyfikuj kod metody processrequest() tak aby generowała dokument HTML prezentujący stan obu liczników reprezentowanych przez komponenty EJB. 6. Uruchom aplikację. W dwóch różnych przeglądarkach wprowadź adres URL wywołujący serwlet (http://localhost:8080/ejblab-war/clientservlet). Odśwież stronę kilka razy w każdej z przeglądarek. Spróbuj wyjaśnić zachowanie stanowego licznika. 7. W przypadku odwołania z serwletu do stanowego sesyjnego EJB należy zapewnić aby każda sesja miała swoją własną referencję do EJB. Zastąpienie wstrzykiwania zależności przez jawne wyszukanie komponentu przez JNDI nie rozwiązuje problemu jeśli wyszukana referencja będzie przypisana do zmiennej instancji serwletu (współdzielonej przez wszystkie wątki serwletu, czyli wszystkie żądania). a) Przenieś deklarację referencji do stanowego sesyjnego EJB z poziomu serwletu do metody processrequest() (wraz z wywołaniem metody realizującej wyszukanie komponentu przez JNDI). Zapisz zmiany, uruchom i przetestuj aplikację. Jak możesz wyjaśnij jej aktualne działanie? b) zmodyfikuj kod metody processrequest() serwletu tak aby referencja do komponentu stanowego była przechowywana w sesji HTTP (obiekt HttpSession) na czas kolejnych wywołań. (Wyszukanie w JNDI powinno mieć miejsce tylko wtedy gdy nie ma w zasięgu sesji wcześniej wyszukanej referencji.) c) Uruchom aplikację. W dwóch różnych przeglądarkach wprowadź adres URL wywołujący serwlet (http://localhost:8080/ejblab-war/clientservlet). Odśwież stronę kilka razy w każdej z przeglądarek. Ćwiczenie 5 W tym ćwiczeniu zostanie utworzona strona JSF wywołująca metodę stanowego sesyjnego komponentu EJB poprzez interfejs lokalny. 1. Dodaj w module webowym nową stronę JSF opartą o Facelets. Nazwij ją index. 2. Utwórz w module webowym nowy komponent zarządzany. Dodaj w klasie komponentu zarządzanego metodę getcurrentnumber() zwracającą wartość licznika pobraną ze stanowego sesyjnego EJB. 3. Na stronie JSF umieść komponent do wyświetlania stanu licznika udostępnianego przez komponent zarządzany.

4. Uruchom aplikację. Przetestuj działanie strony otwierając i odświeżając ją współbieżnie w dwóch różnych przeglądarkach. Powtórz eksperyment ustawiając komponentowi zarządzanemu zasięg żądania, sesji i aplikacji. Który zasięg jest odpowiedni do pośredniczenia w dostępie do stanowego sesyjnego EJB?