Java EE - Rappels -

download Java EE  -  Rappels -

of 47

  • date post

    25-Jan-2016
  • Category

    Documents

  • view

    41
  • download

    1

Embed Size (px)

description

Java EE - Rappels -. Pierre-Johan CHARTRE pierre-johan.chartre@logica.com. J2EE Layers. Rappel des différentes couches. Définition : JAVABEAN. Classe Java respectant certaines conventions : - PowerPoint PPT Presentation

Transcript of Java EE - Rappels -

Java EE

Java EE - Rappels -Pierre-Johan CHARTREpierre-johan.chartre@logica.com

J2EE LayersRappel des diffrentes couches

Dfinition : JAVABEANClasse Java respectant certaines conventions : la classe doit tre "Serializable" pour pouvoir sauvegarder et restaurer l'tat d'instances de cette classela classe doit possder un constructeur sans argument (constructeur par dfaut)les proprits privs de la classe doivent tre accessibles publiquement via des mthodes accesseurs construit avec get ou set suivi du nom de la proprit avec la premire lettre transforme en majuscule

Le respect de ces conventions rend possible l'utilisation, la rutilisation, le remplacement et la connexion de JavaBeans par des outils de dveloppement.

33Dfinition : POJOPlain Old Java Object Nom marketing dsignant un simple objet Java !Terme invent en 2000 pour opposer :les EJB version 1.x & 2.x qui taient de vritable usines gaz :objets Java complexes dont les nombreuses contraintes techniques contraignent fortement leur utilisationCrations dun ensembles interfaces, ncessit dtendre des classe du framework et de redfinir tout un ensemble de mthodes aux simples Objets Javas classiques

Martin fowler says :The term was coined while Rebecca Parsons, Josh MacKenzie and I were preparing for a talk at a conference in September 2000. In the talk we were pointing out the many benefits of encoding business logic into regular java objects rather than using Entity Beans. 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.

44EJB 3.0Dans ce cours, nous nous concentrerons sur les EJB 3.0 venant de Java EE 5.

Il existe 3 types dEJBs :les EJB Entity (entit) utiliss dans la couche daccs aux donnesles EJB Session utiliss dans la couche mtier les EJB MDB (Message Driven Bean) utiliss dans la couche dintgration. Ils sont utiliss conjointement des MOMs (Message Oriented Middleware)

On peut distinguer :les EJBs pr Java EE 5 (EJB 1.x & 2.x)Objets java fortement contraints (pas sexy)Les EJBs depuis Java EE 5 (EJB 3.x) Ce sont des POJOs annots (sexy)

5Serveurs dApplicationUn AS (conteneur lourd) implmente les spcifications de Sun prend en charge la gestion de nombreux services:La concurrence des accsLa gestion des transactionsLa persistance des donnesLes objets distribusLa rception de messages asynchronesUn service de nommageLa scuritLa gestion du cycle de vie des EJBs6J2EE architecture

J2EE APIs The big picture

Java EE - PersistencE layer = JPA -Pierre-Johan CHARTREpierre-johan.chartre@logica.com

ContexteSGBD versus ApplicationBDD : donnes persistantemonde relationnelApplicationdonnes en mmoire dure de vie limit au temps dexcution de lapplication soit en Java lexcution de la JVMmonde objet

10ContexteSchmaTablescolonnesUne ligne = un tupleRelations entre table 1-11-nn-mInterrogation via SQL (Structured Query Language) Opration CRUDCreateReadUpdateDelete

Objets

Metadonnes :Fichiers de configurationAnnotations en JavaSGBDApplication11ProblmatiqueProblmes rsoudre :

i : Reprsentation des lments du SGBD au sein de lapplication (en mmoire)

ii : Dialogue avec le SGBD depuis lapplicationConnexion au SGBDEnvoi de requtes au SGBDExploitation des donnes envoyes par la base

12Une approche rpandue dORMi : Reprsentation des lments du SGBD

Objet TableProprit Objet Colonne TableMapping de TypeInstance Objet Tuple Table

Ces liens sont dfinis par des mtadonnesFichier de configuration .xmlAnnotation Java

13Une approche rpandue dORMii : Dialogue avec le SGBD depuis lapplication

Design pattern DAO (Data Access Object)Se connecte la SGBD pour mettre en uvre les oprations CRUDCreateentiteDAO.create( EntiteBean )ReadentiteDAO.findByCriteria ( EntiteBean ) : List entiteDAO.findById( cle ) : EntiteBeanUpdate :entiteDAO.update( EntiteBean )Delete :entiteDAO.delete ( EntiteBean )

Manipule des objets reprsentant des donnes de la base, ici nomms EntiteBean14JPA (Java Persistence Api)JPA 1.0Mcanisme de persistance des EJBs Entity EJB 3 de Java EE 5

ComporteReprsentation lment SGBD (i)EJB EntityPOJO annot (de type JavaBean)

Objet permettant opration CRUD (ii)EntityManager

Fichier de configurationpersistence.xml15JPA : EJBs Entitimport javax.persistence.Entity;import javax.persistence.Id;@Entitypublic class Customer { @Id private Long id; private String firstName; private String lastName; // getters et setters

// Constructeurs}

Par dfautNom entit = Nom classe @Table(name = schema = )

Nom proprit = Nom colonne@Column(name= , nullable = true/false,lenght = 100 )

16JPA : Relations bidirectionnelle 1-n@Entity@Table (name = t_category)public class Category{ () @OneToMany(mappedBy = category) private List products; ()}

@Entity@Table (name = t_products)public class Product{ () @ManyToOne @JoinColumn(name = category_fk) private Category category; ()}

17Relations : Eager vs Lazy loadingProblme du chargement des entits lies une entits (par des relations 1-1, 1-n, n-m)

On peut les charger au plus ttEager loadingIllustrationQuand je charge une instance de Category, tous les Product associs sont chargs et figurent dans la liste productsProblme de chargement rcursif

On peut les charger au plus tardLazy loadingIllustrationQuand je charge une instance de Category, tous les Product associs ne sont pas chargsCe nest que lorsque que je demande pour la premire fois daccder aux produits (Category.getProducts()) que la liste products est chargePlus de problme de chargement rcursifComportement par dfaut pour les relations 1-n et n-m

18JPA : EntityManagerCustomer c = new Customer();c.setId(123);c.setFirstName(dupond);

em.persist(c);

Customer c;

c = em.find(Customer.class, 123);CreateReadCustomer c;c = em.find(Customer.class, 123);c.setFirstName(durand);

em.merge(c);

Customer c;c = em.find(Customer.class, 123);

em.remove(c);UpdateDelete19em est lEntityManager

JPA : JPQLQuery query = em.createQuery("select p from Customer p where p.firstName=Durand'");Customer customer = (Customer) query.getSingleResult();if (customer != null) {()}

20JPA Query Langage : Langage de requtage de haut niveau

Query query = em.createQuery("select p.firstName from Customer p where p.id > 2");List noms = query.getResultList();for (Object nom : noms) {()}

Query query = em.createQuery("select p.firstName from Customer p where p.id > :id");query.setParameter("id", 1);List noms = query.getResultList();for (Object nom : noms) {()}

em est lEntityManager

JPA : TransactionsEntityTransaction transaction = em.getTransaction();transaction.begin();

// do database stuff

// Everything ok, committransaction.commit();

// Something went wrong (Exception thrown or something)transaction.rollback();21em est lEntityManager

JPA : Fichier persistence.xml

oracle.toplink.essentials.PersistenceProvider

com.isima.test.jpa.Categorycom.isima.test.jpa.Productcom.isima.test.jpa.Customer