Académique Documents
Professionnel Documents
Culture Documents
Classes: DSI.3
La plupart des projets s’appuient sur une base de données pour gérer leurs données
persistantes. La récupération et/ou la mise à jour de ces données s’effectuent en général via
des requêtes SQL. En Java ceci s’effectue via l’API JDBC. Cette API présente
plusieurs inconvénients :
- - Nécessite l’écriture de nombreuses lignes de codes répétitives (basées sur sql)
- - La liaison entre les objets et les tables est un travail de bas niveau (manuel)
Les entités dans les spécifications JPA permettent d'encapsuler les données d'une table. Ce
sont de simples POJO. Une entité doit obligatoirement avoir les propriétés suivantes
1- Être déclaré avec l'annotation annotation @Entity ( du package javax.persistence.*)
2- Implémenter l’interface Serializable
3- Avoir un constructeur vide (sans arguments)
4- Posséder au moins un attribut déclarée comme clé primaire avec l'annotation @Id
L'API JPA propose plusieurs annotations pour supporter un mapping Objet/Relaionnel assez
complet. L’ensemble de ces annotation font partie du package javax.persistence.*
1
Le 20 avril 2009, Sun a été est racheté par Oracle Corporation.
Annotation Rôle
@Entity Cette annotation permet à une classe Java de type POJO d’être mappé vers une table de
la base de données
@Table Préciser le nom de la table concernée par le mapping. Cette annotation possède
plusieurs attributs, entre autres Name : spécifie le nom de la table
@Column Associer un champ de la table à la propriété (à utiliser sur la déclaration d’un attribut
ou un getter). Cette annotation possède plusieurs attributs, entre autres Name :
spécifie le nom de la colonne
@Id Associer un champ de la table à la propriété en tant que clé primaire
@ GeneratedValue Demander la génération automatique de la clé primaire au besoin.
Cette annotation possède plusieurs attributs, entre autres strategy qui précise
le type de générateur à utiliser : TABLE, SEQUENCE, IDENTITY ou AUTO.
La valeur par défaut est AUTO.
AUTO laisse l'implémentation générer la valeur de la clé primaire.
IDENTITY utilise un type de colonne spécial de la base de données.
TABLE utilise une table dédiée qui stocke les clés des tables générées.
@ Transient Demander de ne pas tenir compte du champ lors du mapping
Exemple :
import java.io.Serializable;
import javax.persistence.*;
1
@Entity 2
@Table(name="t_client")
public class Client implements Serializable {
4 @Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="t_id")
private int id;
@Column(name="t_nom")
private String nom;
@Column(name="t_prenom")
private String prenom;
public Client() {
3
Un EJB est un composant serveur qui encapsule une logique métier, qui peut être déployé
dans un serveur d’application Les appels aux méthodes par les clients de l’EJB sont
interceptés par le conteneur d’EJB du serveur d’application. Le conteneur d’EJB s’occupe de
B. Travail à faire
L’objectif de cet atelier est de développer un projet de type EJB qui porte la facette JPA. Le
projet EJB2 comportera initialement le fichier de configuration persistence.xml et les entités à
mapper.
Dans un premier temps, vous allez créer une nouvelle « datasource » au niveau de votre
serveur d’application WildFly. La « datasource » permet d’établir le lien entre le serveur
d’application et la base de données que vous allez utiliser.
Dans un second temps, vous allez demander à votre projet EJB d’utiliser cette « datasource ».
Ceci s’effectue au niveau du tag « jta-data-source » de votre fichier de configuration
« persistence.xml ».
Exemple : Supposons qu’on dispose d’une data source avec le nom JNDI
« java:/banqueDS » dans le serveur d’application WildFly. Cette datasource est relative à
une base de données nommé BanqueDB. Au niveau du projet EJB, et plus précisément dans
le fichier de configuration persitence.xml il faut rajouter le nom JNDI « java:/banqueDS »
dans le tag <jta-data-source> comme le montre la figure suivante.
2
Le même projet sera utilisé durant les prochains ateliers pour créer des composants EJB Stateless assurant les
opérations CRUD sur la base de données.
BanqueDB
Finalement, vous allez déployer votre projet EJB dans le conteneur EJB du serveur WildFly.
A cet effet, une nouvelle unité de persistance sera crée et le mapping entre vos classes Java
(entités) et les tables correspondantes da la base données sera effectué. La figure suivante
illustre l’architecture globale de l’application à mettre en place :
Pour rajouter une nouvelle datasource au serveur d’application wildfly, suivez les étapes
suivantes :
3
La version du serveur WildFly fournie dans le pack ISETBejaJEETools.rar, comporte le Management User
suivant :
- User = admin
- Password = adminpwd
- Etape5 : Choisissez une datasource de type ‘MySQL Datasource’. Cliquez sur Next
Mémorisez cette
valeur : le JNDI Name
java:/SchoolDS va être
utilisé par la suite dans
le fichier de config
persistence.xml
Exemple:
- Etape9 : Vérifiez que votre nouvelle datasource SchoolDS a été rajouté à la liste des
datasources du serveur WildFly.
- Etape1 : Cliquez sur ‘File>New> Other’. Dans l’écran qui s’affiche, tapez ‘ejb’ et
sélectionnez ‘EJB Project’. Cliquez sur ‘Next’
- Etape2 : Dans l’écran qui s’affiche, choisissez le nom de votre projet EJB :
edu.iset.schoolNomBinome.ejb. Dans le champ ‘Target runtime’, choisissez votre
serveur d’application WildFly. Cliquez sur ‘Finish’
- Etape3 : Pour déployer votre projet EJB sous le serveur Wildfly, dans l’anglet
‘Server’ cliquez droit sur la racine de votre serveur WildFly et sectionnez ‘Add and
remove’
Click
droit
- Etape4 : Sélectionnez votre projet EJB et cliquez sur ‘Add’. Cliquez sur ‘Finish’
A présent, votre projet EJB « edu.iset.schoolTeam1.ejb » a été déployé sous forme d’un
fichier qui porte l’extension .jar dans le serveur d’application WildFly (plus précisément
dans le dossier \standalone\deployments de votre serveur).
- Etape5 : Pour rajouter la facette JPA à votre projet EJB, cliquez droit sur la racine de
votre projet EJB « edu.iset.schoolTeam1.ejb » et selectionnez ‘Properties’. Dans le
menu gauche de l’écran qui s’affiche, choisissez ‘Project Facets’. Cochez ensuite
JPA. Votre projet porte à présent la facette JPA. Notez que le fournisseur (le
provider) de votre implémentation JPA n’est autre que le serveur d’application
Wildfly. Suite à cette étape, le fichier de configuration persistence.xml va être rajouter
à votre projet EJB.
Click
droit
<jta-data-source> java:/SchoolDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
- Etape8 : A cette étape, vous allez créer votre première entité « Etudiant » qui sera
mappé avec la table « Etudiant ». Pour ceci, commencez par créer une simple classe
Java nommé « Etudiant ». Cliquez-droir sur « ejbModuke » et selectionnez
New>Class.
Click
droit
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
@Entity
public class Etudiant implements Serializable{
@Id
private int cin;
private String nom;
private String prenom;
@Temporal(TemporalType.DATE)
private Date dateNaissance;
public Etudiant() {
super();
}
Quelle est le rôle de chaque annotation ? (la réponse est à rendre dans un compte
rendu)
- Etape9 : Pour rajouter l’entité Etudiant dans la liste de classe mappés dans le fichier
persistence.xml, il suffit de cliquer-droir sur le fichier persistence.xml> Synchronize
Class List
Click
droit
- Etape10 : Pour que votre serveur d’application prenne les nouvelles modifications du
projet EJB, redeployez de nouveau le projet « edu.iset.schoolTeam1.ejb » en cliquant
droit sur la racine du serveur Wildfly, et en selectionnal ‘Clean’ (ou bien, cliquez-
droit sur le projet « edu.iset.schoolTeam1.ejb » sous le serveur, ensuite choisissez
‘Full publish’)
Click
droit
Vérifiez le log du serveur. Que signifie la trace « Schema export complete » ? (la
réponse est à rendre dans un compte rendu)