Java EE: JSF + EJB + JPA



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

Ć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)

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

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

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

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

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

Zaawansowane aplikacje internetowe - laboratorium

Aplikacje WWW - laboratorium

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.

Zaawansowane aplikacje internetowe - laboratorium

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

Aplikacje internetowe i rozproszone - laboratorium

Programowanie Obiektowe GUI

Web Services (SOAP) Ćwiczenie 1

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

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

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

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

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Zastosowanie komponentów EJB typu Session

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

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

Aplikacje WWW - laboratorium

Programowanie komponentowe 5

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

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

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

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

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Projektowanie aplikacji internetowych laboratorium

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

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

Aplikacje internetowe i rozproszone - laboratorium

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

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

Podstawowe informacje o technologii Java Persistence API - przykład

Wielowarstwowe aplikacje internetowe - laboratorium

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

Autor: Joanna Karwowska

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

Zaawansowane aplikacje internetowe

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

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

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

Zaawansowane aplikacje internetowe - laboratorium

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

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Ćwiczenia 2 IBM DB2 Data Studio

Paweł Cieśla. Dokumentacja projektu

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

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

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

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

BAZY DANYCH. CREATE TABLE dbo.wydzialy (ID INT, Akronim VARCHAR(4) NOT NULL, Wydzial VARCHAR(30) NOT NULL, CONSTRAINT Kluczyk PRIMARY KEY(ID) )

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

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

Aplikacje WWW - laboratorium

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

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

Problemy techniczne SQL Server

Problemy techniczne SQL Server

7. Formularze master-detail

Aplikacje WWW - laboratorium

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

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

Tworzenie tabel. Bazy danych - laboratorium, Hanna Kleban 1

Kadry Optivum, Płace Optivum

Microsoft Access materiały pomocnicze do ćwiczeń cz. 1

Wprowadzenie do Doctrine ORM

5. Integracja stron aplikacji, tworzenie zintegrowanych formularzy i raportów

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Podstawowe wykorzystanie Hibernate

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

16) Wprowadzenie do raportowania Rave

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

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

8. Listy wartości, dodatkowe informacje dotyczące elementów i przycisków

Jak utworzyć plik SIO dla aktualnego spisu?

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

Java Persistence API (JPA)

Serwery Statefull i Stateless

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Laboratorium 3. Odkrywanie reguł asocjacyjnych.

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

Kostki OLAP i język MDX

Instrukcja użytkownika

Uruchamianie bazy PostgreSQL

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

Wykład 8. SQL praca z tabelami 5

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

5.2. Pierwsze kroki z bazami danych

Transkrypt:

Java EE: JSF + EJB + JPA 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). Do realizacji ćwiczenia wykorzystane zostało środowisko NetBeans 7.2 wraz z serwerem aplikacji GlassFish v3.1.2 i serwerem bazy danych Java DB. 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 Requests, a pozostałe ustawienia w tym oknie pozostaw domyślne. d. W ostatnim kroku kreatora jako serwer wybierz GlassFish v3.1.2 i Java EE 6 jako 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. e. 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). 3. Korzystając z menu kontekstowego przejdź do edycji właściwości projektu modułu webowego. Dodaj do projektu framework JavaServer Faces.

4. Uruchom serwer bazy danych Java DB korzystając z panelu Services. 5. Z poziomu panelu Services połącz się z bazą danych sample na lokalnym serwerze Java DB (derby). 6. 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 trzy mogą zakończyć się błędami służą do ewentualnego usunięcia istniejących już tabel):

DROP TABLE requests; DROP TABLE employees; DROP TABLE departments; 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); CREATE TABLE departments (id INT NOT NULL GENERATED ALWAYS AS IDENTITY CONSTRAINT dept_pk PRIMARY KEY, department_name VARCHAR(60) NOT NULL); CREATE TABLE employees (id INT NOT NULL GENERATED ALWAYS AS IDENTITY CONSTRAINT emp_pk PRIMARY KEY, employee_name VARCHAR(60) NOT NULL, salary DECIMAL(8,2) NOT NULL, department_id INT REFERENCES departments(id)); 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. 7. 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 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. W drugim kroku kreatora 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. 8. 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. c. Następnie na liście tabel do wyboru w lewym panelu, przy zaznaczonym polu wyboru Include related tables, zaznacz myszą tabele REQUESTS i EMPLOYEES i kliknij przycisk Add. Zauważ, że na liście wybranych tabel (w prawym panelu) automatycznie została uwzględniona tabela DEPARTMENTS, do której odwołuje się klucz obcy z tabeli EMPLOYEES. Kliknij przycisk Next.

d. W kolejnym kroku kreatora jako nazwę pakietu podaj req.entities. Zmień zaproponowane nazwy klas encji na liczbę pojedynczą (Department, Employee, Request). W pozostałych polach pozostaw wartości domyślne. Kliknij Next. e. W ostatnim kroku kreatora sprawdź jakie wartości są dostępne dla opcji Association Fetch i Collection Type. Pozostaw wartości zaproponowane przez kreator i kliknij Finish.

f. Obejrzyj kod wygenerowanej klasy Request. Upewnij się, że rozumiesz znaczenie wszystkich adnotacji. g. Odszukaj w wygenerowanych klasach Employee i Department pola i ich adnotacje odpowiedzialne za dwukierunkową nawigację między obiektami encji. Zwróć uwagę, że encja Employee udostępnia powiązany obiekt Department, a nie wartość klucza obcego. 9. 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. 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ć tylko encję Request i kliknij 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 Finish. d. W klasie komponentu fasadowego podmień definicję metody findall(), tak aby wykorzystywała zdefiniowane dla klasy encji zapytanie nazwane (odszukaj nazwę tego zapytania nazwanego i wpisz je w miejsce wielokropka w poniższej instrukcji, która ma stanowić ciało metody findall()). return getentitymanager().createnamedquery("...").getresultlist(); 10. W projekcie webowym 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. 11. 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. Pozostaw wybrany zasięg request typowy dla komponentów backing bean. Kliknij Finish. 12. Przejdź do edycji kodu klasy komponentu zarządzanego. 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. 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.

b. Poniżej konstruktora wklej poniższą metodę, która ma pośredniczyć w dostępie do metody komponentu fasadowego i udostępniać listę wszystkie obiekty encji w formie właściwości komponentu zarządzanego. Samodzielnie uzupełnij kod metody i zaimportuj wykorzystywane klasy. Zapisz wszystkie zmiany. public List<Request> getallrequests() {... } 13. Przejdź do edycji źródła strony JSF. Usuń treść zawartą w elemencie <h:body>. Następnie techniką drag-and-drop z palety komponentów umieść na stronie wewnątrz elementu <h:body> komponent JSF Data Table From Entity. W oknie dialogowym, które pojawi się po upuszczeniu komponentu na stronie wybierz encję Request i właściwość komponentu backing bean udostępniającą wszystkie instancje encji Request. 14. 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. W znaczniku <html> dodaj atrybut dla przestrzeni nazw znaczników JSF Core wskazując f jako prefiks dla znaczników z tej przestrzeni. <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> c. Dodaj w znaczniku <h:datatable> atrybut border z wartością 1.

d. Usuń nagłówek <h1> (wraz z zawartością) poprzedzający element <h:datatable>. e. Zmień format daty w komponencie formatującym <f:convertdatetime> na yyyy-mm-dd. 15. 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 OK. 16. Zapisz wszystkie zmiany i uruchom główny projekt aplikacji. 17. Wróć 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): <h:outputtext> z atrybutem value o wartości New request, <h:inputtext> z atrybutem id o wartości newreqinputtext, <h:commandbutton> z atrybutem value o wartości Add. 18. Przejdź do edycji kodu klasy komponentu backing bean. Wywołaj poprzez menu kontekstowe edytora kreator Insert Code->AddProperty. Dodaj prywatną właściwość newrequest typu String z publicznymi metodami getter i setter.

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 do wskazanych elementów: <h:inputtext value="#{requestslist.newrequest}>", <h:commandbutton action="#{requestslist.addrequest}>", <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 linkami umożliwiającymi usunięcie zlecenia wyświetlanego w bieżącym wierszu (jako ostatnią kolumnę tabeli). 25. Zapisz wszystkie zmiany. Uruchom aplikację i przetestuj jej działanie usuwając kilka zleceń.