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

Podobne dokumenty
Java EE: JSF + EJB + JPA

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

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

Enterprise JavaBeans (EJB)

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

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

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

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

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

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.

Programowanie komponentowe 5

Web Services (SOAP) Ćwiczenie 1

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

Zaawansowane aplikacje internetowe - laboratorium

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

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

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Zaawansowane aplikacje internetowe - laboratorium

Programowanie Obiektowe GUI

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

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

Aplikacje WWW - laboratorium

RESTful Web Services na platformie Java EE (JAX-RS)

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

Zastosowanie komponentów EJB typu Session

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

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

Aplikacje internetowe i rozproszone - laboratorium

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

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

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Podstawowe informacje o technologii Java Persistence API - przykład

Zaawansowane aplikacje internetowe - laboratorium

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

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

Przykłady pytań do zaliczenia programu wykonywanego w ramach zajęć laboratoryjnych 6-8 z Programowania komponentowego w Javie. Zofia Kruczkiewicz

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

2. Podstawy narzędzia Application Builder, budowa strony, kreatory aplikacji

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Projektowanie aplikacji internetowych laboratorium

2. Podstawy narzędzia Application Builder, budowa strony, kreatory aplikacji

Kadry Optivum, Płace Optivum

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Zaawansowane aplikacje internetowe

Aplikacje internetowe i rozproszone - laboratorium

Wielowarstwowe aplikacje internetowe - laboratorium

Oracle Application Express

Problemy techniczne SQL Server

Problemy techniczne SQL Server

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

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

Jak utworzyć plik SIO dla aktualnego spisu?

Opisane poniżej czynności może wykonać administrator komputera lub administrator serwera SQL (tj. użytkownik sa).

Lokalizacja jest to położenie geograficzne zajmowane przez aparat. Miejsce, w którym zainstalowane jest to urządzenie.

Programowanie wielowarstwowe i komponentowe

Zadanie 1. Stosowanie stylów

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

6. Formularze tabelaryczne, obiekty nawigacji - rozgałęzienia

Projektowanie i wdrażanie systemów informatycznych. Dodanie aplikacji klienta uruchamianej przez przeglądarkę kontynuacja projektu:

Java Persistence API (JPA)

Laboratorium 8 ( Android -pierwsza aplikacja)

Finanse VULCAN. Jak wprowadzić fakturę sprzedaży?

Java Persistence API. Class powinny być zaznaczone. Kliknij przycisk Finish.

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Instrukcja laboratoryjna

Laboratorium 050. Crystal Reports. Ćwiczenie 1. Otwarte pozycje

Programowanie obiektowe zastosowanie języka Java SE

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

ACCESS ćwiczenia (zestaw 1)

UONET+ moduł Dziennik

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Komunikatory typu TCP/IP lab2. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Uruchamianie bazy PostgreSQL

Budowa prostej aplikacji wielowarstwowej

Zadanie 11. Przygotowanie publikacji do wydrukowania

Podstawy obsługi modułu administracyjnego

Zadanie 9. Projektowanie stron dokumentu

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Kadry VULCAN, Płace VULCAN

Systemy baz danych Prowadzący: Adam Czyszczoń. Systemy baz danych. 1. Import bazy z MS Access do MS SQL Server 2012:

UONET+ moduł Dziennik

Wprowadzenie do technologii JavaServer Faces 2.2 na podstawie Wykład 2 Technologie internetowe

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

Pracownia internetowa w szkole ZASTOSOWANIA

UONET+ moduł Dziennik

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

Aplikacje WWW - laboratorium

Płace Optivum. 1. Zainstalować serwer SQL (Microsoft SQL Server 2008 R2) oraz program Płace Optivum.

UONET+ - moduł Sekretariat

Budowa aplikacji wielowarstwowych. Zastosowanie szablonów

Płace VULCAN. Jak na podstawie wbudowanego szablonu utworzyć własny szablon wydruku seryjnego?

Bazodanowe usługi sieciowe w technologii ASP.NET. dr inż. Tomasz Tatoń

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Kadry Optivum, Płace Optivum. Jak przenieść dane na nowy komputer?

Transkrypt:

Java EE: JSF + EJB + JPA + CDI + BV Ćwiczenie 1 Celem ćwiczenia jest utworzenie prostej aplikacji bazodanowej umożliwiającej przeglądanie i dodawanie zleceń serwisowych. Ćwiczenie pokazuje współpracę technologii JSF (podstawowej technologii implementacji interfejsu użytkownika na platformie Java EE) z technologiami EJB (podstawową technologią implementacji logiki biznesowej) i JPA (standardową technologią odwzorowania obiektowo-relacyjnego, stanowiącego dominujące obecnie podejście do obsługi komunikacji z bazą danych). Integracja warstw prezentacji i logiki biznesowej odbywa się z wykorzystaniem dostępnej od Java EE 6 technologii CDI (ang. Contexts and Dependency Injection). Do realizacji ćwiczenia wymagane jest środowisko NetBeans 8.x wraz z serwerem aplikacji GlassFish i serwerem bazy danych Java DB. 1. Uruchom środowisko NetBeans. a) Uruchom creator tworzenia nowego projektu. b) Wybierz z menu opcję File New Project, jako typ projektu wybierz Enterprise Application z kategorii Java EE. Kliknij przycisk Next >. c) Jako nazwę projektu podaj Requests, a pozostałe ustawienia w tym kroku kreatora pozostaw domyślne. Kliknij przycisk Next >. d) W ostatnim kroku kreatora wybierz najnowszą dostępną wersję serwera GlassFish i najnowszą dostępną wersję Javy EE. Upewnij się czy zaznaczone jest tworzenie dwóch typów modułów: EJB i webowego. Pozostaw zaproponowane przez kreator nazwy modułów. Kliknij przycisk Finish. 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).

2. Korzystając z menu kontekstowego przejdź do edycji właściwości projektu modułu webowego (Request-war). Dodaj do projektu framework JavaServer Faces. Pozostaw domyślne ustawienia konfiguracyjne JSF 2.0. 3. Uruchom serwer bazy danych Java DB korzystając z panelu Services.

4. Z poziomu panelu Services połącz się z bazą danych sample na lokalnym serwerze Java DB (derby). 5. Utwórz w bazie danych tabelę, na której działać będzie tworzona aplikacja, realizując poniższe kroki: a) Wywołaj okno poleceń SQL dla bazy danych sample wybierając z menu kontekstowego dla węzła reprezentującego połączenie opcję Execute Command. b) Korzystając z okna poleceń SQL wykonaj kolejno poniższe polecenia SQL (pierwsze może zakończyć się błędem służy do ewentualnego usunięcia istniejącej już tabeli): DROP TABLE requests; CREATE TABLE requests (id INT NOT NULL GENERATED ALWAYS AS IDENTITY CONSTRAINT requests_pk PRIMARY KEY, request_date DATE, request_text VARCHAR(60) NOT NULL); INSERT INTO requests(request_date, request_text ) VALUES (CURRENT_DATE, 'Please check TV in room 242'); INSERT INTO requests(request_date, request_text ) VALUES (CURRENT_DATE, 'Repair fridge in room 311'); c) Upewnij się odpowiednim zapytaniem, że faktycznie zostały dodane dwa wiersze do tabeli REQUESTS.

6. W projekcie EJB utwórz jednostkę trwałości, w ramach której obiekty aplikacji będą zachowywane w bazie danych. W tym celu: a) Kliknij lewym przyciskiem myszy na ikonie projektu EJB (Request-ejb) w panelu projektów i z menu kontekstowego wybierz File New File. Następnie z kategorii Persistence wybierz typ pliku Persistence Unit. Kliknij przycisk Next >. b) Zmień nazwę jednostki trwałości na RequestsPU, a z listy dostępnych źródeł danych wybierz jdbc/sample. Dla pozostałych opcji pozostaw ustawienia domyślne. Kliknij przycisk Finish. c) Obejrzyj źródło utworzonego przez kreator pliku persistence.xml.

7. Utworzenie za pomocą kreatora zbioru encji na podstawie istniejących tabel w bazie danych. a) Kliknij prawym przyciskiem myszy na ikonie projektu EJB w drzewie projektów i z menu kontekstowego wybierz New Entity Classes from Database. b) Z listy dostępnych źródeł danych wybierz jdbc/sample, na liście tabel do wyboru w lewym panelu zaznacz myszą tabelę REQUESTS i kliknij przycisk Add >. Następnie kliknij przycisk Next >. c) Jako nazwę pakietu podaj req.entities. Zmień zaproponowaną nazwę klasy encji na liczbę pojedynczą (Request). W pozostałych polach pozostaw wartości domyślne. Kliknij przycisk Next.

d) W ostatnim kroku kreatora pozostaw wartości domyślne dla szczegółowych ustawień odwzorowania. Kliknij przycisk Finish. Obejrzyj kod wygenerowanej klasy Request. Zwróć uwagę na adnotacje JPA. 8. W projekcie EJB utwórz nowy bezstanowy komponent sesyjny EJB 3.x, który będzie pełnił funkcję fasady udostępniającej operacje na obiektach trwałych. W tym celu: a) Z menu kontekstowego projektu EJB uruchom kreator Session Beans For Entity Classes z kategorii Persistence. b) Wskaż, że tworzony komponent fasadowy ma obsługiwać encję Request i kliknij przycisk Next.

c) W ostatnim kroku kreatora zmień proponowany pakiet dla klasy komponentu na req.facade. Zaznacz, że komponent ma być dostępny tylko przez interfejs lokalny. Kliknij przycisk Finish. Obejrzyj wygenerowany kod interfejsu i klasy komponentu. Zwróć uwagę, że kreator samodzielnie podjął decyzję, że komponent ma być bezstanowy, co jest typowe dla sesyjnych EJB pełniących funkcję fasady. Odszukaj kod realizujący wstrzyknięcie zarządcy encji. Uwaga: Kreator komponentów fasadowych w NetBeans wykorzystuje abstrakcyjną klasę reprezentującą wspólną dla wszystkich fasad funkcjonalność. 9. W projekcie webowym (Requests-war) uruchom kreator tworzenia nowej strony JSF (JSF Page z kategorii JavaServer Faces). Jako nazwę strony wprowadź requestslist (odpowiednie rozszerzenie nawy pliku zostanie nadane automatycznie). Pozostałe opcje pozostaw domyślne (zwróć uwagę na wybór składni Facelets, nie JSP) i kliknij Finish.

10. Utwórz komponent backing bean obsługujący stronę JSF. W tym celu: a) Uruchom w projekcie webowym kreator JSF Managed Bean z kategorii JavaServer Faces. b) Jako nazwę klasy komponentu podaj RequestsList, a jako nazwę pakietu req.backing. Sprawdź zaproponowaną nazwę komponentu (powinna być jak nazwa klasy pisana z małej litery). Z listy dostępnych zasięgów wybierz zasięg request typowy dla komponentów backing bean. Kliknij Finish. 11. Przejdź do edycji kodu klasy komponentu zarządzanego (RequestsList). Wprowadź w nim poniższe modyfikacje: a) Wywołaj menu kontekstowe klikając prawym klawiszem myszy wewnątrz klasy przed jej konstruktorem. Z menu wybierz Insert Code Call Enterprise Bean.

b) W oknie dialogowym z dostępnymi komponentami zaznacz komponent fasadowy. Skoryguj zaproponowaną nazwę referencji, tak aby zaczynała się z małej litery i wybierz korzystanie z interfejsu lokalnego. Kliknij OK. c) poniżej konstruktora wklej poniższą metodę, która ma pośredniczyć w dostępie do metody komponentu fasadowego i udostępniać listę wszystkich obiekty encji w formie właściwości komponentu zarządzanego. Samodzielnie uzupełnij kod metody i zaimportuj wykorzystywane klasy (java.util.list oraz naszą klasę encji Request). Zapisz wszystkie zmiany. public List<Request> getallrequests() {... } 12. Przejdź do edycji źródła strony JSF (requestslist.xhtml). Usuń treść zawartą w elemencie <h:body>. Następnie kliknij prawym klawiszem w obszar wewnątrz elementu <h:body> i wybierz z menu kontekstowego opcję Insert Code Kliknij w wyświetlonym okienku pozycję JSF Data Table From Entity. W oknie dialogowym które się pojawi po upuszczeniu komponentu na stronie wybierz encję Request i właściwość komponentu backing bean udostępniającą wszystkie instancje encji Request. Naciśnij przycisk OK.

Uwaga: Może się zdarzyć, że nasza encja nie pojawi się na liście encji do wyboru. W takiej sytuacji powinno pomóc przebudowanie projektu, zapisanie zmian, a następnie zamknięcie i ponowne uruchomienie środowiska NetBeans. 13. Obejrzyj kod wygenerowany przez kreator i dokonaj następujących poprawek: a) Usuń źle umiejscowione znaczniki <f:view> i </f:view> (pozostawiając zawartość między nimi!) b) Dodaj w znaczniku <h:datatable> atrybut border z wartością 1 c) Usuń nagłówek <h1> (wraz z zawartością) poprzedzający element <h:datatable> d) zmień format daty w komponencie formatującym <f:convertdatetime> na yyyy-mm-dd 14. Wyświetl właściwości głównego projektu aplikacji. Wybierz kategorię Run i w sekcji Web Module Information jako względny adres startowy podaj: /faces/requestslist.xhtml. Kliknij przycisk OK.

15. Zapisz wszystkie zmiany i uruchom główny projekt aplikacji. 16. Wróć do edycji kodu komponentu backing bean. Odszukaj miejsce, w którym wstrzykiwana jest referencja do fasadowego komponentu EJB. Zastąp specyficzną dla technologii EJB adnotację @EJB ogólną adnotacją @Inject (bez atrybutów). Przebuduj główny projekt aplikacji (Clean and Build) i ponownie uruchom aplikację aby sprawdzić czy działa po zmianie adnotacji. 17. Przejdź do edycji źródła utworzonej strony JSF i wstaw wewnątrz elementu <h:form> przed elementem <h:datatable> poniższe trzy elementy (korzystając z podpowiedzi i autouzupełniania edytora tekstowego): element <h:outputtext> z atrybutem value o wartości New request element <h:inputtext> z atrybutem id o wartości newreqinputtext element <h:commandbutton> z atrybutem value o wartości Add 18. Przejdź do edycji kodu klasy komponentu backing bean (RequestsList). Wywołaj poprzez menu kontekstowe edytora kreator Insert Code AddProperty. Dodaj prywatną właściwość newrequest typu String z publicznymi metodami getter i setter. Zwróć uwagę, aby dodana właściwość nie zaburzyła poprawnej struktury klasy (aby własność nie została wstawiona bezpośrednio po adnotacji). 19. Analogicznie do poprzedniego punktu ćwiczenia dodaj w klasie backing bean właściwość requestsdatatable typu javax.faces.component.html.htmldatatable.

20. Przejdź do edycji strony JSF. Dokonaj powiązania jej komponentów z komponentem backing bean dodając następujące atrybuty znaczników: w elemencie <h:inputtext>: value="#{requestslist.newrequest}" w elemencie <h:commandbutton>: action="#{requestslist.addrequest}" w elemencie <h:datatable>: binding="#{requestslist.requestsdatatable}" 21. Dodaj w klasie komponentu backing bean metodę, do której odnosi się przycisk na stronie JSF. Uzupełnij kod metody o operacje: utworzenia instancji klasy Request ustawienia w nowo utworzonym obiekcie daty zlecenia na bieżącą i tekstu zlecenia na wprowadzony do formularza utrwalenia obiektu poprzez fasadę public String addrequest() {... setnewrequest(""); return null; } 22. Zapisz wszystkie zmiany. Uruchom aplikację. Przetestuj dodawanie nowych zleceń serwisowych. 23. Dodaj w klasie komponentu backing bean metodę do usuwania obiektu encji Request reprezentowanego przez bieżący wiersz w komponencie Data Table. Uzupełnij kod metody o operację usunięcia trwałej reprezentacji obiektu za pomocą fasady. public String deleterequest() { Request req = (Request) getrequestsdatatable().getrowdata();... return null; }

24. Przejdź do edycji strony JSF. Dodaj w komponencie Data Table kolumnę z przyciskami umożliwiającymi usunięcie zlecenia wyświetlanego w bieżącym wierszu (jako ostatnią kolumnę tabeli). Użyj w odpowiedni sposób znacznika <h:commandbutton> i jego własności value i action. Uwaga: W rzeczywistej aplikacji kliknięcie przycisku powinno prowadzić do strony z prośbą o potwierdzenie decyzji o usunięciu zlecenia. 25. Zapisz wszystkie zmiany. Uruchom aplikację i przetestuj jej działanie usuwając kilka zleceń. Ćwiczenie 2 Celem ćwiczenia jest pokazanie sposobu walidacji danych z wykorzystaniem technologii Bean Validation. 1. Oznacz pole w beanie CDI podpięte pod pole formularza do wprowadzania nowego zlecenia adnotacją @Size standardu Bean Validation. Ustaw minimalną długość tekstu na 3 znaki, a maksymalną na 128 znaków. 2. Na stronie JSF z formularzem dodaj komponent <h:message> (obok przycisku do dodawania wpisów) do wyświetlania komunikatu o błędzie walidacji dla pola do wprowadzenia nowego zlecenia. 3. Przetestuj dodawanie nowych zleceń zwracając uwagę na standardowy komunikat o błędzie walidacji. 4. Zastąp standardowy komunikat komunikatem Message text must be from 3 to 128 characters long. wykorzystując odpowiedni atrybut adnotacji @Size. 5. Sprawdź czy nadal poprawnie działa usuwanie zleceń. 6. Spraw aby możliwe było usuwanie zleceń gdy pole z treścią nowego zlecenia jest puste.