PA165: Persistence Layer. Petr Adámek

Podobné dokumenty
public static void main(string[] args) { System.out.println(new Main().getClass().getAnnotation(Greet.class).text());

KIV/PIA 2013 Jan Tichava

Anotace a Hibernate. Aleš Nosek Ondřej Vadinský Daniel Krátký

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Technology Entry form Entry up-to-date? Internal links Faulty internal Possible internal links

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Tvorba informačních systémů

Vybrané partie z jazyka Java Spring a Enterprise JavaBeans (EJB)

PA165: Úvod do Java EE. Petr Adámek

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

Obsah přednášky. Technologie. Enterprise Java Beans. Enterprise Java Beans. EJB kontejner. Enterprise Java Beans (EJB)

Enterprise Java Beans 3.0

Spring framework 2.0. Roman Pichlík CZJUG

(Enterprise) JavaBeans. Lekce 7

Databáze v Java aplikacích, JPA Handout

Úvod do Entity Frameworku

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem

NOVINKY V JEE EJB 3.1. Zdeněk Troníček Fakulta informačních technologií ČVUT v Praze

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

Čipové karty Lekařská informatika

2 Axiomatic Definition of Object 2. 3 UML Unified Modelling Language Classes in UML Tools for System Design in UML 5

SenseLab. z / from CeMaS. Otevřené sledování senzorů, ovládání zařízení, nahrávání a přehrávání ve Vaší laboratoři

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

STARÁ DOBRÁ JAVA A PERSISTENCE S CACHÉ

Použití databází na Webu

Jak správně na Hibernate. Martin Hlavatý

Databázové a informační systémy

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Java a Caché IV: Manipulace s objekty

Úvod do datového a procesního modelování pomocí CASE Erwin a BPwin

JAVA. Aspekty (AOP) AspectJ

Úvod do Web Services

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

UJO Framework. revoluční architektura beans. verze

Object-relational mapping (JPA, Hibernate)

Co je nového v Java EE 6

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Server-side technologie pro webové aplikace

Project Life-Cycle Data Management

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

X33EJA Web Services. Martin Ptáček, KOMIX s.r.o.

Litosil - application

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Online galerie: využití J2EE s JPA Petr Bludský

JAVA EE ORGANIZÉR - SOFTWAROVÁ ARCHITEKTURA

COMPARISON OF OBJECT-RELATIONAL MAPPING WITH OBJECT-ORIENTED APPROACH. Jaroslav Ševčík

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

GUIDELINES FOR CONNECTION TO FTP SERVER TO TRANSFER PRINTING DATA

Použití PostgreSQL v. P2D Martin Swiech

Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Úvod do CORBY. Svetlozara Arabadzhieva

JAVA V Hibernate Java, letní semestr

2011 Jan Janoušek BI-PJP. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

X33EJA Enterprise Java. Petr Šlechta Sun Microsystems

Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

Návrhové vzory pro J2EE. Miroslav Beneš

Návrhové vzory pro J2EE

Tento materiál byl vytvořen v rámci projektu Operačního programu Vzdělávání pro konkurenceschopnost.

O Apache Derby detailněji. Hynek Mlnařík

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

RMI Remote Method Invocation

Semináˇr Java X JDBC Semináˇr Java X p.1/25

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Softwarové komponenty a Internet

Další vlastnosti Springu Moduly Springu. Spring Framework. Pavel Mička. Pavel Mička Spring Framework 1/18

Databázové systémy úvod

USING VIDEO IN PRE-SET AND IN-SET TEACHER TRAINING

MySQL sežere vaše data

Návrhové vzory Tvorba objektů

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Vladimír

Michal Podzimek

Databáze II. 1. přednáška. Helena Palovská

Správa a sledování SOA systémů v Oracle SOA Suite

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

Testovací metoda. Testovací metoda. public class SimpleTest {

Úvod do programovacích jazyků (Java)

Číslo projektu: CZ.1.07/1.5.00/ Název projektu: Inovace a individualizace výuky

DPKOM_06 Dědičnost entit a zpětná volání posluchači

Architektura, design, konstrukce

Chapter 7: Process Synchronization

Metadata. RNDr. Ondřej Zýka

Komponentový návrh SW

Budování architektury pomocí IAA

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

Typický prvek kolekce pro české řazení

Platformy / technologie. Jaroslav Žáček

Vytváření a použití knihoven tříd

ITICA. SAP Školení přehled Seznam kurzů

Škola: Střední škola obchodní, České Budějovice, Husova 9. Inovace a zkvalitnění výuky prostřednictvím ICT

JAVA Unit testing Java, zimní semestr

Transkript:

PA165: Persistence Layer Petr Adámek

Content: Persistence I. Introduction to data persistence Where to store data How to work with data (Persistence technologies in Java EE) Architecture of data persistence layer Introduction to ORM What is ORM Basic Principles JPA Introduction Entities in JPA JPA Components Entity Lifecycle PA165: Data Persistence I 2

Content: Persistence II JPA Advanced Mapping Querying JPQL Criteria API Alternatives EJB 2.x JDO JDBC Embedded SQL Spring JDBC ibatis Best practices PA165: Data Persistence I 3

INTRODUCTION INTO DATA PERSISTENCE LAYER PA165: Data Persistence I 4

Where to store data Data can be stored on different places Relational Database (RDBMS) Object Database XML Database DMS (Document Management System) CMS (Content Management System) Post-relational database (Caché) Temporary Hiearchicke Prostorove No-SQL Database Another Information System (CRM, ERP, etc.) PA165: Data Persistence I 5

Relational Databases The most frequent data storage for enterprise applications Relational data model is simple but very powerful Suitable and sufficient for most of common applications Good theoretical model (Relational Algebra, Relational Calculus) Simplicity => High Performance (eg. due simple optimizations) Proven and well established technology (40 years of development, tools, standards, reliability, high penetration, lots of experts, etc.) Data are separated from application and can be easily shared between different applications Independent on concrete platform or programming language PA165: Data Persistence I 6

Persistence Technologies With Object Model (ORM or other model conversion) Legacy EJB 2.x Hibernate JPA JDO With Relational Model JDBC Commons DB Utils Spring JDBC ibatis Embedded SQL PA165: Data Persistence I 7

Architecture of persistence layer Presentation Tier DTO Application Logic Entity Persistence/DAO Tier JDBC / SQL DB PA165: Data Persistence I 8

Architecture of persistence layer DAO (Data Access Object) design pattern Separation persistence and data access from business logic Allows to modify persistence implementation or replace persistence technology at all without affecting application logic. PA165: Data Persistence I 9

Transaction management Transaction are not controlled on DAO level Why? Single transaction can contain more operations provided by different DAO components Transaction management should be independent on persistent technology Transaction management will be discussed later in lecture focused on Service Layer PA165: Data Persistence I 10

INTRODUCTION TO ORM PA165: Data Persistence I 12

What is ORM Object-relational mapping (ORM) Technique for automatic conversion between object model and relational data model You work with objects, but they are stored in a traditional relational database. INSERT INTO people (id, name) VALUES (1, "Pepa"); Person p = new Person(1, "Pepa"); em.persist(p); em.gettransaction().commit(); UPDATE people SET name = "Honza" WHERE id = 2; Person p = em.find(person.class,2); p.setname("honza"); em.gettransaction().commit(); PA165: Data Persistence I 13

Why ORM As we already discussed, the most frequent storage is RDBMS But we usually want to work with Object Model Why Object Model? It is natural for object oriented programming language Working with Object Data Model is straightforward, friendly and easy See example PA165: Data Persistence I 14

Why ORM: JDBC example public String getpersonname(long personid) throws SQLException { PreparedStatement st = null; try { st = connection.preparestatement( "SELECT name FROM people WHERE id =?"); st.setlong(1, personid); ResultSet rs = st.executequery(); if (rs.next()) { String result = rs.getstring("name"); assert!rs.next(); return result; } else { return null; } } finally { if (st!= null) { st.close(); } } } PA165: Data Persistence I 15

Why ORM: JPA Example public String getpersonname(long personid) { Person p = em.find(person.class,personid); return p.getname(); } PA165: Data Persistence I 16

ORM: What We Get and Lost ORM Benefits Possibility to work with natural object model Portability between different RDBMS with different SQL Dialect Type checking at compile phase No runtime error in SQL statements Simplifies testing Simpler and clearer code More effective development (auto complete, access to JavaDoc, etc.) ORM drawbacks Less performance in some cases (ORM has some overhead). No access to advantages of relational model and features of RDBMS (e.g. storage procedures) PA165: Data Persistence I 17

Basic terms Pojmy, které byste měli znát JDBC, SQL, Transakce, Pojmy, které si definujeme Entita doménový objekt, který reprezentuje data ukládaná do databáze (např. osoba, faktura, předmět). DTO (Data Transfer Object) objekt, který slouží pro zapouzdření dat a jejich transport mezi komponentami. POJO (Plain Old Java Object) jednoduchá třída, na kterou nejsou kladeny žádné zvláštní požadavky. Nemusí implementovat žádné rozhraní, nemusí rozšiřovat žádnou jinou třídu, ani není závislá na žádné jiné třídě, balíku nebo frameworku. Jediné podmínky, které na ni mohou být kladeny, je přítomnost bezparametrického konstruktoru, a dodržení konvencí pro pojmenování get/set metod. PA165: Data Persistence I 18

Standards and Approaches Entity EJB (EJB 2.1/JSR 153; J2EE 1.4) Vyžaduje aplikační server s EJB kontejnerem. Entita je heavyweight komponenta, jejíž instance se nachází v EJB kontejneru a přístup k ní probíhá prostřednictvím vzdáleného volání metod. Problém s latencemi (řeší se pomocí DTO, příp. DAO). CMP a BMP Od verze EJB 3.0 (JSR 220) je preferováno JPA. JDO (JDO 3.0/JSR 243) Obecný standard pro perzistenci v Javě. Není omezeno na relační databáze, objekty mohou být ukládány do úložiště libovolného typu JPA (JPA 2.0/JSR 317; Java EE 6) Java EE standard pro ORM inspirovaný Hibernate. Entita je lightweight POJO, který může být libovolně předáván mezi komponentami, lokálně i vzdáleně. PA165: Data Persistence I 19

EJB 2.x Entity public abstract class PersonBean implements EntityBean { private EntityContext context; public abstract Long getid(); public abstract void setid(long id); public abstract String getname(); public abstract void setname(string name); public Long ejbcreate (Long id, String name) throws CreateException { setid(id); setname(name); return id; } public void ejbpostcreate (Long id, String name) throws CreateException {} public void setentitycontext(entitycontext ctx) { context = ctx; } public void unsetentitycontext() { context = null; } public void ejbremove() {} public void ejbload() {} public void ejbstore() {} public void ejbpassivate() {} public void ejbactivate() {} } public PersonDTO getpersondto() { return new PersonDTO(getId(),getName()); } PA165: Data Persistence I 20

POJO Entity public class Person { private Long id; private String name; public Long getid() { return id; } public void setid(long id) { this.id = id; } public String getname() { return name; } public void setname(string name) { this.name = name; } public boolean equals(object o) { if (this == o) { return true; } if (getid() == null) { return false; } if (o instanceof Person) { return getid().equals(((person) o).getid()); } else { return false; } } } public int hashcode() { return id==null?0:id.hashcode(); } PA165: Data Persistence I 21

Mapping Definition Prostřednictvím anotací Definice objektového modelu i jeho mapování je na jednom místě. Větší přehlednost, jednodušší vývoj, snazší údržba. Prostřednictvím externího souboru (obvykle XML) nezávislost kódu entit na konkrétní technologii zajišťující ORM; možnost měnit mapování bez nutnosti modifikovat kód. Pomocí speciálních JavaDoc komentářů Z doby, kdy Java nepodporovala anotace. Viz XDoclet. PA165: Data Persistence I 22

Generování schématu databáze na základě definice mapování Máme vytvořené entity a definici mapování a chceme si ušetřit práci s vytvářením schématu databáze. Je možné automaticky vytvářet tabulky při prvním spuštění aplikace. Výhodné zejména při vývoji, kdy dochází ke změnám datového modelu. Vhodné, pokud je datový model zcela pod kontrolou naší aplikace. Problém, pokud se mění datový model a již máme v databázi existující data. Generování entit a definice mapování na základě schématu databáze Máme vytvořené schéma databáze a chceme si ušetřit práci s vytvářením entit a definicí mapování (např. vyvíjíme aplikaci pro přístup k již existujícím datům). Obvykle je nutné vygenerované soubory ručně opravit. PA165: Data Persistence I 23

JAVA PERSISTENCE API PA165: Data Persistence I 24

JPA Introduction Java Persistence API POJO Entity, inspirované ORM nástrojem Hibernate Jedná se o rozhraní, které implementují různé ORM nástroje od různých dodavatelů. Obsahuje základní funkce, jednotlivé implementace mohou prostřednictvím svého proprietárního rozhraní poskytovat řadu dalších služeb a možností. Verze a specifikace JPA 1.0 součást Java EE 5; vzniklo jako součást EJB 3.0 (JSR 220), lze jej ale použít zcela nezávisle. JPA 2.0 součást Java EE 6; JSR 317. ORM nástroje implementující JPA Hibernate TopLink, TopLink Essentials Eclipse Link (JPA 2.0) Open JPA PA165: Data Persistence I 25

Entity in JPA Entity Reprezentují jednotlivé doménové objekty. Jsou klasické POJO, tj. jednduché a obyčejné objekty. Entita má atributy, které reprezentují vlastnosti doménového objektu. Atributy jsou přístupné pomocí get/set metod. Entita musí mít bezparamentrický konstruktor a pokud má být používána k přenosu dat prostřednictvím RMI, musí být serializovatelná. Definice mapování Způsob uložení entity do relační databáze je definován pomocí anotací, nebo pomocí XML souboru. Důsledně se uplatňuje princip convention-over-configuration. PA165: Data Persistence I 26

JPA Entity @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String name; public Long getid() { return id; } public void setid(long id) { this.id = id; } public String getname() { return name; } public void setname(string name) { this.name = name; } public boolean equals(object o) { if (this == o) { return true; } if (getid() == null) { return false; } if (o instanceof Person) { return getid().equals(((person) o).getid()); } else { return false; } } } public int hashcode() { return id==null?0:id.hashcode(); } PA165: Data Persistence I 27

Example Working With Entity PA165: Data Persistence I 28

Configuration Konfigurace Uložena v souboru persistence.xml Může obsahovat více tzv. Persistence Unit. Persistence Unit Seznam tříd, které daná PU spravuje Konfigurace připojení k databázi JNDI název DataSource JDBC url, jméno, heslo Způsob řízení transakcí Způsob generování tabulek při spuštění aplikace Konfigurační parametry U JPA 1.0 nejsou názvy konfiguračních parametrů standardizovány, u JPA 2.0 již ano. Parametry mohou být nastaveny také při vytváření instancí EntityManagerFactory a EntityManager PA165: Data Persistence I 29

JPA Architecture Instance entity Instance A entity Instance B entity C Správa instancí entit Třída entity Třída A entity Třída B entity C Konfigurace, definice mapování Transakce 0..1 1 PersistenceContext 0..n 1 PersistenceUnit Spravuje 1 1..n Konfiguruje 1 1 EntityManager 0..n 1 EntityManagerFactory Umožňuje provádět operace s entitami PA165: Data Persistence I 30 Načítá konfiguraci PU Vytváří EntityManager

Entity Lifecycle Does not exist Serializace a deserializace Ukončení platnosti persistence contextu Klonování nebo kopie New Entity e = new Entity(); em.persist(e); Opuštění persistence contextu em.remove(e) Detached Managed Deleted em.merge(e) Všechny změny entity jsou při commitu transakce automaticky uloženy do DB em.persist(e); em.refresh(e); PA165: Data Persistence I 31

Quiz Entity Lifecycle PA165: Data Persistence I 32

RELATIONSHIPS AND ADVANCED MAPPING PA165: Data Persistence I 34

Example Relationships OneToOne OneToMany ManyToOne ManyToMany Uniderctional Bidirectional Cascade Operations PA165: Data Persistence I 35

QUERYING PA165: Data Persistence I 36

Querying JPQL Query language similar to SQL Supports scalar values, tuples, entities or constructed objects Criteria API From JPA 2.0 Allows to build query programatically PA165: Data Persistence I 37

Example JPQL Executing simple query Named queries Returning scalar values Returning tuples Constructing objects Criteria API Simple example PA165: Data Persistence I 38

OTHER TECHNOLOGIES PA165: Data Persistence I 39

EJB 2.x Incompatible with DAO Design Pattern Actually, DAO Pattern was designed as replacement for EJB 2.x Entities Requires Java EE Application server with EJB Container Entity is heavyweight component, instances are located in EJB Container and accessed remotely Problem with latencies (reason for introducing DAO and DTO design patterns) CMP versus BMP JPA is preferred from EJB 3.0 PA165: Data Persistence I 40

EJB 2.x Entity public abstract class PersonBean implements EntityBean { private EntityContext context; public abstract Long getid(); public abstract void setid(long id); public abstract String getname(); public abstract void setname(string name); public Long ejbcreate (Long id, String name) throws CreateException { setid(id); setname(name); return id; } public void ejbpostcreate (Long id, String name) throws CreateException {} public void setentitycontext(entitycontext ctx) { context = ctx; } public void unsetentitycontext() { context = null; } public void ejbremove() {} public void ejbload() {} public void ejbstore() {} public void ejbpassivate() {} public void ejbactivate() {} } public PersonDTO getpersondto() { return new PersonDTO(getId(),getName()); } PA165: Data Persistence I 41

Embedded SQL SQL written directly in the code Code is processed with special preprocessor before compiling Preprocessor process SQL expressions, checks their validity, performs type checking a translates them into expression of used programming language. Preprocessor requires database connection public String getpersonname(long personid) { String name; #sql { SELECT name INTO :name FROM people WHERE id = :personid }; return name; } PA165: Data Persistence I 42

Spring JDBC Spring library implementing Template Method design pattern Cleaner code, faster development, easier maintenance Unlike ORM or Embedded SQL does not solve the problem with errors in SQL expressions, that become apparent until runtime JdbcTemplate jdbctemplate = new JdbcTemplate(dataSource); public String getpersonname(long personid) { return jdbctemplate.queryforobject( "SELECT name FROM people WHERE id =?", String.class,personId); } PA165: Data Persistence I 43

Apache Commons DBUtils Another library implementing Template Method design pattern. QueryRunner queryrunner = new QueryRunner(dataSource); ResultSetHandler<String> stringhandler = new ScalarHandler<String>(); public String getpersonname(long personid) { return queryrunner.query( "SELECT name FROM people WHERE id =?", stringhandler,personid); } PA165: Data Persistence I 44

ibatis/mybatis Originally Apache project, retired, currently developed as MyBatis SQL Queries are separated from code In XML file In annotations (in new versions) More powerful that simple libraries like Spring JDBC, more lightweight than ORM PA165: Data Persistence I 45

Questions? PA165: Data Persistence I 46