Documente Academic
Documente Profesional
Documente Cultură
Ce support de cours concerne la mise en place dune application JEE avec un client.
La prsentation comprend 5 parties :
Partie 1. Cration dune base de donnes sous MySQL.
Partie 2. Cration dun conteneur EJB
Partie 3. Cration un conteneur Web pour accder lEJB
Partie 4. Cration dune Entreprise Application
Partie 5. Cration dun client web.
daccder aux objets et proposent des mthodes de CRUD (Create, Read, Update, Delete). Un EJB
(Entreprise Java Bean) sera pilot partir dune autre application distante ou locale (client EJB).
Web Services : Cette couche a pour but de dfinir des services qui pourront tre appels selon le
protocole SOAP. Ainsi les informations pourront circuler entre les applications sous forme de
messages XML. Cela peut servir faire communiquer deux applications qui peuvent tre codes
dans deux langages diffrents, en local ou distance.
1) Tlchargement de MySQL
Choisir ensuite votre systme dexploitation. Par exemple Windows 32 bits et lancer le
tlchargement.
Ou vous pouvez cliquer sur le lien No thanks, just take me to the downloads!
Remarquons que pendant linstallation, nous avons accs au numro de port (par dfaut 3309).
Si linstallation se passe bien elle devrait se terminer par lcran qui suit :
Lancer linstallation
En cliquant sur Add Table on peut ajouter une table qui par dfaut porte le nom table1.
Modifions ensuite le nom de la table en EMPLOYE et validons. Nous pouvons ensuite facilement
ajouter les champs NOM, PRENOM et AGE.
Sauvegarder le modle.
10
Utilisez le numro de port par dfaut donn lors de linstallation de MySQL (3306, 3309,).
Puis tester la connexion.
11
Au retour sur lcran principal, double-cliquez sur localhost . Une nouvelle fentre de SQL
Query souvre.
12
Valider les diffrentes tapes. La base_medecin apparat ensuite dans la colonne de gauche.
13
14
15
16
Dans la section Drivers, choisir MySQL et par un clic droit faire Connect Using.
17
18
19
20
21
22
Maintenant nous allons donner un nom JNDI (Java Naming and Directory Interface) notre
ressource. Ce nom sera celui utilis par le serveur dapplication pour retrouver la ressource.
Afin dviter toute confusion, le nom JNDI sera jdbc/base_medecin_JNDI:
23
24
25
26
Elle va configurer la couche JPA. Dans notre cas, nous allons utiliser limplmentation propose par
Eclipse.
Dans un premier temps nous allons crer une unit de persistance (faire Clic Droit sur
EJBModule1 et choisir New->Others).
27
Attention ne pas choisir une stratgie englobant la gnration des tables. Elles existent dj grce
au script SQL que nous avons utilis au dpart.
28
29
Dans un deuxime temps, nous allons crer des entits JPA. Comme prcdemment faire Clic
Droit / New / Other.
30
31
32
Etant donn quil sagit de la gnration dentits JPA, on peut choisir jpa comme nom de package.
Veuillez bien choisir java.util.List pour Collection Type (pour avoir plus de lisibilit).
33
Rappel :
java.util.Collection : il sagit de la classe racine de la hirarchie.
java.util.List : il sagit dune extension de collection fournissant les mthodes pour manipuler des
listes ordonnes.
Les entits JPA gnres apparaissent. Une entit pour chaque table de la base de donnes
Dans la classe Rv nous ajoutons un nouveau constructeur permettant de crer un rendez vous en
donnant une date, un client et un jour.
public Rv(Date jour, Clients client, Creneaux creneau)
{
this.jour = jour ;
this.idClient = client ;
this.idCreneau = creneau ;
}
Afin dviter davoir des rfrences circulaires qui peuvent gnrer des boucles infinies (notamment
lors de la conversion en XML par les web services), il est ncessaire dajouter le mot cl
transient dans les classes Creneaux, Medecins et Clients, lendroit o elles mappent avec
dautres objets sous forme de listes.
34
Clients.java
Medecins.java
Creneaux.java
Dans ce package, crer ensuite une classe java nomm par exemple : MedecinException.
35
36
37
Faire glisser le package jpa dans le dossier Packages de sources du projet JavaLibrary4 ,
pour obtenir larborescence suivante (ne pas faire attention aux erreurs) :
Ajouter la rfrence du projet JavaLibrary4 dans le projet EJBModule2 . Pour cela, faire
clic droit sur EJBModule2 > Proprits
38
Cliquer sur OK
39
Elle va utiliser la couche JPA. Dans notre cas, nous allons utiliser limplmentation propose par
EclipseLink.
40
41
42
43
Cet ensemble de classes, contient des interfaces distantes et locales pour implmenter les mthodes
du CRUD. Rappelons que CRUD dsigne les quatre oprations de base pour la persistance des
donnes, en particulier le stockage d'informations en base de donnes. Soit : Create, Read (ou
Retrieve), Update et Delete (ou Destroy).
Enfin nous allons crer un package nomme dao, qui reprsente linterface de lEJB pour laccs
aux donnes.
44
45
Ajoutons une Session Bean dans le package dao. Cette interface va permettre davoir plusieurs
mthodes sur une seule interface (contrairement aux classes du package ejb qui sont en fait une
interface par entit).
46
47
Fusionner maintenant les packages dao et ejb du projet JavaLibrary4 dans les packages de
mmes noms de EJBModule2 (dragndrop de leur contenu).
De la mme faon, dplacer le package jpa depuis JavaLibrary4 vers EJBModule2.
48
49
Le fichier Idao.java
package dao;
import java.util.*;
import jpa.*;
IdaoLocal.java
package dao;
import javax.ejb.Local;
@Local
public interface IdaoLocal extends Idao{
}
IdaoRemote.java
package dao;
import javax.ejb.Remote;
@Remote
public interface IdaoRemote extends Idao {
}
DaoJpa.java
package dao;
import javax.ejb.Stateless;
import javax.*;
import jpa.*;
import java.util.*;
import javax.ejb.*;
import javax.persistence.*;
import java.text.*;
//import javax.transaction.Transaction;
import medecin.exception.*;
@Stateless(mappedName = "Interface")
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class DaoJpa implements IdaoLocal, IdaoRemote {
50
@PersistenceContext
private EntityManager em;
// liste des clients
public List<Clients> getAllClients() {
try {
return em.createQuery("select c from Clients c").getResultList();
} catch (Throwable th) {
throw new MedecinException (th, 1);
}
}
// liste des mdecins
public List<Medecins> getAllMedecins() {
try {
return em.createQuery("select m from Medecins m").getResultList();
} catch (Throwable th) {
throw new MedecinException (th, 2);
}
}
// liste des crneaux horaires d'un mdecin donn
// medecin : le mdecin
public List<Creneaux> getAllCreneaux(Medecins medecin) {
try {
return em.createQuery("select c from Creneaux c join c.medecin m where
m.id=:idMedecin").setParameter("idMedecin", medecin.getId()).getResultList();
} catch (Throwable th) {
throw new MedecinException (th, 3);
}
}
// liste des Rv d'un mdecin donn, un jour donn
// medecin : le mdecin
// jour : le jour
public List<Rv> getRvMedecinJour(Medecins medecin, String jour) {
try {
return em.createQuery("select rv from Rv rv join rv.creneau c join c.medecin m where
m.id=:idMedecin and rv.jour=:jour").setParameter("idMedecin", medecin.getId()).setParameter("jour",
new SimpleDateFormat("yyyy:MM:dd").parse(jour)).getResultList();
} catch (Throwable th) {
throw new MedecinException (th, 4);
}
}
// ajout d'un Rv
// jour : jour du Rv
// creneau : crneau horaire du Rv
// client : client pour lequel est pris le Rv
public Rv ajouterRv(String jour, Creneaux creneau, Clients client) {
try {
Rv rv = new Rv(new SimpleDateFormat("yyyy:MM:dd").parse(jour), client, creneau);
em.persist(rv);
return rv;
} catch (Throwable th) {
throw new MedecinException (th, 5);
}
}
// suppression d'un Rv
// rv : le Rv supprim
public void supprimerRv(Rv rv) {
try {
em.remove(em.merge(rv));
} catch (Throwable th) {
throw new MedecinException (th, 6);
}
}
// rcuprer un client donn
public Clients getClientById(Long id) {
try {
return (Clients) em.find(Clients.class, id);
} catch (Throwable th) {
throw new MedecinException (th, 7);
}
51
}
// rcuprer un mdecin donn
public Medecins getMedecinById(Long id) {
try {
return (Medecins) em.find(Medecins.class, id);
} catch (Throwable th) {
throw new MedecinException (th, 8);
}
}
// rcuprer un Rv donn
public Rv getRvById(Long id) {
try {
return (Rv) em.find(Rv.class, id);
} catch (Throwable th) {
throw new MedecinException (th, 9);
}
}
// rcuprer un crneau donn
public Creneaux getCreneauById(Long id) {
try {
return (Creneaux) em.find(Creneaux.class, id);
} catch (Throwable th) {
throw new MedecinException (th, 10);
}
}
}
53
4) Dploiement de lEJB
4.1. Vrifier les proprits : Clic Droit, Properties
54
4.3. Dployer
Ensuite, le dploiement a russi et on peut constater que lEJB a t ajout la partie Applications
du serveur Glassfish.
55
56
57
Parmi les frameworks installs vous pouvez par exemple choisir Java Server Faces ou ne rien
choisir (il ny aura pas dexemple dutilisation du framework dans ce tutorial).
58
Il est possible de stocker cette classe dans un package rendezvous par exemple.
59
Utilisez le bouton parcourir pour slectionner linterface sur laquelle on va crer le service web.
Slectionner DaoJpa.
60
61
Pour crer le web service, nous allons faire une couche devant la partie DaoJpa de lEJB. Rappelons
que la partie DaoJpa contient un ensemble de mthodes contrlant laccs aux donnes.
62
package rendezvous;
import
import
import
import
import
import
javax.ejb.EJB;
javax.jws.*;
jpa.*;
dao.*;
dao.IdaoLocal;
java.util.*;
@WebService()
public class WSDaoJpa implements Idao {
@EJB
private IdaoLocal dao;
// web service numero 1
// liste des clients
@WebMethod
public List<Clients> getAllClients() {
return dao.getAllClients();
}
// web service numero 2
// liste des clients
@WebMethod
public List<Medecins> getAllMedecins() {
return dao.getAllMedecins();
}
// liste des crneaux horaires d'un mdecin donn
// medecin : le mdecin
@WebMethod
public List<Creneaux> getAllCreneaux(Medecins medecin) {
return dao.getAllCreneaux(medecin);
}
// liste des Rv d'un mdecin donn, un jour donn
// medecin : le mdecin, jour : le jour
@WebMethod
public List<Rv> getRvMedecinJour(Medecins medecin, String jour) {
return dao.getRvMedecinJour(medecin, jour);
}
// ajout d'un Rv, jour : jour du Rv
// creneau : crneau horaire du Rv, client : client pour lequel est pris le Rv
@WebMethod
public Rv ajouterRv(String jour, Creneaux creneau, Clients client) {
return dao.ajouterRv(jour, creneau, client);
}
// suppression d'un Rv, rv : le Rv supprim
@WebMethod
public void supprimerRv(Rv rv) {
dao.supprimerRv(rv);
}
// rcuprer un client donn
@WebMethod
public Clients getClientById(Long id) {
return dao.getClientById(id);
}
// rcuprer un mdecin donn
@WebMethod
public Medecins getMedecinById(Long id) {
return dao.getMedecinById(id);
}
// rcuprer un Rv donn
@WebMethod
public Rv getRvById(Long id) {
return dao.getRvById(id);
}
// rcuprer un crneau donn
@WebMethod
public Creneaux getCreneauById(Long id) {
return dao.getCreneauById(id);
}
}
63
64
Puis, faire un clic droit sur WsDaoJpa dans le projet WebApplication1. Choisir Test WebService.
Ceci permet de tester les web services directement partir dun navigateur !
65
66
67
Il peut arriver que cette partie ne fonctionne pas soit parce que vous navez pas
dploy correctement, soit parce que le port est dj utilis par une autre
application. Dans ces cas, vous aurez le message suivant
Si cest un problme de dploiement, il faut vrifier tous les paramtres prcdemment entrs. Si
cest un problme de port, il suffit de changer le port de glassfish.
Pour sassurer que cest bien un problme de port, on va entrer localhost:8080 (cf. message
derreur) dans un navigateur.
68
Par exemple, nous avons obtenu ceci sur une machine de test :
Cela indique que le port est occup par oracle. Il faut donc dire Glassfish dutiliser un autre port.
Ajouter un nouveau serveur :
69
En regardant dans la proprit des serveurs, on remarque que le nouveau domaine nutilise plus le
port 8080 :
Il faut alors configurer le web service pour quil utilise le nouveau serveur (et pareillement pour les
autre applications si besoin).
70
71
Ensuite reconfigurer lEJB pour quil utilise le mme nouveau serveur glassfish.
72
73
74
LEJB et la WebApplication que nous venons de crer doivent tre inclus dans lapplication
entreprise que nous venons de crer. Un clic droit sur le package Java EE Modules fait
apparatre un menu contextuel qui recense les projets actuellement connus de NetBeans et
rfrencs dans la partie projet.
Vrifier que vous avez slectionn le mme serveur glassfish pour la web application
lEJB, et lEntreprise application.
75
76
77
78
79
Ceci permet de tester les web services directement partir dun navigateur !
80
81
Il peut arriver que cette partie ne fonctionne pas soit parce que vous navez pas
dploy correctement, soit parce que le port est dj utilis par une autre
application. Dans ces cas, vous aurez le message suivant
Si cest un problme de dploiement, il faut vrifier tous les paramtres prcdemment entrs. Si
cest un problme de port, il suffit de changer le port de glassfish.
Pour sassurer que cest bien un problme de port, on va entrer localhost:8080 (cf. message
derreur) dans un navigateur.
82
Par exemple, nous avons obtenu ceci sur une machine de test :
Cela indique que le port est occup par oracle. Il faut donc dire Glassfish dutiliser un autre port.
Ajouter un nouveau serveur :
83
En regardant dans la proprit des serveurs, on remarque que le nouveau domaine nutilise plus le
port 8080 :
Il faut alors configurer le web service pour quil utilise le nouveau serveur (et pareillement pour les
autre applications si besoin).
84
85
Ensuite reconfigurer lEJB pour quil utilise le mme nouveau serveur glassfish.
86
87
88
89
90
91
Ceci donne :
92
Ce qui donne :
93