Java EE Approfondi - Cours 2. Cours de 2 e année ingénieur Spécialisation «Génie Informatique»



Documents pareils
Tutoriel d installation de Hibernate avec Eclipse

Développement Web - Object Relational Mapping and Hibernate

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

La gestion de la persistance avec Hibernate. Hibernate et la gestion de persistance. La gestion de la persistance (1/2) Introduction

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Création d une application JEE

Compte Rendu d intégration d application

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Java DataBaseConnectivity

Application web de gestion de comptes en banques

Introduction à JDBC. Accès aux bases de données en Java

HIBERNATE - Persistance relationnelle en Java standard

TP Programmation Java / JDBC / Oracle

OpenPaaS Le réseau social d'entreprise

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

La base de données XML exist. A. Belaïd

Compiere. Installation et adaptation avec Hibernate. Travail de Bachelor. Thibaut Schorderet Septembre 2005

Les frameworks au coeur des applications web

République Algérienne Démocratique et Populaire. Université Abou Bakr Belkaid Tlemcen. Faculté des Sciences Département d Informatique

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Refonte front-office / back-office - Architecture & Conception -

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

CREATION WEB DYNAMIQUE

Accès aux bases de données

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

1. Installation d'un serveur d'application JBoss:

PHP 5. La base de données MySql. A. Belaïd 1

PHP 4 PARTIE : BASE DE DONNEES

Alfstore workflow framework Spécification technique

Devenez un véritable développeur web en 3 mois!

Réalisation d un couplage téléphonie-informatique pour la suite Novanet

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

2 Chapitre 1 Introduction

Plateforme PAYZEN. Définition de Web-services

Java et les bases de données

SUPPORT DE COURS / PHP PARTIE 3

Pratique et administration des systèmes

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Web Tier : déploiement de servlets

Création d un service web avec NetBeans 5.5 et SJAS 9

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Notes de cours : bases de données distribuées et repliquées

BIRT (Business Intelligence and Reporting Tools)

Olivier Mondet

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Bases de données relationnelles

Etude de cas : PGE JEE V2

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Remote Method Invocation (RMI)

Programmation d application Bases de données avec Java

TP2 : Client d une BDD SqlServer

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Une introduction à la technologie EJB (2/3)

Programmer en JAVA. par Tama

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

RMI le langage Java XII-1 JMF

Cours: Administration d'une Base de Données

SITE WEB E-COMMERCE ET VENTE A DISTANCE

I. MySQL : Serveur et SGBD

Projet Java EE Approfondi

Système de Virtualisation pour une application de gestion commerciale d entreprise

Premiers Pas en Programmation Objet : les Classes et les Objets

Projet M1 Sujet 21 : Développement d'un logiciel simplifié de type Business Object

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Programmation Objet Java Correction

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

SQL Historique

Programmation par composants (1/3) Programmation par composants (2/3)

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Générer du code à partir d une description de haut niveau

Introduction à la plateforme J2EE

TP1 : Initiation à Java et Eclipse

A QUOI SERVENT LES BASES DE DONNÉES?

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

RAPPORT DE STAGE GWT PRISE EN MAIN SERVLET - TEST DES DAO TELOSYS PLUGIN ECLIPSE WIZARD DATASET TELOSYS

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

TP1 : Initiation à Java et Eclipse

A QUOI SERVENT LES BASES DE DONNÉES?

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

Auto-évaluation Programmation en Java

1/ Présentation de SQL Server :

Gestion de stock pour un magasin

Transcription:

Java EE Approfondi - Cours 2 Cours de 2 e année ingénieur Spécialisation «Génie Informatique»

Présentation Lier l'orienté objet et la base de données relationnelle peut être lourd et consommateur en temps. Hibernate se propose de joindre ces deux univers, à travers le mapping objet/relationnel (Object-Relational Mapping ou ORM) Le terme ORM décrit la technique consistant à faire le lien entre la représentation objet des données et sa représentation relationnelle. On peut voir Hibernate comme une fine surcouche de JDBC qui lui ajouterait une dimension objet. 2

Rappel JDBC 3

JDBC L API JDBC (Java DataBase Connectivity) permet aux applications Java d'accéder par le biais d'une interface commune à des sources de données pour lesquelles il existe des pilotes JDBC (ex: BDD Oracle, MySQL, ). Il est constitué d un ensemble de classes permettant de développer des applications capables de se connecter à des serveurs de bases de données (SGBD). Pour lier notre programme à la BDD, nous devons utiliser un Driver spécifique à cette BDD. Ces Drivers JDBC sont disponibles pour tous les systèmes connus de bases de données relationnelles. Ex : oracle.jdbc.driver.oracledriver pour Oracle. Hibernate se chargera automatiquement de la connexion à la BDD, il suffira de la lui paramétrer et de lui fournir le Driver correspondant. 4

Rappels Persistance 5

Persistance A la fin d une session d utilisation d une application orientée objet toutes les données des objets existant dans la mémoire vive de l ordinateur sont perdues. Rendre persistant un objet c est sauvegarder ses données sur un support non volatile de telle sorte qu un objet identique à cet objet pourra être recréé lors d une session ultérieure. La persistance des données des objets peut se faire via une base de données relationnelle. 6

Persistance La gestion de la persistance des objets peut parfois être complexe : A quel moment se connecte-t-on à la BDD? Doit-on recréer tous les objets ou seulement les objets modifiés? Quelle transformation (ou mapping) utiliser pour adapter la structure des données relationnelles au modèle objet? Faut-il monter en mémoire l'ensemble des données utilisées par tous les objets impliqués dans une transaction en une seule fois? Ou extraire les données de la base au fur et à mesure que les objets sont exécutés? D où l utilité d utiliser un framework se chargeant d une partie de la gestion de la persistance. 7

8

Voici comment se présente très globalement l'architecture d'hibernate : 9

Hibernate permet de manipuler facilement les objets persistants mais demande une configuration rigoureuse. La dernière version d'hibernate (v3), permet de prendre en compte le traitement et la transformation des documents XML pour rendre leurs données facilement persistantes Sa configuration se fait par le biais de 2 type de fichiers : hibernate.properties ou hibernate.cfg.xml Ces 2 fichiers ont la même utilité : lier Hibernate à notre BDD et au Driver à utiliser. L unique différence étant que le second respecte la syntaxe XML. Les valeurs de hibernate.cfg.xml surchargent celles du fichier hibernate.properties si les deux fichiers sont présents. Nom_Classe.hbm : Les fichiers de mapping, qui permettent de lier la BDD avec les objets persistants. Ils respectent la syntaxe XML. 10

Etape 1 : Une fois que les librairies d Hibernate sont incluses au projet, nous devons tout d abord créer la BDD qui nous servira à stocker les objets persistants. (Hibernate peut également le faire tout seul à partir de JavaBean ou de POJO). On crée alors une Table différente par Objet Persistant en lui donnant un attribut id qui permettra à Hibernate de lui associer une clef primaire et ainsi de différencier les objets de même type (il doit par ailleurs être défini en auto_increment). Ex: CREATE TABLE Etudiant ( nom VARCHAR( 10 ) NOT NULL, prenom VARCHAR( 10 ) NOT NULL, age INT( 10 ) NOT NULL, id INT( 10 ) NOT NULL AUTO_INCREMENT ) 11

Etape 1 : De même, il nous faut créer la classe représentant l objet de la donnée Java que l on veut rendre persistante. Pour cela nous pouvons écrire une classe sous forme de POJO ou de JavaBean(conseillé). Le plugin d Eclipse que nous utiliserons permettra de générer automatiquement cette classe à partir des tables de la BDD. Ex : Classe Etudiant sous forme de JavaBean public class Etudiant implements Serializable{ // un JavaBean doit implémenter la classe Serializable private String nom; /* private String prenom; /* Les attributs doivent être privés. private int age; /* On les fera correspondre aux champs de la private int id; /* Table dans le fichier de mapping. Etudiant() { } // Le constructeur est vide public String getnom() { return Nom; } public void setnom(string nom) { this.nom = nom; } // Getter pour l attribut nom // Setter pour l attribut nom // On écrit tous les getter et setter } 12

Etape 2 : Créer le fichier de configuration hibernate.cfg.xml, il contient les informations de connexion à la BDD. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <!-- local connection properties --> <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property> //URL de ma BDD <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</property> //Driver à utiliser <property name="hibernate.connection.username">login</property> //Login <property name="hibernate.connection.password">password</property> //Password <property name="current_session_context_class">thread</property> <!-- dialect for MySQL --> <property name="dialect">org.hibernate.dialect.mysqldialect</property> //Mode de discussion entre Hibernate et la BDD // (existe par défaut pour chaque type de BDD) <property name="hibernate.show_sql">false</property> // Hibernate affiche ou non toutes les requetes SQL passées à la BDD <property name="hibernate.transaction.factory_class">org.hibernate.transaction.jdbctransactionfactory</property> <mapping resource="modele/eleve.hbm" /> // fichier de Mapping <mapping resource="modele/etudiant.hbm" /> // fichier de Mapping </session-factory> </hibernate-configuration> 13

Etape 3 : Créer le ou les fichiers de mapping permettant de relier un objet Java à une Table de la BDD. Ex : Etudiant.hbm <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping >// Package dans lequel seront stockés nos JavaBean <class name= "Modele.Etudiant" table="etudiant"> // Lien objet / table /* Le champs Id est différent des autres champs */ <id name="id" type="integer" column="id"><generator class="native"/></id> /* Différents champs de cette Table et en quel attribut il sera mappé */ <property name="nom" column="nom" type="string" not-null="true" length="10"/> <property name="prenom" column="prenom" type="string" not-null="true" length="10"/> <property name="age" column="age" type="integer" not-null="true" length="10"/> </class> </hibernate-mapping> 14

Etape 4 : Arrivés à ce niveau, nous avons complètement initialisé le mode de fonctionnement d Hibernate. Il ne reste plus qu à nous en servir. Au démarrage, Hibernate crée un objet SessionFactory. Une SessionFactory peut ouvrir des nouvelles Sessions. Une Session représente une unité de travail simplement "threadée", la SessionFactory est un objet global "thread-safe", instancié une seule fois. Pour simplifier cette partie, nous allons créer une classe d'aide HibernateUtil qui s'occupera du démarrage et rendra la gestion des Sessions plus facile. Son implémentation est donnée dans l aide d Hibernate. 15

HibernateUtil.java public class HibernateUtil { private static final SessionFactory sessionfactory; static { } try { // Crée l objet SessionFactory à partir de hibernate.cfg.xml sessionfactory = new Configuration().configure().buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getsessionfactory() { return sessionfactory; } 16

Etape 5: Nous pouvons maintenant ajouter des objets Etudiant dans la BDD comme suit : Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.begintransaction(); Etudiant e = new Etudiant(); // On crée l objet étudiant e.setage(21); e.setnom("gibbon"); e.setprenom("jean"); session.save(e); // On demande à Hibernate de le sauvegarder dans la BDD session.gettransaction().commit(); // On fait un commit HibernateUtil.getSessionFactory().close(); 17

Etape 5 bis : On peut également récupérer des objets de la BDD: Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.begintransaction(); List result = session.createquery("from Etudiant").list(); // requête HQL session.gettransaction().commit(); HibernateUtil.getSessionFactory().close(); Le langage que nous utilisons pour faire des requêtes à la BDD est propriétaire à Hibernate et se nomme le HQL. Hibernate générera le SQL approprié et l enverra à la BDD. Vous pouvez créer des requêtes plus complexes avec HQL, bien sûr. Il existe également des méthode de Session permettant d update, remove, etc 18

Webographie http://www.hibernate.org/hib_docs/v3/reference/fr-fr/html/ => Documentation officielle Hibernate v3 en Français http://www.hibernate.org/ => Site officiel http://defaut.developpez.com/tutoriel/java/eclipse/hibernate/ => Présentation d Hibernate et de son utilisation sous Eclipse 19