Nowy powiew od Słońca: EJB 3.0. Copyright Piotr Kochański & Erudis,

Podobne dokumenty
EJB 3.0 & JBoss Seam. 25 kwietnia 2007 Jacek Gerbszt 1

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

JAVA PERSISTENCE API CZĘŚĆ 2 ASPEKTY ZAAWANSOWANE. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych

Enterprise JavaBeans

Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Wprowadzenie do Enterprise JavaBeans 2.0

Bazy danych tworzenie aplikacji bazodanowych ORM / JPA

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Podejście obiektowe do relacyjnych baz danych Hibernate.

Wzorce logiki dziedziny

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

Programowanie komponentowe 5

Mapowanie obiektowo-relacyjne z wykorzystaniem Hibernate

ORM w Javie. Adam Michalik 2007

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Stanowe komponenty sesyjne

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Programowanie wielowarstwowe i komponentowe

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Komponenty sterowane komunikatami

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

1. Model ACID. 2. Deklaratywne zarządzanie transakcjami, atrybuty transakcji. 3. Propagacja transakcji. transakcje rozproszone, propagacja kontekstu

Enterprise JavaBeans 3.0

Java Enterprise Edition spotkanie nr 6. przygotował Jacek Sroka. Java Persistence API

Relacje. 1. Modelowanie relacji. - siedem rodzajów relacji J2EE. - relacje jedno i wielokierunkowe, - relacje reprezentowane przez kolekcje.

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

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 Techniki Bazodanowe

Pico. Wstęp do kontenerów IoC.

Usługa TimerService

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2016

Zasady generowania kluczy głównych Język Java Persistence Podstawowa architektura wielowarstwowych aplikacji w oparciu o wzorce oprogramowania

Relacje. 1. Modelowanie relacji. - siedem rodzajów relacji J2EE. - relacje jedno i wielokierunkowe, - relacje reprezentowane przez kolekcje.

Aplikacje w środowisku Java

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

1 Wprowadzenie do J2EE

Wzorce dystrybucji i wspólbieżności autonomicznej

Java Persistence API - zagadnienia zaawansowane

Podstawowe informacje o technologii Java EE 7

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

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

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

Wykład 8. SQL praca z tabelami 5

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

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

Dostęp do baz danych w aplikacjach Java EE

Hibernate. Adrian Gawor, Adam Klekotka, Piotr Kubisz. Technologie Biznesu Elektronicznego. 12 maja 2009

akademia androida Składowanie danych część VI

EJB 3.0 (Enterprise JavaBeans 3.0)

Programowanie w języku Java. Bazy danych SQLite w Javie

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

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej

Kurs programowania aplikacji bazodanowych

Tworzenie aplikacji dla Oracle Application Server 10g R3 w technologii EJB 3.0

Platforma J2EE i EJB. Oprogramowanie systemów równoległych i rozproszonych Wykład 9. Rola EJB na platformie J2EE. Dr inż. Tomasz Olas olas@icis.pcz.

Enterprise JavaBean 3.0

Programowanie komponentowe

Podstawowe wykorzystanie Hibernate

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

JBoss Application Server

PHP: bazy danych, SQL, AJAX i JSON

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Metody dostępu do danych

Tomasz Dobek.

Enterprise Java Beans Narzędzia i Aplikacje Java EE

Wzorce projektowe warstwy danych

Projektowanie aplikacji z bazami danych

Programowanie obiektowe

Budowa komponentów Enterprise JavaBeans

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Enterprise Java Beans wykład 7 i 8

Projektowanie obiektowe oprogramowania Wzorce architektury aplikacji (3) Wykład 11 Repository, Unit of Work Wiktor Zychla 2017

Wprowadzenie do Doctrine ORM

Enterprise JavaBeans (EJB)

Klasy abstrakcyjne i interfejsy

Karolina Rusin, Paweł Biczysko, Michał Olejnik. 11 maja 2009

Struktura drzewa w MySQL. Michał Tyszczenko

Zaawansowane aplikacje internetowe

Polimorfizm. dr Jarosław Skaruz

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

Database Connectivity

Dokumentacja do API Javy.

Rola EJB na platformie Java EE. Enterprise JavaBeans (EJB)

JPA Java Persistance API

Programowanie w języku Java WYKŁAD

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wybrane działy Informatyki Stosowanej

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Gdzie jest moja tabela?

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

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

Transkrypt:

Nowy powiew od Słońca: EJB 3.0

Wstęp

Agenda EJB podstawowe informacje Problemy EJB 1.X i 2.X Zmiany wprowadzone w EJB v. 3.0 uproszczone API nowe komponenty encyjne wzorce i antywzorce Przykład, czyli EJB w 5 min... live!

Co to jest EJB Problem: chcemy tworzyć oprogramowanie w architekturze komponentowej? klienci i komponenty muszą się komunikować przez sieć

Problemy architektury komponentowej

Middleware EJB jest warstwą pośrednią która dostarcza nam potrzebnych usług

EJB jako warstwa pośrednia Komponenty EJB żyją na serwerze i są przez niego zarządzane my zajmujemy się tylko logiką biznesową aplikacji, potrzebnych usług dostarcza serwer mamy swobodę wyboru klienta: telefon, WWW, aplikacja GUI, usługa sieciowa

Zalety EJB Standard przemysłowy Wsparcie producentów serwerów aplikacji (komercyjnych i darmowych, open source) Niezawodność Bezpieczeństwo Łatwa obsługa transakcji (także bardzo złożonych) Możliwość wykorzystania przez klientów dowolnego typu

Złożona technologia Wady EJB 2.X Duży nakład pracy przy tworzeniu komponentów i konfiguracji rozwiązanie: XDoclet Zbyt mała elastyczność w zakresie komunikacji z bazą danych komponenty encyjne EJB mają niewystarczającą funkcjonalność jako ORM Mało funkcjonalny język kwerend EJB-QL

Wady EJB 2.X, C.D. Brak możliwości wykorzystania dziedziczenia, polimorfizmu przez komponenty EJB Utrudnione przeprowadzanie testów jednostkowych (np. JUnitem) Utrudniona migracja aplikacji między serwerami różnych producentów, ze względu na komponenty encyjne każdy serwer ma swoje własne pliki konfiguracyjne

EJB 3.0 Radykalna zmiana Specyfikacja jest rozbita na dwie części główną (core): komponenty sesyjne, MDB obsługa trwałości komponenty encyjne (javax.persistence) Pełna wsteczna kompatybilność Wykorzystane doświadczenia mechanizm Annotations z XDoclet obsługa trwałości z Hibernate

EJB 2.X przykład public class CalcBean implements javax.ejb.sessionbean { //metody obsługi cyklu życia komponentu //z interfejsu SessionBean: ejbcreate(), //ejbremove(), ejbpassivate(),... public double add(double x, double y) { return x + y; zależność od zewnętrznego interfejsu wymuszona implementacja metod obsługi cyklu życia komponentu trzeba utworzyć jeszcze dwa interfejsy

EJB 3.0 przykład @Stateless @RemoteBinding (jndibinding="myapp/calc") @Remote ({Calc.class) public class CalcBean implements Calc { public double add(double x, double y) { return x + y; public interface Calc { public double add(double x, double y); Calc jest zwykłym interfejsem Kod komponentu nic nie wie, że będzie udostępniany zdalnie

EJB 3.0 vs. 2.X: najważniejsze zmiany Nie jest potrzeby deskryptor wdrożenia ejb-jar.xml Konfiguracja odbywa się poprzez mechanizm Annotations (@Stateless,...) Uproszczony interfejs programistyczny (API) komponenty nie muszą implementować żadnego zewnętrznego interfejsu ani obowiązkowych metod wywołań zwrotnych ejbcreate(), ejbpassivate() używamy miarę potrzeb Nie jest potrzebny interfejs bazowy (home interface)

EJB 3.0: komponenty encyjne Komponenty encyjne zostały całkowicie zmodyfikowane są zwykłymi klasami Java, których obiekty mogą być zapisywane w bazie danych Możemy używać wszystkich dostęp do mechanizmów OO dziedziczenie, polimorfizm,...

EJB 3.0: komponenty encyjne, C.D. Komponenty encyjne mają pełną funkcjonalność mostu relacyjno-obiektowego (podobnie jak Hibernate) EJB-QL rozbudowany, obiektowy język kwerend (SELECT, DELETE, UPDATE) Można używać kwerend SQL Komponenty encyjne mogą być używane niezależnie od serwera aplikacji, jak zwyczajny most R-O

Komponent enycjny: przykład @Entity @Table(name = "notatka") public class Notatka implements Serializable{ private long id; private String tytul; private String tresc; public Notatka(){ public Notatka(String t, String tr) { tytul = t; tresc = tr; //pozostałe metody get/set pominięte @Id @GeneratedValue public long getid() { return id;

Diagram... Związki między encjami

Związki między encjami @Entity @Table(name = "notatnik") public class Notatnik{ private Collection notatki; @OneToMany(... targetentity=notatka.class) public Collection getnotatki() { return notatki; @Entity @Table(name = "notatka") public class Notatka{ private Notatnik notatnik; @ManyToOne @JoinColumn(name = "notatnik_id") public Notatnik getnotatnik() { return notatnik;

EntityManager em; Praca z encjami (CRUD) //dodawanie Notatka n = new Notatka("tytul", "tresc"); em.persist(n); //zmiany n.settresc("inna treść"); em.merge(n); em.flush(); //szukamy notatki o id = 123 Notatka n = em.find(notatka.class, 123); //usuwanie em.remove(n);

EJB-QL, co nowego? dynamiczne kwerendy: EntityManager.createQuery() EntityManager.createNativeQuery() EJB-QL praktycznie pełna funkcjonalność SQL-a: group by, having, wewnętrzne i zewnętrzne złączenia, podzapytania, update, delete rzutowanie zapytania na dowolny typ SELECT NEW CustomerInfo(c.id, c.info, o.count) FROM Customer c JOIN c.orders o WHERE o.count > 100

Nowy EJB-QL, przykłady Query q = em.createquery( "select from Notatka n where n.tytul = :tyt"); q.setparameter("tyt", "taki tytuł"); List notatki = q.getresultlist(); Query del = em.createquery("delete from Notatka n where n.tytul = :tyt"); del.setparameter("tyt", "taki tytuł"); del.executeupdate(); Query updt = em.createquery("update Notatka n set n.tresc = 'ala ma kota' where n.tytul = :tyt"); updt.setparameter("tyt", "taki tytuł"); updt.executeupdate();

Odwrócenie kontroli Inversion of Control/Dependency Injection Skąd wziąć referencje do potrzebnych nam zasobów: instancji innych komponentów EJB źródeł danych (DataSource), itp. itd. Dwie możliwości wzorzec Service Locator, np. wyszukiwanie przez JNDI: Context.lookup("nazwa") IoC/DI IoC: określamy, jakie zasoby są nam potrzebne, a kontener nam ich dostarcza. Nie wyszukujemy ani nie inicjujemy tych zasobów!

Odwrócenie kontroli: przykład Skąd wziąć instancję EntityManager-a? @Stateless @RemoteBinding (jndibinding="notes/sekretarz") @Remote ({Sekretarz.class) public class SekretarzBean implements Sekretarz { @PersistenceContext protected EntityManager em; public void dodajnotatke(string tyt, String tr) { Notatka n = new Notatka(tyt, tr); em = new EntityManager(); //nie! em = Context.lookup("nazwa_jndi"); //nie! em.persist(n);

Odwrócenie kontroli: inny przykład @Stateless public class ABean implements A { @Resource (mappedname="java:/defaultds") DataSource mydb; @EJB (beanname="calcbean") Calc cal; public void metodadb(){ Connection conn = mydb.getconnection(); public double metodacalc(){ return cal.add(2, 2);

Wzorce i anty-wzorce Odwrócenie kontroli zamiast Service Locator (tam, gdzie warto) Nie ma potrzeby stosować Data Objects/Value Objects komponenty encyjne w wersji 2.X z lokalnym interfejsem były przyklejone do serwera, nie można było ich zwracać klientowi w wersji 3.0 nie ma tego problemu, encje mogą być złączane z warstwą trwałości odłączane od niej i modyfikowane przez klienta ponownie przyłączane do warstwy trwałości

Model obiektowy Komponenty EJB pozwalają na tworzenie poprawnego modelu obiektowego. Nie jest to proste, zwłaszcza dla komponentów encyjnych trzeba utworzyć przejście pomiędzy światem obiektów a światem SQL-a EJB 3.0 mają potrzebne do tego mechanizmy

Dziedziczenie Encje mogą dziedziczyć po sobie hierarchia dziedziczenia jest automatycznie odwzorowana w bazie danych kwerendy EJB-QL mogą być polimorficzne przykład...

Dziedziczenie, przykład @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "TYP_ZWIERZA", discriminatortype = DiscriminatorType.STRING) public class Zwierz implements Serializable{.. @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING) @DiscriminatorValue("PIES") public class Pies extends Zwierz{...

Dziedziczenie, szczegóły Strategie odwzorowania dziedziczenia w bazie SINGLE_TABLE jedna tabele z polem, które określa klasę konkretną (wymagane przez EJB 3.0 spec.) JOINED tabela złączona z bazową na każdą klasę dziedziczącą TABLE_PER_CLASS oddzielna tabela dla każdej klasy dziedziczącej Dla SINGLE_TABLE tabela wygląda następująco create table ZWIERZ( ID integer primary key, TYP_ZWIERZA varchar, NAZWA varchar, LICZBA_LAP ind);

Model obiektowy Komponenty encyjne pozwalają na tworzenie poprawnego i wygodnego modelu obiektowego Można odwzorować wiele komponentów encyjnych na jedną tabelę w bazie danych Można odwzorować jeden komponent na wiele tabel w bazie danych

Jeden komponent, wiele tabel

Jeden komponent, wiele tabel @Entity @Table(name = "NOTATNIK") @SecondaryTable(name = "WLASCICIEL") @JoinColumn(name = "WLASCICIEL_ID") public class Notatnik implements java.io.serializable{ public String getnazwa(){ return nazwa; @Column(name = "IMIE", table = "WLASCICIEL") public String getimie(){ return imie;

Wiele klas, jedna tabela

Wiele klas, jedna tabela Zwykła klasa Java, która będzie zawarta w klasie komponentu EJB @Embeddable public class Wlasciciel{ private String imie; private String nazwisko; //metody get/set...

Wiele klas, jedna tabela, C.D. @Entity @Table(name = "NOTATNIK") public class Notatnik{ private int id; private Wlasciciel wlasciciel; //pozostałe pola @Embedded @AttributeOverrides({ @AttributeOverride(name = "imie", column = @Column(name = "IMIE")), @AttributeOverride(name = "nazwisko", column = @Column(name = "NAZWISKO")) ) public Name getwlasciciel(){ return wlasciciel;

Model obiektowy - podsumowanie EJB 3.0 pozwala tworzyć obiektowy model aplikacji bez żadnych ograniczeń dla komponentów sesyjnych/mdb jest to oczywiste dla komponentów encyjnych mamy most relacyjno-obiektowy, pozwalający mapować dowolnie obiekty na model relacyjny danych

Message Driven Beans Komponenty zorientowane na komunikaty mają uproszczone API @MessageDriven(activationConfig = {@ActivationConfigProperty (propertyname="destinationtype", propertyvalue="javax.jms.queue"), @ActivationConfigProperty( propertyname="destination", propertyvalue="queue/testmdb")) public class TestMDB implements MessageListener{ public void onmessage(message msg){ System.out.println("jest wiadomość");

Przykład na żywo Serwer aplikacji: JBoss 4.0.4RC1 Eclipse + JBossIDE Komponent sesyjny, który zwraca aktualną datę i godzinę

Podsumowanie EJB 3.0 łatwiejsze w przyswojeniu większa funkcjonalność (komponenty encyjne) szybsze tworzenie oprogramowania Prezentacja + przykładowy projekt: http://www.erudis.pl/sc/ejb3 Kontakt: p.kochanski@erudis.pl