Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
-
Nemesys1976 favorited this 4 months ago
Slideshow Transcript
- Slide 1: Java Persistence API JS Bournival 5 juin 2006
- Slide 2: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 2 2006
- Slide 3: Un peu d’histoire … Entity Beans EJB 1.0 -> 2.1 Complexité La courbe d’apprentissage trop prononcée Modèle de programmation non-intuitif Performance Le coût pour effectuer certaines requêtes était hors de proportions, le cycle de vie du container devenait un boulet Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 3 2006
- Slide 4: Un peu d’histoire … Les équipes IT se sont de plus en plus tourné vers d’autres produits sur le marché: Hibernate Le plus répandu dans la communauté présentement. Toutefois, la responsabilité de compatibilité avec différents serveurs d’application revient à la communauté. JDO Bien que JDO soit un standard, appuyé par la JSR 243 (JDO 2.0), cette technologie a reçu bien peu d’appui. Produits commerciaux (ex. TopLink) API propriétaires, onéreux, non-standard … Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 4 2006
- Slide 5: Les besoins Clairement, 2 grands besoins se dégagèrent, répondant à l’industrie et aux développeurs: Avoir une API simple d’utilisation, attrayante pour les 3. développeurs, appliquant les techniques apprises des cadres d’applications de la communauté open source. Avoir un standard respecté par les fournisseurs de serveurs 5. d’applications. Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 5 2006
- Slide 6: EJB 3.0 vs. Java Persistence API Le standard tant souhaité, émerge avec la JSR 220, soit EJB 3.0. Cette spécification se divise en 2 parties: EJB 3.0, modèles de composants d’affaires (SLSB, SFSB, MDB) JPA, Java Persistence API Toutefois, cette spécification sera scindée en 2, de façon à faire évoluer la JPA, qui n’a plus rien à voir avec les EJB, seule de son côté. Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 6 2006
- Slide 7: Java Persistence API: Quoi de neuf? On a littéralement évacué la complexité Plus besoin de ces innombrables interfaces (Home, Remote, Local …) On peut l’utiliser tant à l’extérieur, qu’à l’intérieur d’un container JEE Chaque entité est maintenant un simple POJO * Les mappings sont facilement mis en place, à l’aide d’annotations (Java SE 5.0) * POJO – n.m. [pôdjô] POJO is an acronym for Plain Old Java Object, and is favoured by advocates of the idea that the simpler the design, the better. - Wikipedia. \"We wondered why people were so against using regular objects in their systems and concluded that it was because simple objects lacked a fancy name. So we gave them one, and it's caught on very nicely.\" - Martin Fowler Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 7 2006
- Slide 8: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 8 2006
- Slide 9: Java Persistence API: Mappings de base EMP @Entity @Table(name=\"EMP\") ID EMP_NAME NAME SALARY PIC public class Employee { « BLOB » @Id private int id; @Column(name=\"EMP_NAME\") private String name; private double salary; @Lob private byte[] pic; // getters & setters ... } Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 9 2006
- Slide 10: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 10 2006
- Slide 11: Relations 4 types de relations à définir entre les entités de la JPA: One to One Many to One One to Many Many to Many Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 11 2006
- Slide 12: Relationship: Many to One @Entity @Entity @Table(name=\"EMP\") public class Department { public class Employee { @Id private int id; @Id private int id; private String dname; // getters & setters @JoinColumn(name=\"DEPT_ID\") @ManyToOne ... private Department d; } // getters & setters ... } DEPARTMENT EMP ID DNAME ID DEPT_ID PK PK FK Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 12 2006
- Slide 13: Relationship: One to Many @Entity @Entity @Table(name=\"EMP\") public class Department { public class Employee { @Id private int id; @Id private int id; private String dname; @ManyToOne @OneToMany(mappedBy=\"d\") private Collection<Employee> emps; @JoinColumn(name=\"DEPT_ID\") private Department d; // getters & setters ... // getters & setters } ... } DEPARTMENT EMP ID DNAME ID DEPT_ID PK PK FK Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 13 2006
- Slide 14: Relationships: One to One @Entity @Entity @Table(name=\"EMP\") public class ParkingSpace { public class Employee { @Id private int id; @Id private int id; private int lot; private String location; @JoinColumn(name=\"P_SPACE\") @OneToOne @OneToOne(mappedBy=\"space\") private ParkingSpace space; private Employee emp; // getters & setters // getters & setters ... ... } } PARKINGSPACE EMP ID LOT LOCATION ID P_SPACE PK PK FK Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 14 2006
- Slide 15: Relationships: Many to Many @Entity @Entity @Table(name=\"EMP\") public class Project { public class Employee { @Id private int id; @Id private int id; private String name; @ManyToMany(mappedBy=\"p\") @JoinTable(name=\"EMP_PROJ\", private Collection<Employee> e; joinColumns= // getters & setters @JoinColumn(name=\"EMP_ID\"), ... inverseJoinColumns= } @ManyToMany @JoinColumn(name=\"PROJ_ID\")) private Collection<Project> p; } EMP_PROJ PROJECT EMP EMP_ID PROJ_ID ID NAME ID NAME SALARY PK PK PK,FK1 PK,FK2 Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 15 2006
- Slide 16: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 16 2006
- Slide 17: Héritage L’héritage est supporté dans la JPA. Pour y arriver, 3 stratégie de mappings sont proposées: Employee strategie 1 (single table + discriminator) -id -name strategie 2 (joined tables) -startDate strategie 3 (table per class) ContractEmployee NurunEmployee -dailyRate -vacation -term Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 17 2006
- Slide 18: Héritage: single table Cette stratégie applatit la hiérachie de classes dans une seule table contenant tous les attributs de la hiérarchie. Les spécialisations sont différiencées par un discriminateur. Employee -id -name EMP -startDate PK ID NAME START_DATE DAILY_RATE TERM VACATION ContractEmployee NurunEmployee EMP_TYPE -dailyRate -vacation -term Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 18 2006
- Slide 19: Héritage: joined table Cette stratégie imite la hiérachie de classes dans plusieurs table reliées. Ici aussi un discriminateur est nécessaire. Employee ContractEmployee -id PK,FK ID -name DAILY_RATE -startDate TERM EMP PK ID NAME START_DATE EMP_TYPE NurunEmployee PK,FK ID VACATION ContractEmployee NurunEmployee -dailyRate -vacation -term Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 19 2006
- Slide 20: Héritage: table per concrete class Ici, tous les attributs d’une classe + ses attributs hérités, sont mis ensemble dans une seule table. Une par classe feuille (concrete class). Les superclasses ne sont pas représentées dans cette stratégie. Employee -id -name -startDate ContractEmployee PK,FK ID NAME S_DATE NurunEmployee DAILY_RATE TERM PK,FK ID NAME S_DATE VACATION ContractEmployee NurunEmployee -dailyRate -vacation -term Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 20 2006
- Slide 21: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 21 2006
- Slide 22: Entity Manager: le cœur de la JPA Les entités, une fois annotées, ne peuvent se persister de par elles- mêmes. Elles ont besoins d’un engin, qui lui, performera les opérations sur la base de données, en concordance avec les mappings définis dans les annotations. Étape 1: mettre la main sur une instance EntityManager Étape 2: persister nos POJO Étape 3: … euh, il n’y a pas d’étape 3! Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 22 2006
- Slide 23: Entity Manager: petit exemple Regardons un petit exemple qui implique un EntityManager. Faisons-le à l’aide d’un Stateless Session Bean (EJB 3.0) tout simple. public class EmployeeServlet extends HttpServlet { @PersistenceUnit(unitName=\"emp\") EntityManagerFactory emf; public Employee find(int id) { void createEmployee() EntityManager em em = EntityManager = emf.createEntityManager(); emf.createEntityManager(); return em.find(Employee.class, id); Employee emp = new Employee(); } // apply setters } // ... em.persist(emp); } } Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 23 2006
- Slide 24: EntityManager: déclarer le persistence unit Le fichier persistence.xml, est l’endroit où l’on déclare notre persistence unit. C’est aussi là où l’on configure notre persistence manager. <?xml version=\"1.0\"?> <persistence> <persistence-unit name=\"emp\"> <jta-data-source>jdbc/EmployeeDS</jta-data-source> <!–- autres propriétés du persistence provider --> </persistence-unit> </persistence> persistence.xml Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 24 2006
- Slide 25: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 25 2006
- Slide 26: Queries La JPA introduit le JPA-QL, qui est, tout comme le EJBQL ou encore le HQL, un langage de requête du modèle objet, basé sur SQL. Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 26 2006
- Slide 27: Queries: NamedQueries On peut sauvegarder des gabarits de requête dans nos entités. C’est ce qu’on appelle une NamedQuery. Ceci permet : La réutilisation de la requête D’externaliser les requête du code. @Entity @NamedQuery(name=\"myQuery\", query=\"Select o from MyPojo o\") public class MyPojo { … } public class MyService { public void myMethod() { … List results = em.createNamedQuery(\"myQuery\").getResultList(); … } } Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 27 2006
- Slide 28: Queries: NativeQueries Une façon de faire des requête en SQL natif. Sert principalement à avoir plus de contrôle sur les requêtes à la base de donnée. public class MyService { public void myMethod() { … List results = em.createNativeQuery(“SELECT * FROM MyPojo“, MyPojo.class) .getResultList(); … } } Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 28 2006
- Slide 29: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 29 2006
- Slide 30: Transactions 2 façons de mettre en place les transactions: JTA En utilisant la Java Transaction API, typiquement in-container Resource-local En utilisant le modèle de transaction du persistence manager Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 30 2006
- Slide 31: Transactions: JTA Pour utiliser la JTA, il est requis de mettre la main sur la transaction en cours. public class MyServlet extends HttpServlet { … @Resource UserTransaction utx; public void doGet(…) { utx.begin() // persistence operations … utx.commit(); } } Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 31 2006
- Slide 32: Transactions: Resource-local Contrôllée manuellement. Tient compte uniquement de la transaction actuelle, indépendamment du serveur d’application. public class MyServlet extends HttpServlet { … public void doGet(…) { EntityManager em = emf.createEntityManager(); em.getTransaction().begin(); // persistence operations … em.getTransaction().commit(); em.close(); } } Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 32 2006
- Slide 33: Agenda Présentation Les mappings de base Relations Héritage EntityManager Queries Transactions Demo Support et outils Références Questions Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 33 2006
- Slide 34: Petite demo sympathique Amusons-nous tous ensemble avec: NetBeans 5.5 Glassfish (JEE 5.0) MySQL (5.0) Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 34 2006
- Slide 35: Support de l’industrie La JPA a fait concensus à JavaOne2006, tous les grands acteurs y trouvent leur compte, et jusqu’à preuve du contraire, vont supporter et endosser cette technologie. Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 35 2006
- Slide 36: Application server / persistence engine Les serveurs d’application ont tous placé leurs pions en vue de l’avènement de la JPA. Chacun a intégré un persistence manager de leur choix: -> Hibernate EntityManager JBoss AS -> SolarMetric Kodo (OpenJPA!) BEA Weblogic 9.2 -> Oracle TopLink Essentials Sun GlassFish -> Oracle TopLink Essentials Oracle 10g AS -> ??? IBM WS 7.0 (p-ê?) Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 36 2006
- Slide 37: Outils Open source Eclipse 3.2.x w/ DALI NetBeans 5.5 Commerciaux Oracle Jdeveloper BEA Workshop Studio (Eclipse++) JBoss IDE (Eclipse++) gratuit Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 37 2006
- Slide 38: References Web JSR 220 http://www.jcp.org/en/jsr/detail?id=220 Projet DALI http://www.eclipse.org/dali/ Glassfish https://glassfish.dev.java.net/ Hibernate EntityManager http://hibernate.org/299.html SolarMetric Kodo http://solarmetric.com/Software/Kodo/kodoejb.php Oracle Toplink http://www.oracle.com/technology/products/ias/toplink/JPA/index.html BEA dev2dev http://dev2dev.bea.com/persistence/ Blogs Mike Keith http://www.jroller.com/page/mkeith Gavin King http://blog.hibernate.org/ The Aquarium http://blogs.sun.com/theaquarium Bouquin Pro EJB 3: Java Persistence API http://apress.com/book/bookDisplay.html?bID=10093 Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 38 2006
- Slide 39: Questions? jean-sebastien.bournival@nurun.com Ext. 2112 Communication interactive et nouvelles technologies / Interactive Communications through New Technologies Page 39 2006

