Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB)...

59
Enterprise JavaBeans 3.0 Jacek Laskowski http://www.JacekLaskowski.pl Politechnika Poznańska – Poznań, 07.12.2007, wersja 1

Transcript of Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB)...

Page 1: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Enterprise JavaBeans 3.0

Jacek Laskowskihttp://www.JacekLaskowski.pl

Politechnika Poznańska – Poznań, 07.12.2007, wersja 1

Page 2: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

O mnie...● Entuzjasta technologii Java EE 5● Założyciel i lider Warszawa JUG● Członek zespołów rozwojowych Apache Geronimo,

Apache OpenEJB, Apache ServiceMix, Apache ActiveMQ, Apache XBean

● Uczestnik programów NetBeans Community Acceptance Test (NetCAT) 5.0, 5.5 i 6.0

● Prowadzi Notatnik Projektanta Java EE - http://www.JacekLaskowski.pl

● Założyciel Polskiej Grupy Użytkowników Technologii BEA (PLBUG)

● Służbowo: konsultant oprogramowania w IBM

Page 3: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Certyfikacja SCBCD 5

Page 4: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Literatura

Page 5: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Specyfikacje

Page 6: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Enterprise JavaBeans 3.0● Enterprise JavaBeans (EJB) – rozproszony

model komponentów aplikacyjnych ● Część Java EE 5● Specyfikacja EJB3 zatwierdzona 2 maja 2006r.● Implementacje:

– GlassFish – referencyjna implementacja Java EE 5– Apache Geronimo 2 z Apache OpenEJB 3– IBM WebSphere Application Server 6.1 z EJB 3.0

Feature Pack– BEA WebLogic Server 10– JBoss AS 4.2.2 z dodatkiem EJB 3.0

Page 7: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Fundamenty EJB3● POJO (ang. Plain-Old Java Object) – powrót do

korzeni – JavaBeans● Konfiguracja przez nadpisywanie (ang.

configuration by exception)● Java SE 5 a przede wszystkim adnotacje● Wstrzeliwanie zależności (ang. DI –

dependency injection)● Interceptory (ang. interceptors)● Plik jar jako format dystrybucji

Page 8: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Projekty otwarte a EJB3● Kształt EJB3 pod wpływem projektów otwartych

(ang. OSS – open source software)– Spring Framework– Hibernate– XDoclet– AspectWerkz/AspectJ– ...wiele innych

Page 9: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Rezultat prac nad EJB3● Intuicyjne tworzenie komponentów

biznesowych● Bezinwazyjność – realizujemy założenia

biznesowe a nie specyfikacji● Dowolne Java IDE – Brak wymagań odnośnie

środowiska programistycznego● Możliwość uruchomienia komponentów

encyjnych w ramach Java SE● Uproszczone testowanie poza środowiskiem

serwera aplikacyjnego

Page 10: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Typy komponentów EJB3● Bezstanowe ziarno sesyjne (ang. SLSB –

stateless session bean)● Stanowe ziarno sesyjne (ang. SFSB – stateful

session bean)● Ziarno sterowane komunikatami (ang. MDB –

message-driven bean)● Komponent encyjny – encja (ang. entity bean)

Page 11: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Przeznaczenie biznesowe komponentów● Ziarno sesyjne – nietrwały, ulotny, modeluje

akcje (na encjach)– SLSB – agent bezstanowy (czasownik)– SFSB – podobnie jak SLSB tyle, że dla wybranego

klienta – utrzymuje jego stan (rzeczownik)● Ziarno sterowane komunikatami –

asynchroniczna komunikacja● Encja – trwały (najczęściej baza danych)

– Encja – byt (rzeczownik)

Page 12: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Konfiguracja przez nadpisywanie● ang. Configuration by exception (CbE)● Brak konfiguracji = w użyciu domyślne

parametry konfiguracyjne● Porządek ważności parametrów

konfiguracyjnych– Domyślne wartości (np. @Local, REQUIRED,

@PermitAll)– Annotacje (np. @Stateless)– Deskryptor instalacji (META-INF/ejb-jar.xml)

Page 13: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Korzyści CbE● Szybkie tworzenie komponentów● Uproszczone prototypowanie● Możliwość nadpisywania wartości

konfiguracyjnych na życzenie, np. per środowisko

● Stosowanie annotacji jako dokumentacja kodu i możliwe nadpisanie w deskryptorze instalacji

Page 14: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Typy interfejsów● Interfejs biznesowy

– Lokalny (@Local)– Zdalny (@Remote)

● Interfejs usługi internetowej (ang. web services) - @WebService per klasa lub @WebMethod per metoda (wyłącznie SLSB)

● Interfejs biznesowy MDB to interfejs usługi komunikatów, np. javax.jms.MessageListener dla JMS

Page 15: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Interceptory● Interceptor to metoda przechwytująca

zdarzenia związane ze stadiami rozwojowymi ziarna bądź wywołaniem jego metod biznesowych

● Wyłącznie dla komponentów sesyjnych i MDB● Annotacje @Interceptors na klasie komponentu● Domyślne interceptory w deskryptorze● InvocationContext – interfejs „komunikacyjny”

dla wielu interceptorów związanych z pojedyńczym komponentem

Page 16: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Interceptory rozwojowe● Interceptory zwrotne związane ze stadiami

rozwojowymi ziarna (ang. lifecycle callback interceptor methods)

● Annotacje – @PostConstruct– @PreDestroy– @PostActivate– @PrePassivate

● Sygnatura: void metoda() i void metoda(InvocationContext)

Page 17: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Interceptory biznesowe● Interceptory biznesowe (ang. business method

interceptors) uruchamiane przed wywołaniem metod biznesowych

● @AroundInvoke bądź around-invoke w DD● Sygnatura metody:

public Object metoda(InvocationContext) throws Exception

Page 18: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Sytuacje wyjątkowe● Wyróżniamy wyjątki aplikacyjne i systemowe● Wyjątki aplikacyjne – związane z działaniem

biznesowym komponentu, w ramach aplikacji (deklaracja poprzez throws)

● @ApplicationException – dowolna klasa wyjątku kontrolowanego lub nie, która przekazywana jest klientowi bezpośrednio

● application-exception w deskryptorze instalacji (ejb-jar.xml)

● Obsługa transakcji poprzez element rollback

Page 19: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Sytuacje wyjątkowe - cd.● Wyjątki systemowe – związane z działaniem

komponentu jako części serwera● RemoteException i RuntimeException i ich

podklasy (za wyjątkiem @ApplicationException)● Przykłady:

– Brak połączenia z bazą danych– Wyjątki związane z działaniem JNDI– Błędy wirtualnej maszyny Java (JVM)

● Opakowane jako javax.ejb.EJBException● W efekcie wycofanie transakcji i usunięcie

komponentu z systemu

Page 20: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Tworzenie ziarna EJB3● 2-krokowy proces:

1.Definiowanie interfejsu biznesowego2.Klasa ziarna jako implementacja interfejsu

biznesowego

Page 21: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Komponent EJB3 - przykład● Interfejs biznesowy - ExamScheduler

package pl.jaceklaskowski.exam.scheduler;

import java.util.List;

import pl.jaceklaskowski.exam.beans.Exam;

public interface ExamScheduler {

List<Exam> getExams();

}

Page 22: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Komponent EJB3 - przykład● Klasa komponentu

package pl.jaceklaskowski.exam.scheduler;

import java.util.List;

import pl.jaceklaskowski.exam.beans.Exam;

public class ExamSchedulerBean implements ExamScheduler {

public List<Exam> getExams() {

return ...;

}

}

● Nie, to nie wszystko... ;-)

Page 23: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Komponent EJB3 - przykład● Obowiązkowo określamy typ komponentu

package pl.jaceklaskowski.exam.scheduler;

import java.util.List;

import javax.ejb.Stateless;import pl.jaceklaskowski.exam.beans.Exam;

@Statelesspublic class ExamSchedulerBean implements ExamScheduler {

public List<Exam> getExams() {

return ...;

}

}

Page 24: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Pytania?

Nie! To jeszcze nie koniec...

Page 25: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Laboratoria - agenda● Utworzenie aplikacji przemysłowej z EJB3

– Ziarno sterowane komunikatami (MDB) z klientem zdalnym– Ziarno MDB– Usługa sieciowa JAX-WS jako bezstanowe ziarno sesyjne

(SLSB)● Wykorzystane oprogramowanie:

– Eclipse 3.3.1 z wtyczką dla Geronimo– NetBeans IDE 6.0

Page 26: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Pytania?

Nie! To jeszcze nie koniec...

Page 27: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Java Persistence API 1.0● Java Persistence API – interfejs

programistyczny do obiektowej obsługi danych składowanych w relacyjnych bazach danych

● Część Java EE 5 w ramach EJB3● Specyfikacja JPA 1.0 zatwierdzona 2 maja

2006r.● Implementacje:

– Apache OpenJPA– TopLink Essentials (TopLink JPA)– Hibernate EntityManager (Hibernate JPA)

Page 28: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Fundamenty JPA● POJO (ang. Plain-Old Java Object) – powrót do

korzeni – JavaBeans● Konfiguracja przez nadpisywanie (ang.

configuration by exception) – konfiguracja jest wyjątkiem od ogólnie przyjętej reguły

● Java SE 5 a przede wszystkim adnotacje● Wstrzeliwanie zależności (ang. DI –

dependency injection) – alternatywa dla JNDI● Plik jar jako format dystrybucji

Page 29: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Rezultat prac nad JPA● Intuicyjne tworzenie komponentów

biznesowych● Bezinwazyjność - realizujemy założenia

biznesowe a nie specyfikacji● Brak wymagań odnośnie środowiska

programistycznego – dowolne Java IDE● Możliwość uruchomienia komponentów

encyjnych w ramach Java SE● Uproszczone testowanie poza środowiskiem

serwera aplikacyjnego

Page 30: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Nomenklatura JPA● Encja – obiekt trwały (egzemplarz klasy encji)● Klasa encji – klasa reprezentująca stan encji● Zarządca encji – interfejs do zarządzania

kontekstem trwałym● Fabryka zarządców encji – interfejs do

tworzenia (aplikacyjnych) zarządców trwałych● Kontekst trwały – zbiór zarządzanych

obiektów trwałych, w którym dla danego identyfikatora trwałego istnieje pojedyńczy egzemplarz encji

Page 31: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Liczność bytów JPA

Za Pro EJB 3 – Java Persistence API – Apress strona 24

Page 32: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

EntityManagerFactory API● EntityManager createEntityManager()● EntityManager createEntityManager(Map map)● void close()● boolean isOpen()

Page 33: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Stadia rozwojowe encji● Encja nowa (ang. new)

– Utworzenie egzemplarza klasy encji– Brak identyfikatora trwałego– Encja nie związana z żadnym kontekstem trwałym

● Encja zarządzana (ang. managed)– Przypisany trwały identyfikator– Encja związana z kontekstem trwałym– Zmiany automatycznie zapisywane w bazie danych

Page 34: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Stadia rozwojowe encji kont.

● Encja odłączona (ang. detached)– Encja posiadająca identyfikator trwały– Nie związana z kontekstem trwałym– Zmiany nie mają odzwierciedlenia w bazie danych– „Zwykły” egzemplarz klasy encji

● Encja usunięta (ang. Removed)– Encja zarządzana oczekująca trwałego usunięcia

● Nie istnieje API do rozpoznania stadium rozwojowego encji, ale...

Page 35: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

EntityManager API● void clear()

– Czyści kontekst trwały– Wszystkie zarządzane encje przechodzą w stan

odłączony● <T> T merge(T entity)

– Synchronizuje stan encji z kontekstem trwałym– Przejście ze stanu odłączonego w stan zarządzany– UWAGA: Jedynie zwrócona encja jest zarządzana

● void persist(Object entity)– Utrwalenie egzemplarza encji– Encja w stanie zarządzanym

Page 36: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

EntityManager API kont.

● void refresh(Object entity)– Odświeża stan encji danymi z bazy danych– Nadpisuje zmiany stanu encji

● void remove(Object entity)– Usuwa encję

Page 37: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Pytania?

Nie! To jeszcze nie koniec...

Page 38: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Środowisko rozpoznawania JPA● Korzysta z Apache Maven 2.0.8● Tworzenie artefaktów projektowych w

wybranym IDE (obecnie Eclipse IDE 3.3)● Możliwość wyboru dostawcy JPA oraz bazy

danych– domyślnie Apache OpenJPA z Apache Derby

● Uruchomienie testów z poziomu IDE lub linii poleceń

Page 39: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Przykład #1 – cykl rozwojowy encji● Przykład demonstruje użycie interfejsu

EntityManager● Klasa LifecycleTest

– mvn -Dtest=LifecycleTest clean test

Page 40: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Konfiguracja JPA● META-INF/persistence.xml – plik

konfiguracyjny JPA (deskryptor XML dla JPA)● Opisuje konfigurację zarządcy encji

– Obowiązkowy atrybut: nazwa jednostki trwałej– Dostawca JPA– Obsługa transakcji– Klasy encji– Właściwości konfiguracyjne dostawcy JPA

● Może istnieć wiele definicji jednostek trwałych

Page 41: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

(Aplikacyjna) konfiguracja JPA<?xml version="1.0" encoding="UTF-8"?><persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL"> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <class>pl.jaceklaskowski.jpa.entity.Osoba</class> <class>pl.jaceklaskowski.jpa.entity.Projekt</class> <class>pl.jaceklaskowski.jpa.entity.PracownikSpecjalny</class> <class>pl.jaceklaskowski.jpa.entity.A</class> <exclude-unlisted-classes>true</exclude-unlisted-classes> <properties> <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver" /> <property name="openjpa.ConnectionURL" value="jdbc:derby:target/derbyDB;create=true" /> <property name="openjpa.ConnectionUserName" value="app" /> <property name="openjpa.ConnectionPassword" value="app" /> <property name="openjpa.jdbc.DBDictionary" value="derby" /> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(SchemaAction='add,deleteTableContents')" /> <property name="openjpa.Log" value="DefaultLevel=TRACE,SQL=TRACE" /> <!-- Breaks maven-surefire-plugin with TestNG --> <property name="openjpa.QueryCompilationCache" value="false" /> </properties> </persistence-unit></persistence>

Page 42: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

(Serwerowa) konfiguracja JPA

<?xml version="1.0" encoding="UTF-8"?><persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> <persistence-unit name="TestyEJB3EncjePU"> <jta-data-source>jdbc/TestyEjb3Postgres</jta-data-source> <properties> <property name="toplink.ddl-generation" value="drop-and-create-tables" /> <property name="toplink.logging.level" value="INFO" /> </properties> </persistence-unit></persistence>

Page 43: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Przykład #2 – JPA w Java SE● Przykład demonstruje konstrukcję samodzielnej

aplikacji korzystającej z JPA (w trybie poza kontenerem)

● Na podstawie artykułów w moim Wiki– OpenJPA jako dostawca JPA w samodzielnej

aplikacji– Java Persistence API w samodzielnej aplikacji– Hibernate jako dostawca JPA w samodzielnej

aplikacji

Page 44: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Przykład #3 – JPA w Java EE● Przykład demonstruje prostotę tworzenia

aplikacji korporacyjnej korzystającej z usług serwera aplikacyjnego Java EE 5

● Zlecenie obsługi elementów składowych kontenerowi (serwerowi)

● Ziarno bezstanowe EJB z JPA● Na podstawie artykułu w moim Wiki

– Aplikacja korporacyjna z JPA w trybie JTA z GlassFish i PostgreSQL

Page 45: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Pytania?

Nie! To jeszcze nie koniec...

Page 46: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Tworzenie encji● Zbudowanie klasy reprezentującej byt w

domenie biznesowej (POJO)● Uaktywnienie klasy jako klasy encji za pomocą

adnotacji– Adnotacje na polach– Adnotacje na metodach odczytujących (ang. setter)

● Definicja jednostki trwałej (persistence.xml)● Opcjonalna definicja mapowania

– Adnotacje– Plik META-INF/orm.xml

Page 47: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Podstawowe adnotacje JPA● @Entity – oznaczenie klasy jako klasy encji● @Id – oznaczenie pola jako typu identyfikatora

trwałego

Page 48: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Encja Prelegentpackage pl.jaceklaskowski.ejb3.testy.encje;

import java.io.Serializable;

import javax.persistence.Entity;import javax.persistence.Id;

@Entitypublic class Prelegent implements Serializable { private static final long serialVersionUID = 1L;

@Id private long id; private String imie; private String nazwisko;

public Prelegent() { }

public Prelegent(String imie, String nazwisko) { this.imie = imie; this.nazwisko = nazwisko; }

public long getId() { return id; }

// Zauważ zmianę widoczności metody, aby wybrani mogli z niej skorzystać void setId(long id) { this.id = id; }

// metody modyfikujace i odczytujące}

Page 49: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Mapujące adnotacje JPA● @Table – tabela podstawowa dla encji● @Column – definicja charakterystyki kolumny● @GeneratedValue

– generator – AUTO, IDENTITY, SEQUENCE, TABLE– strategy – domyślnie AUTO

● @OneToOne, @OneToMany, @ManyToMany, @ManyToOne

● @Basic z atrybutem fetch (domyślnie EAGER)

Page 50: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Konfiguracja mapowania JPA● Plik META-INF/orm.xml● Ważniejszy niż konfiguracja mapowania za

pomocą adnotacji● Każdej adnotacji odpowiada element

deskryptora mapowania

Page 51: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Przykładowy orm.xml

<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" version="1.0"> <entity class="pl.jaceklaskowski.jpa.entity.A"> <attributes> <basic name="str2"> <column name="col2" length="4" /> </basic> </attributes> </entity></entity-mappings>

Page 52: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Typy zarządców encji● Podział ze względu na zarządzanie nimi

– Aplikacyjny zarządca encji– Serwerowy zarządca encji

● Podział ze względu na transakcje– Zarządca encji JTA– Zarządca encji lokalny dla zasobu

Page 53: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Pytania?

Nie! To jeszcze nie koniec...

Page 54: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Java Persistence QL● Java Persistence Query Language (JPQL) –

język zapytań JPA łudząco podobny do SQL● Obowiązkowe klauzule SELECT ... FROM ...● EntityManager.createN...Query()

– N... = Named lub Native– Zapytania nazwane– Zapytania natywne

● @NamedQuery lub named-query● @NamedNativeQuery lub named-native-query

Page 55: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Query API● int executeUpdate()● List getResultList()● Object getSingleResult()● Query setParameter()

– Parametry w zapytaniu poprzedzone dwukropkiem– Parametry metody setParameter już bez niego

Page 56: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Pytania?

Nie! To jeszcze nie koniec, ale już blisko...

Page 57: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Lektura do poduszki● Specyfikacja JPA http://jcp.org/aboutJava/communityprocess/

final/jsr220/index.html

● Strona Java Persistence API http://java.sun.com/javaee/technologies/persistence.jsp

● Relacje z lektury specyfikacji JPA w Notatniku http://jlaskowski.blogspot.com/search/label/jpa

● Artykuły o JPA na moim Wiki– Aplikacja korporacyjna z JPA w trybie JTA z GlassFish i

PostgreSQL– Java Persistence API w samodzielnej aplikacji– OpenJPA jako dostawca JPA w samodzielnej aplikacji– Hibernate jako dostawca JPA w samodzielnej aplikacji

Page 58: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

Laboratoria - agenda● Utworzenie aplikacji przemysłowej z EJB3

– Ziarno sterowane komunikatami (MDB) z klientem zdalnym– Ziarno MDB z JPA w trybie JTA– Usługa sieciowa JAX-WS jako bezstanowe ziarno sesyjne

(SLSB) z JPA● Wykorzystane oprogramowanie:

– Eclipse 3.3.1 z wtyczką dla Geronimo– NetBeans IDE 6.0

Page 59: Enterprise JavaBeans 3 - jaceklaskowski.pl · Enterprise JavaBeans 3.0 Enterprise JavaBeans (EJB) – rozproszony model komponentów aplikacyjnych Część Java EE 5 Specyfikacja

I to na dziś tyle...Pytania?

Słucham?