Wielowarstwowe aplikacje internetowe - laboratorium

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

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

Zaawansowane aplikacje internetowe - laboratorium

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

Java Persistence API (JPA)

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

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

Java EE: JSF + EJB + JPA

Zaawansowane aplikacje internetowe - laboratorium

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

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

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

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

Enterprise JavaBeans (EJB)

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

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Zaawansowane aplikacje internetowe - laboratorium

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Projektowanie aplikacji internetowych laboratorium

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

Zaawansowane aplikacje WWW - laboratorium

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

Wprowadzenie do Doctrine ORM

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

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

Programowanie Obiektowe GUI

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

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Aplikacje internetowe i rozproszone - laboratorium

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Autor Zofia Kruczkiewicz Wzorce oprogramowania - laboratorium5_6

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

Katalog książek cz. 2

Instrukcja 5 Laboratorium z Podstaw Inżynierii Oprogramowania. Warstwy integracji z bazą danych: Wzorzec DAO Technologia ORM

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Informatyka I : Tworzenie projektu

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

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

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.

Aplikacje internetowe i rozproszone - laboratorium

Programowanie obiektowe zastosowanie języka Java SE

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

Web Services (SOAP) Ćwiczenie 1

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

Zaawansowane aplikacje internetowe laboratorium

Programowanie w Javie

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

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

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

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

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

Instalacja Webroot SecureAnywhere przy użyciu GPO w Active Directory

Aplikacje WWW - laboratorium

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

akademia androida Składowanie danych część VI

Zaawansowane aplikacje internetowe laboratorium

Aplikacje WWW - laboratorium

Db4o obiektowa baza danych wersja.net

ZSBD ćwiczenie 4. Obiektowe systemy zarządzania bazą danych. Przygotowanie środowiska pracy. Wymagania: ZSBD ćwiczenie 4

Wybrane Działy Informatyki Stosowanej LABORATORIUM 1.

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

XML-owe bazy danych ćwiczenia 1

NHibernate Hibernate dla platformy.net. Hibernate posiada także dużą społeczność, zatem nietrudno uzyskać jakieś wsparcie w przypadku problemów.

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

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

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

Jak eksportować dane z Arkusza do SIO?

Uruchamianie bazy PostgreSQL

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

MentorGraphics ModelSim

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

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski SYSTEMY SCADA

Laboratorium 3. Odkrywanie reguł asocjacyjnych.

Moduł Handlowo-Magazynowy Przeprowadzanie inwentaryzacji z użyciem kolektorów danych

3. Budowa prostych raportów opartych o bazę danych

Jak utworzyć plik SIO dla aktualnego spisu?

Programowanie komponentowe 5

Podstawowe wykorzystanie Hibernate

Ćwiczenia 9 - Swing - część 1

Podstawowe informacje o technologii Java Persistence API - przykład

Aplikacje WWW - laboratorium

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

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Zaawansowane aplikacje internetowe

Aplikacje internetowe - laboratorium ASP.NET praca z bazą danych

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

Pracownia internetowa w szkole ZASTOSOWANIA

Aplikacje internetowe laboratorium

Modelowanie obiektowe - Ćw. 1.

Oracle Application Express

JDK 7u25 NetBeans Zajęcia 1 strona - 1

Wdrożenie do projektu

Kostki OLAP i język MDX

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

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

Aplikacje internetowe - laboratorium

Programowanie wielowarstwowe i komponentowe

Zaawansowane aplikacje internetowe - laboratorium Architektura Spring.

Transkrypt:

Wielowarstwowe aplikacje internetowe - laboratorium Java Persistence API (JPA) Do wykonania ćwiczeń potrzebne jest zintegrowane środowisko programistyczne NetBeans IDE 6.1 wraz z serwerem GlassFish (do pobrania z http://www.netbeans.org/, pakiet Web & Java EE Bundle) oraz środowisko JDK 6 (wymagane do instalacji NetBeans, do pobrania z http://java.sun.com/). Autor ćwiczenia: Marek Wojciechowski Ćwiczenie 1 Celem ćwiczenia jest przygotowanie prostej aplikacji Java SE realizującej odczyt i zapis danych z/do bazy danych poprzez Java Persistence API. Kroki ćwiczenia: 1. Utworzenie nowego projektu a) Uruchom narzędzie NetBeans IDE 6.0. b) Z menu głównego wybierz File New Project. Wybierz kategorię General i typ projektu Java Application. Kliknij przycisk Next >. c) Podaj nazwę projektu BugsJP. W polu Project Location powinien być wskazany katalog, w którym masz prawo zapisu. Pola wyboru Set as Main Project i Create Main Class powinny być zaznaczone. Kliknij przycisk Finish.

d) Efektem działania kreatora powinien być projekt zawierający klasę Java z metodą main(). 2. Utworzenie jednostki trwałości, w ramach której obiekty aplikacji będą zachowywane w bazie danych a) Kliknij lewym przyciskiem myszy na ikonie projektu w drzewie projektów zaznaczając go, a potem z menu głównego wybierz File New File. Następnie z kategorii Persistence wybierz typ pliku Persistence Unit. Kliknij przycisk Next >.

b) W kolejnym oknie pozostaw niezmienioną zaproponowaną przez kreator nazwę jednostki trwałości i domyślną bibliotekę do obsługi trwałości (Persistence Library): TopLink. Jako połączenia JDBC (Database Connection) wybierz z listy połączenie z bazą danych sample na lokalnym serwerze Derby. Jako strategię tworzenia tabel w bazie danych (Table Generation Strategy) pozostaw Create, czyli tworzenie w momencie instalacji aplikacji jeśli nie istnieją. Kliknij przycisk Finish. c) Obejrzyj zawartość wygenerowanego przez kreator pliku persistence.xml w trybie XML. Zwróć uwagę na elementy <provider> i <property> zawierające wartości odpowiadające opcjom wybranym w oknie kreatora. Sprawdź czy zarówno

właściwość toplink.jdbc.user i toplink.jdbc.password mają wartość app i jeśli nie to popraw zawartość pliku. 3. Utworzenie klasy encji Bug. Z każdym albumem będzie związany jeden wykonawca. Każdy wykonawca będzie posiadał kolekcję albumów. a) Kliknij lewym przyciskiem myszy na ikonie projektu w drzewie projektów zaznaczając go, a potem z menu głównego wybierz File New File. Następnie z kategorii Persistence wybierz typ pliku Entity Class. Kliknij przycisk Next >. b) Jako nazwę klasy podaj Bug, a jako nazwę pakietu encje. Pozostaw Long jako typ klucza głównego (Primary Key Type). Kliknij przycisk Finish. c) Ponownie obejrzyj zawartość pliku persistence.xml w trybie XML. Zwróć uwagę na element <class> dodany przez kreator tworzenia klasy encji. Atrybut ten oznacza, że utworzona klasa encji została wskazana jako zarządzana klasa trwała dla jednostki trwałości BugsJPPU. d) Przejdź do edycji utworzonego pliku Bug.java. Pod adnotacją @Entity dodaj wiersz z adnotacją @Table(name="BUGS"), aby obiekty klasy były składowane w tabeli o nazwie BUGS (domyślnie nazwa tabeli byłaby taka jak nazwa klasy w liczbie pojedynczej). Jeśli wprowadzona adnotacja zostanie podkreślona jako błąd, będąc

kursorem w wierszu z adnotacją naciśnij kombinację klawiszy Alt-Enter i wybierz zaproponowaną opcję Add import for javax.persistence.table. e) Dodaj w klasie Bug (poniżej pola id) dwa prywatne pola num typu String i description typu String. @Entity @Table(name="BUGS") public class Bug implements Serializable {... private String num; private String description;... f) W oknie edycji klasy Bug prawym klawiszem myszy wywołaj menu kontekstowe i wybierz opcję Refactor Encapsulate fields w celu utworzenia w klasie metod setter/getter dla pól (tzw. akcesorów). Upewnij się, że pola wyboru metod setter/getter dla atrybutów id, num i description są zaznaczone. Kliknij przycisk Refactor. g) Obejrzyj w kodzie klasy wygenerowane metody. h) Zdefiniuj w klasie encji Bug nazwane zapytanie do wyszukiwania błędów zawierających w opisie podane słowo kluczowe poprzez umieszczenie bezpośrednio po wierszu z adnotacją @Table wiersza z poniższą adnotacją @NamedQuery: @NamedQuery(name = "findbykeyword", query = "SELECT b FROM Bug b WHERE b.description LIKE :keyword") i) Zaimportuj klasę javax.persistence.namedquery. 4. Dodanie w klasie Main kodu zapisującego obiekty Bug do bazy danych i odczytującego obiekty Bug z bazy danych. a) Przejdź do edycji pliku Main.java. W oknie edycji klasy Main prawym klawiszem myszy wywołaj menu kontekstowe i wybierz opcję Persistence Use Entity Manager. Operacja ta spowoduje dodanie w klasie Main kodu tworzącego obiekt EntityManagerFactory i metody persist() ilustrującej sposób tworzenia obiektu EntityManager i realizacji transakcji.

b) Dodaj do kodu klasy Main dyrektywy import importujące klasy z pakietu encje i klasę biblioteczną java.util.list: import encje.*; import java.util.list; c) Przenieś deklarację i inicjalizację obiektu EntityManagerFactory z metody persist() na poziom klasy jednocześnie czyniąc go składową statyczną: private static EntityManagerFactory emf = javax.persistence.persistence.createentitymanagerfactory("bugsjppu"); d) Zastąp kod metodę persist() poniższą metodą addbug(), tworzącą obiekt Bug na podstawie podanego numeru i opisu, a następnie zapisującą go do bazy danych. public static void addbug(string pnum, String pdesc) { EntityManager em = emf.createentitymanager(); em.gettransaction().begin(); try { Bug b = new Bug(); b.setnum(pnum); b.setdescription(pdesc); em.persist(b); em.gettransaction().commit(); } catch (Exception e) { e.printstacktrace(); em.gettransaction().rollback(); } finally { em.close(); } } e) Dodaj w klasie Main metodę findbugs(), wyszukującą w bazie danych błędy, których opisy zawierają podane słowo kluczowe, poprzez nazwane zapytanie zdefiniowane w klasie encji. public static List<Bug> findbugs(string pkeyword) { EntityManager em = emf.createentitymanager(); List<Bug> wyn = null; try { wyn = em.createnamedquery("findbykeyword").setparameter("keyword", pkeyword).getresultlist(); } catch (Exception e) { e.printstacktrace(); } finally { em.close(); } return wyn; }

f) Dodaj w metodzie main() klasy Main kod zapisujący do bazy danych kilka obiektów Bug metodą addbug(), a następnie wyszukujący obiekty Bug metodą findbugs() i wyświetlający wyniki wyszukiwania na konsoli, np.: public static void main(string[] args) { addbug("b001", "Database server process does not start"); addbug("b002", "Database open() does not work"); addbug("b003", "Execution slow when on battery"); for (Bug b : findbugs("%base%")) { System.out.println("Num:" + b.getnum() + " Desc: " + b.getdescription()); } } g) Dodaj do projektu bibliotekę wymaganą do współpracy z wbudowaną bazą danych Derby. W tym celu wywołaj dla węzła Libraries w drzewie projektu opcję Add Library, a następnie z listy dostępnych bibliotek wybierz Java DB Driver i kliknij przycisk Add Library. j) Zapisz wszystkie zmiany (File Save All lub ikona w pasku narzędzi). h) Uruchom wbudowany serwer bazy danych wybierając z menu głównego opcję Tools Java DB Database Start Server. i) Uruchom aplikację wybierając opcję Run z menu kontekstowego dla projektu. Wyświetlone na konsoli dane odczytane z bazy danych mogą być poprzedzone komunikatami informacyjnymi i ostrzeżeniami zgłaszanymi przez Toplink.

Ćwiczenie 2 Celem ćwiczenia jest: 1) przygotowanie modelu obiektowego dla aplikacji obejmującego dwie powiązane ze sobą encje i odwzorowanie go w schemat relacyjnej bazy danych; 2) wygenerowanie za pomocą kreatora aplikacji Java EE opartej o JSF pracującej na utworzonym modelu i obsługującej trwałość poprzez Java Persistence API. Kroki ćwiczenia: 1. Utworzenie nowego projektu a) Uruchom narzędzie NetBeans IDE 6.1 b) Z menu głównego wybierz File New Project. Wybierz kategorię Web i typ projektu Web Application. Kliknij przycisk Next >.

c) Podaj nazwę projektu, AlbumyJP. Zwróć uwagę, że wraz zmianą nazwy projektu zmienia się Context Path czyli katalog wirtualny na serwerze WWW, który będzie prowadził do aplikacji. W polu Project Location powinien być wskazany katalog, w którym masz prawo zapisu. Jako Server powinien być wybrany GlassFish V2 a jako Java EE Version Java EE 5. Kliknij przycisk Next >. d) Zaznacz Java Server Faces w panelu Frameworks. Krok ten jest niezbędny, gdyż w ostatnim etapie ćwiczenia do prezentacji danych z bazy danych będzie wykorzystana aplikacja WWW oparta o JSF. Kliknij przycisk Finish.

2. Utworzenie jednostki trwałości, w ramach której obiekty aplikacji będą zachowywane w bazie danych a) Kliknij prawym przyciskiem myszy na ikonie projektu w drzewie projektów i z menu kontekstowego wybierz New Persistence Unit. b) W kolejnym oknie pozostaw niezmienioną zaproponowaną przez kreator nazwę jednostki trwałości i domyślną bibliotekę do obsługi trwałości (Persistence Library): TopLink. Jako źródło danych (Data Source) wybierz z listy połączenie z bazą danych jdbc/sample na lokalnym serwerze Derby. (W aplikacji Java EE połączenia z bazą danych będą realizowane poprzez źródło danych. Stąd inny zestaw pól w oknie kreatora niż w przypadku aplikacji Java SE tworzonej w ćwiczeniu 1.) Upewnij się, że pole wyboru Use Java Transaction API jest zaznaczone. Jako strategię tworzenia tabel w bazie danych (Table Generation Strategy) pozostaw Create, czyli tworzenie w momencie instalacji aplikacji jeśli nie istnieją. Kliknij przycisk Finish.

c) Obejrzyj zawartość wygenerowanego przez kreator pliku persistence.xml w trybie XML. Zwróć uwagę na elementy <provider> i <jta-data-source> zawierające wartości odpowiadające opcjom wybranym z list rozwijanych w oknie kreatora. 3. Utworzenie klas encji Album i Wykonawca. Z każdym albumem będzie związany jeden wykonawca. Każdy wykonawca będzie posiadał kolekcję albumów. a) Kliknij prawym przyciskiem myszy na ikonie projektu w drzewie projektów i z menu kontekstowego wybierz New Entity Class. b) Jako nazwę klasy podaj, a jako nazwę pakietu encje. Pozostaw Long jako typ klucza głównego (Primary Key Type). Kliknij przycisk Finish. c) Przejdź do edycji utworzonego pliku Album.java. Pod adnotacją @Entity dodaj wiersz z adnotacją @Table(name="ALBUMY"), aby obiekty klasy były składowane w tabeli o nazwie ALBUMY (domyślnie nazwa tabeli byłaby taka jak nazwa klasy w liczbie pojedynczej). Jeśli wprowadzona adnotacja zostanie podkreślona jako błąd, będąc kursorem w wierszu z adnotacją naciśnij kombinację klawiszy Alt-Enter i wybierz zaproponowaną opcję Add import for javax.persistence.table.

d) Dodaj w klasie Album (poniżej pola id) dwa prywatne pola tytuł typu String i wykonawca typu Wykonawca. Nie przejmuj się tym, że pole wykonawca zostało oznaczone jako błąd. Błąd ten wynika z faktu użycia jako typu pola klasy Wykonawca, która jeszcze nie została utworzona. @Entity @Table(name="ALBUMY") public class Album implements Serializable {... private String tytul; private Wykonawca wykonawca;... e) W celu utworzenia drugiej klasy, ponownie kliknij prawym przyciskiem myszy na ikonie projektu w drzewie projektów i z menu kontekstowego wybierz New Entity Class. f) Jako nazwę klasy podaj Wykonawca, a jako nazwę pakietu encje. Pozostaw Long jako typ klucza głównego (Primary Key Type). Kliknij przycisk Finish. g) Przejdź do edycji utworzonego pliku Wykonawca.java. Pod adnotacją @Entity dodaj wiersz z adnotacją @Table(name="WYKONAWCY"). Zaimportuj klasę javax.persistence.table podobnie jak wcześniej dla klasy Album. h) Dodaj w klasie Wykonawca (poniżej pola id) dwa prywatne pola nazwa typu String i albumy typu Collection<Album> (nie zapomnij o zaimportowaniu java.util.collection). @Entity @Table(name="WYKONAWCY") public class Wykonawca implements Serializable {... private String nazwa; private Collection<Album> albumy;... i) W oknie edycji klasy Wykonawca prawym klawiszem myszy wywołaj menu kontekstowe i wybierz opcję Refactor Encapsulate fields w celu utworzenia w klasie metod set/get dla pól. Upewnij się, że pola wyboru metod setter/getter dla atrybutów id, nazwa i albumy są zaznaczone. Kliknij przycisk Refactor. j) Wróć do edycji klasy Album i prawym klawiszem myszy wywołaj menu kontekstowe. Wybierz z menu kontekstowego opcję Refactor Encapsulate fields w celu utworzenia w klasie metod setter/getter dla pól. Upewnij się, że pola wyboru metod setter/getter dla atrybutów id, tytul i wykonawca są zaznaczone. Kliknij przycisk Refactor. k) Obejrzyj w kodzie wygenerowane metody.

4. Zdefiniowanie związku 1:N między klasami encji Wykonawca i Album a) Oznacz w klasie Wykonawca metodę getalbumy() adnotacją @OneToMany(mappedBy="wykonawca"). Zaimportuj klasę adnotacji jak wcześniej dla adnotacji @Table. Uwaga: Adnotacjami JPA można opisywać pola lub właściwości (tj. metody getter), ale należy konsekwentnie trzymać się jednego rozwiązania. W naszym przypadku opatrzymy adnotacjami metody getter, zgodnie z rozwiązaniem zaproponowanym przez kreator klasy encji dla identyfikatora encji. @OneToMany(mappedBy="wykonawca") public Collection<Album> getalbumy() { return albumy; } b) Oznacz w klasie Album metodę getwykonawca() adnotacją @ManyToOne. Zaimportuj klasę adnotacji. @ManyToOne public Wykonawca getwykonawca() { return wykonawca; } 5. Ostatnia część ćwiczenia to wygenerowanie za pomocą kreatora aplikacji JSF do przeglądania i edycji zawartości bazy danych. a) Kliknij prawym przyciskiem myszy na ikonie projektu w drzewie projektów i z menu kontekstowego wybierz New JSF Pages from Entity Class. Kliknij przycisk Next >. b) Wybierz wszystkie encje jako źródło dla aplikacji JSF klikając przycisk Add All. c) Kliknij przycisk Next >. W kolejnym oknie pozostaw wszystkie ustawienia domyślne i kliknij przycisk Finish.

d) Wynikiem działania kreatora jest zestaw czterech stron JSF dla każdej encji i towarzyszące im klasy pomocnicze po dwie dla każdej encji. Rozwiń wszystkie gałęzie drzewa projektu w oknie Projects, aby obejrzeć wygenerowane pliki. e) Dla każdej encji wygenerowane zostały cztery strony JSF (Detail.jsp, Edit.jsp, List.jsp, New.jsp), umożliwiające przeglądanie, edycję, dodawanie i usuwanie wykonawców i albumów. W celu zapoznania się z efektem działania kreatora otwórz plik album/list.jsp. Jest to strona JSF, której komponenty interfejsu odwołują się do zarządzanego komponentu JavaBean o nazwie album. Następnie otwórz plik konfiguracyjny aplikacji JSF faces-config.xml. Znajdź deklarację zarządzanego komponentu album. Jest on obiektem wygenerowanej przez kreator klasy AlbumController obsługującej komunikację z bazą danych dla encji Album. Podejrzyj źródło klasy AlbumController. Znajdź w klasie adnotacje wstrzykujące obiekty UserTransaction i EntityManagerFactory. Obejrzyj wywołania metod Java Persistence API w metodach klasy. f) Zapisz wszystkie zmiany (File Save All lub ikona w pasku narzędzi). g) Uruchom aplikację wybierając opcję Run File z menu kontekstowego dla pliku welcomejsf.jsp.

h) Dodaj dwóch wykonawców, a następnie po dwa albumy dla każdego z nich. Przykładowo, w celu dodania wykonawcy wybierz link List of wykonawca, następnie New Wykonawca, wprowadź nazwę i wybierz link Create. Uwaga: Wygenerowana aplikacja zawiera teksty w języku angielskim. Oczywiście można zmodyfikować kod poszczególnych stron tłumacząc teksty nagłówków i opisy linków na język polski.

Ćwiczenie 3 Celem ćwiczenia jest wygenerowanie biblioteki klas encji dla istniejącego schematu relacyjnej bazy danych. Taka biblioteka może następnie być wykorzystywana i współdzielona przez aplikacje Java SE i Java EE działające na bazie danych. Kroki ćwiczenia: 1. Utworzenie nowego projektu a) Uruchom narzędzie NetBeans IDE 6.1 b) Z menu głównego wybierz File New Project. Wybierz kategorię General i typ projektu Java Class Library. Kliknij przycisk Next >. c) Podaj nazwę projektu OrdersLibrary. W polu Project Location powinien być wskazany katalog, w którym masz prawo zapisu. Kliknij przycisk Finish. 2. Utworzenie jednostki trwałości, w ramach której obiekty aplikacji będą zachowywane w bazie danych a) Kliknij prawym przyciskiem myszy na ikonie projektu w drzewie projektów i z menu kontekstowego wybierz New Persistence Unit. b) W kolejnym oknie pozostaw niezmienioną zaproponowaną przez kreator nazwę jednostki trwałości i domyślną bibliotekę do obsługi trwałości (Persistence Library): TopLink. Jako połączenia JDBC (Database Connection) wybierz z listy połączenie z bazą danych sample na lokalnym serwerze Derby. Jako strategię tworzenia tabel w bazie danych (Table Generation Strategy) pozostaw Create, czyli tworzenie w momencie instalacji aplikacji jeśli nie istnieją. Kliknij przycisk Finish. c) Obejrzyj zawartość wygenerowanego przez kreator pliku persistence.xml w trybie XML. Zwróć uwagę na elementy <provider> i <property> zawierające wartości odpowiadające opcjom wybranym w oknie kreatora. Sprawdź czy zarówno właściwość toplink.jdbc.user i toplink.jdbc.password mają wartość app i jeśli nie to popraw zawartość pliku. 3. Utworzenie za pomocą kreatora zbioru encji na podstawie istniejących tabel w bazie danych. a) Kliknij prawym przyciskiem myszy na ikonie projektu w drzewie projektów i z menu kontekstowego wybierz New Entity Classes from Database. b) Z listy zdefiniowanych w środowisku NetBeans połączeń z bazą danych wybierz połączenie z bazą danych sample na wbudowanym serwerze Derby. c) Następnie z listy tabel do wyboru, przy zaznaczonym polu wyboru Include related tables, zaznacz myszą tabelę ORDERS i kliknij przycisk Add >.

d) Zwróć uwagę, że dzięki opcji Include Related Tables automatycznie zostały wybrane wszystkie tabele tworzące sieć połączeń zawierającą wskazaną tabelę ORDERS. Kliknij przycisk Next >. e) W kolejnym oknie kreatora jako nazwę pakietu wprowadź encje. Pozostaw zaproponowane nazwy klas encji dla poszczególnych tabel i pozostałe opcje. Kliknij przycisk Finish. f) Obejrzyj wynik działania kreatora. Rozwiń drzewo projektu i obejrzyj wygenerowane klasy encji. Obejrzyj zawartość pliku persistence.xml w trybie XML. Zwróć uwagę na elementy <class> dodane przez kreator, wskazujące wygenerowane klasy jako zarządzane klasy trwałe dla jednostki trwałości OrdersLibraryPU. g) Zbuduj projekt, wybierając z menu kontekstowego węzła projektu opcję Build. Wynikiem powinien być plik JAR ze skompilowaną biblioteką.