Vous êtes sur la page 1sur 80

Site Web : http://www.acs.ma - Email : formation@acs.

ma
Tl./Fax : 035 64 18 61 - GSM : 063 05 10 39
Rsidence Fs-Carrefour, Bureau N 6, Lot Walili, Avenue des FAR, Fs - Maroc.




Par N. Chenfour

Dveloppement
dapplications distribues
avec Java/JEE

Site Web : http://www.acs.ma - Email : formation@acs.ma
Tl./Fax : 035 64 18 61 - GSM : 063 05 10 39
Rsidence Fs-Carrefour, Bureau N 6, Lot Walili, Avenue des FAR, Fs - Maroc.

Table des Matires



Chapitre 1. Architecture Gnrale JEE ...................... 4
Chapitre 2. Les Servlets et Tomcat ......................... 11
Chapitre 3. Les JSP............................................... 39
Chapitre 4. Accs aux Bases de donnes avec JDBC.. 47
Chapitre 4. Les EJB3 avec JBoss et Eclipse............... 60
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
3
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
4




1.1 Architecture



Chapitre 1. Architecture
Gnrale JEE
HTTP
RMI JDBC
Serveur Web Serveur
dApplication
Serveur de BD
Servlet
JSP1 JSP-N
JSP2
Couche de Prsentation Couche Mtier
EJB1 EJB-N
EJB2
Session Bean
Persistance
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
5
1.2 Les Servlets
Les Servlets sont la base de la programmation Web JEE. Toute la
conception dun site web en Java repose sur ces lments que sont les
Servlets.
Une Servlet est une classe Java qui tourne sur la machine du serveur web,
et qui est invoque lorsquun navigateur client appelle lURL lie ce
serveur.
La Servlet gnre alors automatiquement du code HTML quelle envoie au
client demandeur.
1.3 Les JSP
Une page JSP est une page HTML contenant du code Java. Nous avons
dj dit que la servlet permet de gnrer du code HTML. Cependant on se
trouve limit par le code java et la gnration de chane de caractres
(entre guillemets) contenant du code HTML. Difficile donc crire
correctement, corriger et maintenir (ce qui ncessite une
recompilation explicite de la Servlet chaque modification du code HTML
contenu dans celle-ci.
Tous ces problmes sont rsolus laide des JSPs. Ces deux entits
peuvent alors collaborer ensemble cot du modle de donnes pour
constituer un modle de dveloppement web robuste, souple et
satisfaisant : le modle MVC2.
1.4 RMI
RMI ou encore, Remote Method Invocation est une technologie dveloppe
et fournie par Sun partir du JDK 1.1 pour permettre des appels distants
de mthodes dobjets qui tournent en rseau dans un environnement
distribu.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
6
L'appel cot client dune telle mthode est un peu plus compliqu que
l'appel d'une mthode d'un objet local. Il consiste obtenir une rfrence
sur l'objet distant puis simplement appeler la mthode partir de cette
rfrence.
La technologie RMI se charge de rendre transparente la localisation de
l'objet distant, son appel et le renvoi du rsultat.
En fait, elle utilise deux classes particulires, le stub et le skeleton,
gnres automatiquement avec le JDK.
Le stub est une classe qui se situe ct client et le skeleton est son
homologue cot serveur. Ces deux classes se chargent d'assurer tous les
mcanismes d'appel, de communication, d'excution, de renvoi et de
rception du rsultat.
1.5 EJB
Les Entreprise Java Bean ou EJB sont des composants serveurs qui
tournent sous un serveur dapplication permettant de fournir un certain
nombre de services mtiers par lintermdiaire dun premier type dEJB ;
les EJB de session (ou Session Beans). Ils fournissent aussi des services
daccs base de donnes par lintermdiaire dun 2
me
type dEJB : les
beans entits Entity Beans .
Le but des EJB est de faciliter la cration d'applications distribues pour
les entreprises.
Une des principales caractristiques des EJB est de permettre aux
dveloppeurs de se concentrer sur les traitements orients mtiers car les
EJB et l'environnement dans lequel ils s'excutent prennent en charge un
certain nombre de traitements tel que la gestion des transactions, la
persistance des donnes, la scurit, ...
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
7
1.6 JDBC
Java DataBase Connectivity est une API Java permettant daccder des
bases de donnes de faons transparente par rapport la base de
donnes utilise. Les procdures de connexion, de manipulation et
dadministration sont les mmes indpendamment du SGBD : oracle,
MySQL, ODBC ou autre.
1.7 Struts
Struts (http://struts.apache.org/), ou encore Apache Struts , est un
framework open source gr par le groupe Jakarta de la communaut
Apache, utilis pour faciliter le dveloppement des applications web J2EE.
Il a t cr par Craig McClanahan qui est pass la fondation Apache en
2000 en sous-partie du projet Jakarta.
Lobjectif du framework Struts est de permettre la mise en place dune
architecture MVC (Modle-Vue-Contrleur) plus aisment. Il se base
pour cela sur la technologie des Servlets (dune manire transparente) et
celle des JSP en les tendant et en donnant accs des objets amliorant
lapproche de ces dernires. Cela dbouche sur une meilleure structuration
du code dune application web Java ; ce qui ainsi une meilleure
maintenabilit du code.
En plus, Struts se dmarque aujourdhui (avec sa version 2 ; rsultat
dune fusion entre le projet Struts et le projet WebWork) par le fait quil
nimpose aucune implmentation dinterface ou extension de classe du
framework. Les objets qu'il gre sont des objets Java ordinaires (ou
encore des POJO [Plain Old Java Objects]). Les classes ainsi ralises
(sauf si le dveloppeur intgre dlibrment les API Struts) sont
totalement indpendantes du framework.
Par ailleurs, le framework Struts offre une vaste bibliothque de balise
permettant de raliser toute la logique de prsentation dune manire
simple et assiste.

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
8
1.8 Hibernate
Les informations ou donnes, manipules par une application quelconque
sont gnralement sauvegardes dans une base de donnes qui pour la
grande majorit des applications est une base de donnes relationnelle.
Lapplication quant elle est base sur les mcanismes de la
programmation oriente objets. Lutilisation dun outil d'ORM (Object
Relationnal Mapping) simpose alors afin de soulager le dveloppeur de
leffort considrable quil devrait fournir pour raliser lensemble des
classes lui permettant de convertir les objets en des tuples et
inversement.
Hibernate est lun des outils les plus populaires, stables et robuste
permettant le mapping objet/relationnel pour les applications Java. Il
sagit dont dun ORM (Objet Relational Mapper) qui consiste faire le lien
entre la reprsentation objet des donnes et sa reprsentation
relationnelle base sur un schma SQL.
Hibernate est un framework open source dont le fondateur est Gavin King,
qui fait entre autre partie de l'quipe de dveloppement de JBOSS.
Non seulement, Hibernate s'occupe du transfert des classes Java dans les
tables de la base de donnes (et des types de donnes Java dans les
types de donnes SQL), mais il permet aussi de requter les donnes et
propose des moyens de les rcuprer. Il peut donc rduire de manire
considrable le temps de dveloppement ralis habituellement base de
lAPI JDBC avec plusieurs lignes de code permettant de grer tous les
transferts des objets ncessaires. Le framework Hibernate libre ainsi le
dveloppeur de plus que 90% des tches de programmation lies la
persistance des donnes. Il offre aussi la gestion automatique du mapping
dan les diffrents cas que sont la composition, les associations, lhritage,
le polymorphisme ainsi que la prise en charge des collections Java.
Hibernate rentre ainsi dans le cadre des frameworks bass sur les POJO
(Plain Old Java Object) offrant un POJO la possibilit dtre persitant
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
9
avec un minimum deffort; en utilisant un simple moteur de persistance.
Le schma idal est alors le suivant :
PojoClass pojo = new PojoClass() ;
PersistanceEngine engine = PersistanceEngineFactory.createEngine();
engine.save(pojo);
1.9 Spring
Spring (http://www.springframework.org) est un framework open source
cr par Rod Johnson qui le dcrit pour la premire fois en 2002 dans son
livre (sous le nom Interface21) Expert One-on-One : J2EE Design and
Development. L'objectif dsign du framework est d'offrir une alternative
viable aux EJB plus simple utiliser dans le cadre du dveloppement
d'applications professionnelles.
Spring est d'abord un conteneur d'objets Java dans le mme sens que
Tomcat est un conteneur de servlets ou JBoss un conteneur d'EJB.
Nanmoins, Spring se dmarque des conteneurs cits du fait que les
objets qu'il gre sont des objets Java ordinaires (nomms POJO [Plain Old
Java Objects] dans la littrature).
Par ailleurs, Spring dispose d'une implmentation AOP qui lui permet
d'offrir de nombreux services et ce, sans que les classes Java aient
implmenter une quelconque interface propritaire. Spring fournit
galement une riche API qui simplifie la programmation de certaines
tches et l'utilisation d'outils open source rpandus.



Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
10



Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
11

2.1 Dfinition
Une Servlet est une classe Java qui tourne sous un serveur Web (nous
utiliserons le serveur Apache Tomcat). La Servlet doit implmenter
linterface javax.servlet.Servlet directement, ou indirectement
en tendant la classe javax.servlet.http.HTTPServlet .
Lorsqu'une servlet est appele par un client, la mthode service()
est excute. Celle-ci est le principal point d'entre de toute servlet et
accepte deux objets en paramtres :
L'objet ServletRequest encapsulant la requte du client, c'est--dire
qu'il contient l'ensemble des paramtres passs la servlet.
L'objet ServletResponse permettant de renvoyer une rponse au
client. Il est ainsi possible de crer des en-ttes HTTP (headers),
d'envoyer des cookies au navigateur du client, ...
Afin de dvelopper une servlet fonctionnant avec le protocole HTTP, il
suffit de crer une classe tendant HttpServlet .
La classe HttpServlet redfinie la mthode service en redirigeant la
requte vers lune des deux mthodes doGet ou doPost en
fonction de la mthodes du protocole HTTP utilise : GET ou bien POST, il
suffira alors de redfinir la mthode adquate afin de traiter la requte :
public void doGet(HttpServletRequest req, HttpServletResponse res);
public void doPost(HttpServletRequest req, HttpServletResponse res);
Chapitre 2.
Les Servlets & Tomcat
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
12
2.2 Cycle de vie d'une servlet
Le cycle de vie dune servlet est assur par le conteneur de servlet
(Tomcat) comme suit :
1. le serveur cre un pool de threads auxquels il va pouvoir affecter
chaque requte
2. La servlet est charge au dmarrage du serveur ou lors de la
premire requte
3. La servlet est instancie par le serveur
4. La mthode init() est invoque par le conteneur
5. Lors de la premire requte, le conteneur cre les objets Request et
Response spcifiques la requte
6. La mthode service() est appele chaque requte. Les objets
Request et Response lui sont passs en paramtre
7. Grce l'objet Request, la mthode service() va pouvoir analyser
les donnes en provenance du client
8. Grce l'objet Response, la mthode service() va fournir une
rponse au client
9. La mthode destroy() est appele lors du dchargement de la
servlet. La servlet est alors signale au garbage collector.
Pour crer une servlet il est indispensable de mettre en oeuvre l'interface
javax.servlet.Servlet permettant au conteneur d'assurer le cycle de vie de
la servlet.
La mise en place de l'interface (gnralement ralise en tendant
javax.servlet.GenericServlet ou javax.servlet.HttpServlet) fait appel cinq
mthodes :
la mthode init()
la mthode service()
la mthode getServletConfig()
la mthode getServletInfo()
la mthode destroy()
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
13
2.3 Installation du Serveur Tomcat
1- Installer Tomcat (exemple 6.0.10) :

Le serveur Tomcat volue avec lvolution des Servlet et des JSP (nous
utiliserons la version 6.0)
Version Apache Tomcat Version Servlet/JSP
6.0.x 2.5/2.1
5.5.x 2.4/2.0
4.1.x 2.3/1.2
3.3.x 2.2/1.1
2- Le rpertoire dinstallation par dfaut est :

C:\Program Files\Apache Software Foundation\Tomcat 6.0

3- On obtient larborescence suivante:

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
14
4- On dveloppe les Servlets dans le rpertoire webapps , soit
dans le sous rpertoire ROOT soit dans un nouveau sous rpertoire
de webapps appel un context (appel par exemple contexte ).
Dans tous les cas, le rpertoire de travail doit avoir larchitecture
suivante :

2.4 Configuration de Tomcat sous Eclipse JEE
Commencer tout dabord par la configuration de lenvironnement Eclipse.
Pour cela allez au menu Window/Preferences
Ensuite +Server/Runtime Environments , puis cliquer sur le bouton
add

contexte
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
15
Slectionner Apache / Apache Tomcat v6.0 , puis Next

On obtient une nouvelle fentre dans laquelle il faut cliquer sur le bouton
browse pour slectionner le rpertoire dinstallation de Tomcat :

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
16
Crer ensuite votre application Web par le biais dun projet web
dynamique Dynamic Web Project . En fin crer la Servlet :

2.5 Dveloppement dune application Web base sur les
Servlets :
Code de la Servlet :
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;

public class FirstServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException {
try {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1 align='center'>First Servlet</h1>");
out.println("</body></html>");
}
catch(Exception e) {}
}
}
On peut ajouter la Servlet une mthode doPost pour prendre en charge
aussi bien les requtes GET que les requtes POST :

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
17
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException
{
doGet(request, response);
}

Descripteur de dploiement
Il sagit du fichier web.xml se trouvant dans le rpertoire WEB-INF du
rpertoire de travail :
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">


<!-- JSPC servlet mappings start -->
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/f1.html</url-pattern>
</servlet-mapping>
</web-app>

Invocation de la servlet depuis lExplorateur
Internet :
- Si on a travaill dans le rpertoire ROOT :
http://localhost:8080/f1.html
- Si on a travaill dans un autre rpertoire : exemple contexte
http://localhost:8080/contexte/f1.html

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
18
2.6 Lobjet HttpServletRequest
Mthode Description
String getMethod()
Rcupre la mthode HTTP utilise
par le client
String getHeader(String Key)
Rcupre la valeur de l'attribut Key de
l'en-tte
String getRemoteHost()
Rcupre le nom de domaine du client
String getRemoteAddr()
Rcupre ladresse IP du client
String getParameter(String Key)
Rcupre la valeur du paramtre Key
(cl) d'un formulaire. Lorsque
plusieurs valeurs sont prsentes, la
premire est retourne
String[] getParameterValues(String Key)
Rcupre les valeurs correspondant
au paramtre Key (cl) d'un
formulaire, c'est--dire dans le cas
d'une slection multiple (cases
cocher, listes choix multiples) les
valeurs de toutes les entits
slectionnes
Enumeration getParameterNames()
Retourne un objet Enumeration
contenant la liste des noms des
paramtres passs la requte
String getServerName()
Rcupre le nom du serveur
String getServerPort()
Rcupre le numro de port du
serveur

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
19
2.7 Lobjet HttpServletResponse
Mthode Description
String setStatus(int StatusCode)
Dfinit le code de retour de la rponse
void setHeader(String Nom, String
Valeur)
Dfinit une paire cl/valeur dans les en-
ttes
void setContentType(String type)
Dfinit le type MIME de la rponse HTTP,
c'est--dire le type de donnes envoyes
au navigateur
void setContentLength(int len)
Dfinit la taille de la rponse
PrintWriter getWriter()
Retourne un objet PrintWriter
permettant d'envoyer du texte au
navigateur client.
ServletOutputStream getOutputStream()
Dfinit un flot de donnes envoyer au
client, par l'intermdiaire d'un objet
ServletOutputStream, driv de la
classe java.io.OutputStream
void sendredirect(String location)
Permet de rediriger le client vers l'URL
location


Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
20
2.8 Traitement des formulaires

1- On crit un fichier HTML pour le formulaire :


Code du Formulaire :
<html>
<body>
<form name="FormName" action="RepProduit.html" method="post">
<table border="0">
<tr><td>Ref : </td><td><input type="text" name="Ref" size="10"></td>
<tr><td>Desig : </td><td>
<input type="text" name="Desig" size="30"></td>
<tr><td>PU : </td><td><input type="text" name="PU" size="6"></td>
<tr><td>Quantit : </td><td><input type="text" name="Q" size="6"></td>
<tr><td colspan=2><input type="submit" value="Enregistrer"></td></tr>
</table>
</form>
</body>
</html>
Avec "RepProduit.html" tant le nom de mapping de la Servlet :
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
21
2- Code de La Servlet :
import java.io.PrintWriter;
import javax.servlet.*;
import javax.servlet.http.*;
public class RepProduit extends HttpServlet {


public void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException {

try {
String ref = request.getParameter("Ref");
String desig = request.getParameter("Desig");
String pu = request.getParameter("PU");
String q = request.getParameter("Q");

Produit p = new Produit(ref, desig, pu, q);


}
catch(Exception e) {}
}

public void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException {
doGet(request, response);
}

}

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
22
2.9 Le Descripteur de dploiement
Le descripteur de dploiement d'une application web est un fichier nomm
web.xml situ dans le rpertoire WEB-INF du rpertoire racine de l'application
web. Il contient les caractristiques et paramtres de l'application. Cela inclut
la description des servlets utilises, ou les diffrents paramtres
d'initialisation.
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
...
</web-app>
Dans le fichier web.xml, tous les paramtres de configuration sont dfinis
entre les balises web-app.
2.9.1 Description de l'application
<web-app>
...
<display-name></display-name>
<description> </description>
...
</web-app>
Deux balises relvent de la description de l'application. La premire, display-
name permet de donner un nom l'application. Il s'agit de description, pour
s'y retrouver dans les fichiers. Cela n'a pas d'incidence sur le fonctionnement
de la webapp. La balise description permet de fournir une description plus
dtaille. De mme, elle est inoprante techniquement parlant.

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
23
2.9.2 Dclaration des servlets
Il convient ensuite de dclarer les servlets que l'application utilise. C'est--dire
les servlets potentiellement accessibles par les clients, au travers d'une URL.
<web-app>
...
<servlet>
<servlet-name>maservlet</servlet-name>
<servlet-class>com.acs.jee.FirstServlet</servlet-class>
<description>une servlet simple.</description>
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
</web-app>
La balise <servlet> </servlet> doivent encadrer la dclaration d'une
servlet.
On doit affecter un nom chaque servlet dclare, dans une balise
<servlet-name>. Ce nom n'est pas ncessairement le nom de la classe
de la servlet. Il s'agit d'un identifiant interne au fichier web.xml, rutilis
par la suite.
La balise <description> permet de fournir des informations
supplmentaires sur la servlet, si on le souhaite. Cela n'a pas d'utilit
technique, cette description n'est visible qu'ici.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
24
Enfin, il est bien sr indispensable de dfinir la classe de la servlet, dans
la balise <servlet-class>. Rappelons que cette classe doit se trouver
dans le rpertoire WEB-INF/classes de l'application, en respectant les
packages. Dans notre cas, la classe devra tre :
WEB-INF/classes/com/acs/jee/FirstServlet.class.
Il est possible de spcifier des paramtres d'initialisation pour une
servlet. Il s'agit de paramtres chargs en mme temps que la servlet,
et qu'elle peut rcuprer. Ce genre de paramtre se dclare au sein de
balises <init-param>. La sous-balise <param-name> permet alors de
dfinir le nom du paramtre, sa valeur tant spcifie dans la sous-
balise <param-value>. L'application peut rcuprer la valleur de ce
paramtre laide de la mthode suivante :
getServletConfig().getInitParameter(""),
le paramtre fournir la mthode tant un param-name de ce fichier,
pour en rcuprer la param-value.
La balise load-on-startup demande que la servlet soit charge ds le
dmarrage du serveur (et non lors de sa premire sollicitation). Le
nombre entier situ l'intrieur de ces balises reprsente l'ordre de
chargement. S'il y avait plusieurs servlets dans ce fichier, on pourrait
dfinir par exemple la position 2 de chargement pour une autre...
2.9.3 Mapping des servlets
<web-app>
...
<servlet-mapping>
<servlet-name>maservlet</servlet-name>
<url-pattern>/uneservlet</url-pattern>
</servlet-mapping>
...
</web-app>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
25
Le mapping d'une servlet sert indiquer au serveur quelle servlet charger
pour une requte donne du client. Remarquons que les URL des servlets sont
relatives l'URL du contexte (la webapp) auquel elles appartiennent.
Effectuer un mapping est trs simple, et se droule au sein d'une balise
servlet-mapping. Il faut spcifier le nom de la servlet mapper (balise
servlet-name). Ce nom doit correspondre un nom de servlet dfini dans la
dclaration des servlets. Puis, dans la balise url-pattern, dfinir l'URL par
laquelle cette servlet est accessible. Il s'agit bien d'une pattern, car il est
possible d'utiliser des caractres spciaux. L'instruction suivante par exemple
<url-pattern>/test/*</url-pattern> permet de configurer laccs la servlet
ds que l'URL contiendra la squence "/test/" (n'importe quelle URL
commenant par "/test/").
2.9.4 Paramtres de contexte
Il est galement possible de dfinir des paramtres de contexte pour une
application web. A la diffrence des paramtres d'initialisation de servlets,
ceux-ci seront accessibles par toutes les servlets de l'application web dont ce
fichier est le descripteur de dploiement.
<web-app>
...
<context-param>
<param-name></param-name>
<param-value></param-value>
<description></description>
</context-param>
...
</web-app>

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
26
Les balises param-name et param-value permettent respectivement de dfinir
le nom du paramtre et sa valeur. Quant la balise description, elle autorise
comme d'habitude l'apposition d'une petite description, non oprante
techniquement.
Une servlet peut rcuprer un tel paramtre grce la mthode
getServletContext().getInitParameter("applicationName"),
le paramtre fournir la mthode tant un param-name de ce fichier, pour
en rcuprer la param-value.
2.9.5 Fichiers index
<web-app>
...
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>

</welcome-file-list>
...
</web-app>
Un descripteur de dploiement permet galement de spcifier les fichiers
d'accueil de l'application web. Dans notre exemple, si le path du Context de
l'application web est "/appli", l'URL "http://localhost:port/appli" appelle la
page d'accueil. Le serveur cherchera donc la page index.html dans le
document root de l'application. Si elle n'existe pas (mieux vaut alors ne pas la
fournir dans cette liste !), le fichier index.jsp sera recherch. Notons que,
dans Tomcat 5 (spcification 2.4 des servlets), l'on peut dfinir une servlet
comme fichier d'accueil, en insrant dans la liste son servlet-name.

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
27
2.9.6 Mapping de types MIME
<web-app>
...
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
...
</web-app>
Lorsque le serveur recevra une requte pour une ressource statique (fichier
HTML, image, fichier multimdia...), il enverra la ressource s'il la trouve. Dans
la rponse HTTP, il devra paramtrer l'en-tte Content-Type (type de
contenu). Pour ce faire, il se basera sur ces types MIME mapps, en fonction
de l'extension du fichier retourner. Donc, si par exemple un fichier .jpg lui
est demand, il dfinira le Content-Type comme image/jpeg. Ceci est
prsent ici titre d'information. Notons bien que les mapping de types MIME
sont prvus dans le fichier web.xml gnral de Tomcat
(TOMCAT_HOME/conf/web.xml). On peut donc en rajouter directement dans
ce fichier. Nanmoins, il est utile de savoir que l'on peut en dfinir dans tous
les descripteurs de dploiement, et limiter ainsi leur porte l'application
concerne.

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
28

2.9.7 Scurisation des resources web
Contraintes de scurit
Protger l'accs une ressource consiste lui appliquer une contrainte de
scurit. Cette contrainte sera dfinie dans le descripteur de dploiement
web.xml. Toute l'application ne sera pas ncessairement scurise, nous
allons pouvoir dfinir quelles ressources sont protger.
Une contrainte de scurit se dfinie entre les balises <security-constraint>
et </security-constraint>. Exemple :

<web-app>
...
<security-constraint>
<display-name>...</display-name>
<web-resource-collection>
<web-resource-name>...</web-resource-name>
<url-pattern></url-pattern>
<url-pattern></url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name></role-name>
<role-name></role-name>
</auth-constraint>
</security-constraint>
...
</web-app>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
29
Comme dans les diffrentes configurations de dploiement, on fournit un nom
pour notre contrainte de scurit <display-name>.
L'lment <web-resource-collection> dcrit les ressources pour lesquelles
la contrainte va s'appliquer. La balise <web-resource-name> donne un nom
cet ensemble de ressources. Nom qui pourra tre rutilis dans certaines
demandes d'authentification.
L'lment <url-pattern> permet de dfinir pour quelles URL la contrainte
doit tre mise en oeuvre. C'est donc ici que l'on slectionne les ressources
protger. Comme d'habitude, il s'agit d'un pattern, on peut donc notamment
utiliser le caractre '*'. Si on met par exemple :
<url-pattern>/acs/*</url-pattern>
alors toutes les URL commenant par "/acs/" seront concernes par la
protection. Comme d'habitude, il s'agit d'une URL relative celle du contexte
de l'application.
Grce aux balises <http-method>, on peut dfinir les mthodes HTTP
concernes par la contrainte. On pourra ainsi indiquer que l'accs telle
ressource par la mthode GET doit tre protge, mais pas l'accs cette
mme ressource par la mthode POST. Dans lexemple, nous avons protg
les deux.
Une fois les ressources protger sont dfinies, il convient de prciser quels
utilisateurs, et plus exactement quels rles peuvent y avoir accs. dans la
balise <auth-constraint>, on peut indiquer les <role-name> ayant le droit
d'accder aux ressources dfinies plus haut. Ces noms de rles doivent bien
sr correspondre aux rles connus par Tomcat.
Une fois les contraintes de scurit dfinies, nous devons spcifier le mode de
login (ou authentification) des utilisateurs. Il existe plus quune solution :
- authentification basique utilisant une bote de dialogue standard
gnre automatiquement.
- Ou par formulaire personnalis par le dveloppeur.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
30
La configuration du mode de login laide de lauthentification basique est
ralise laide de la balise <login-config>. Le contenu de cet lment varie
selon la mthode d'authentification. Nous nous intressons ici la mthode
basique. Elle consiste en une bote de dialogue, gre par le navigateur, qui
demande le login et le mot de passe. Elle envoie ensuite l'information au
serveur qui se charge des vrifications ncessaires. Il est noter que si l'on
peut mettre plusieurs contraintes de scurits dans une webapp, un seul
login-config est acceptable :
<web-app>
...
<security-constraint>
...
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name></realm-name>
</login-config>
...
</web-app>
Cela aura pour effet, lorsque l'utilisateur demandera une URL protge,
d'afficher la bote de dialogue suivante dans le navigateur :

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma


31
C'est le navigateur qui propose cette bote de dialogue. Elle diffre donc d'un
navigateur l'autre (ici, Internet Explorer). Le login et le mot de passe saisis
sont transmis au serveur. De son ct, il se charge de vrifier que le nom
d'utilisateur est connu, et le mot de passe est correct. Puis il vrifie que cet
utilisateur a bien l'un des rles ncessaires pour accder la ressource, donc
qu'il rpond la contrainte de scurit.
2.10 Les cookies
Les cookies reprsentent un moyen simple de stocker temporairement des
informations chez un client, afin de les rcuprer ultrieurement.
Concrtement il s'agit de fichiers textes stocks sur le disque dur du client
aprs rception d'une rponse HTTP contenant des champs appropris dans
l'en-tte.
Les cookies font partie des spcifications du protocole HTTP qui permet
d'changer des messages entre le serveur et le client l'aide de requtes et
de rponses HTTP.
Les requtes et rponses HTTP contiennent des en-ttes permettant d'envoyer
des informations particulires de faon bilatrale. Un de ces en-ttes est
rserv l'criture de fichiers sur le disque: les cookies.
L'en-tte HTTP rserv l'utilisation des cookies s'appelle Set-Cookie, il s'agit
d'une simple ligne de texte de la forme:
Set-Cookie : NOM=VALEUR; domain=NOM_DE_DOMAINE; expires=DATE
Il s'agit donc d'une chane de caractres commenant par Set-Cookie : suivie
par des paires cls-valeur sous la forme CLE=VALEUR et spares par des
virgules.
L'API servlet propose un objet permettant de grer de faon quasi-
transparente l'usage des cookies, il s'agit de l'objet Cookie.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
32
L'objet Cookie
La classe javax.servlet.http.Cookie permet de crer un objet Cookie
encapsulant toutes les oprations ncessaires la manipulation des cookies.
Ainsi, le constructeur de la classe Cookie cre un cookie avec un nom et une
valeur passs en paramtre. Il est toutefois possible de modifier la valeur de
ce cookie ultrieurement grce sa mthode setValue().
Conformment la norme HTTP 1.1, le nom du cookie doit tre une chane de
caractres ne contenant aucun caractre spcial dfini dans la RFC 2068 (Il
vaut mieux donc utiliser des caractres alphanumriques uniquement).
Les valeurs par contre peuvent inclure tous les caractres hormis les espaces
ou chacun de ces caractres :
[ ] ( ) = , " / ? : ;
Envoi du cookie
L'envoi du cookie vers le navigateur du client se fait grce la mthode
addCookie() de l'objet HttpServletResponse.
void addCookie(Cookie cookie)
Etant donne que les cookies sont stocks dans les en-ttes HTTP, et que
celles-ci doivent tre les premires informations envoyes, la cration du
cookie doit se faire avant tout envoi de donnes au navigateur (le cookie doit
tre cr avant toute criture sur le flot de sortie de la servlet)
Cookie MonCookie = new Cookie("nom", "valeur");

response.addCookie(MonCookie);
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
33
Rcupration des cookies du client
Pour rcuprer les cookies provenant de la requte du client, il suffit d'utiliser
la mthode getCookies() de l'objet HttpServletRequest
Cookie[] getCookies()
Cette mthode retourne un tableau contenant l'ensemble des cookies prsents
chez le client. Il est ainsi possible de parcourir le tableau afin de retrouver un
cookie spcifique grce la mthode getName() de l'objet Cookie().
Rcupration de la valeur d'un cookie
La rcupration de la valeur d'un cookie se fait grce la mthode getValue()
de l'objet Cookie :
String Valeur = Cookie.getValue()
2.11 Les variables d'environnement
Les variables d'environnement sont, comme leur nom l'indique, des donnes
stockes dans des variables permettant au programme d'avoir des
informations sur son environnement.
Le langage Java fournit une mthode correspondant chaque variable
d'environnement. Voici la liste des mthodes de l'objet HttpServletRequest
permettant de rcuprer des variables d'environnement :

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
34

Variable d'environnement Mthode associe
AUTH_TYPE getAuthType()
CONTENT_LENGTH getContentLength()
CONTENT_TYPE getContentType()
HTTP_ACCEPT getHeader("Accept")
HTTP_REFERER getHeader("Referer")
HTTP_USER_AGENT getHeader("User-Agent")
PATH_INFO getPathInfo()
PATH_TRANSLATED getPathTranslated()
QUERY_STRING getQueryString()
REQUEST_METHOD getRequestMethod()
REMOTE_ADDR getRemoteAddr()
REMOTE_HOST getRemoteHost()
REMOTE_USER getRemoteUser()
SCRIPT_NAME getScriptName()
SERVER_NAME getServerName()
SERVER_PROTOCOL getServerProtocol()
SERVER_PORT getServerPort()

La mthode getHeader() de l'objet HttpServletRequest permet de
rcuprer la valeur d'une variable d'environnement dont le nom est pass en
paramtre :
public String getHeader(String nomEnTete)
Il est possible de rcuprer l'ensemble des noms des en-ttes disponibles
dans un objet Enumeration grce la mthode getHeaderNames() de
l'objet HttpServletRequest :
public Enumeration getHeaderNames()
L'objet Enumeration retourn peut alors tre parcouru grce ses mthodes
hasMoreElements() et nextElement() :
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
35
2.12 Suivi de Session
L'objet HttpSession permet de mmoriser les donnes de l'utilisateur, grce
une structure similaire une table de hachage, permettant de relier chaque
id de session l'ensemble des informations relatives l'utilisateur.
Ainsi en utilisant un mcanisme tel que les cookies (permettant d'associer une
requte un id) et l'objet HttpSession (permettant de relier des informations
relatives l'utilisateur un id), il est possible d'associer facilement une
requte aux informations de session.
L'objet HttpSession s'obtient grce la mthode getSession() de l'objet
HttpServletRequest.
Grer les sessions
La gestion des sessions se fait de la manire suivante :
Obtenir l'ID de session
o Si GET: en regardant dans la requte
o Si POST: en regardant dans les en-ttes HTTP
o Sinon dans les cookies
Vrifier si une session est associe l'ID
o Si la session existe, obtenir les informations
o Sinon
Gnrer un ID de Session
Si le navigateur du client accepte les cookies, ajouter un
cookie contenant l'ID de session
Sinon ajouter l'ID de session dans l'URL
Enregistrer la session avec l'ID nouvellement cr
Obtenir une session
La mthode getSession() de l'objet HttpServletRequest permet de retourner la
session relative l'utilisateur (l'identification est faite de faon transparente
par cookies ou rcriture d'URL) :
HttpSession getSession(boolean create)
L'argument create permet de crer une session relative la requte
lorsqu'il prend la valeur true.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
36
Etant donne que les cookies sont stocks dans les en-ttes HTTP, et que
celles-ci doivent tre les premires informations envoyes, la mthode
getSession() doit tre appele avant tout envoi de donnes au navigateur.
Obtenir des informations d'une session
Pour obtenir une valeur prcdemment stocke dans l'objet HttpSession, il
suffit d'utiliser la mthode getAttribute() de l'objet HttpSession (celle-ci
remplace dans la version 2.2 de l'API servlet la mthode getValue() qui tait
utilise dans les versions 2.1 et infrieures).
Object getAttribute("cle")
La mthode getAttribute() retourne une valeur de type Object. Si l'attribut
pass en paramtre n'existe pas, la mthode getAttribute() retourne la valeur
null.
Stocker des informations dans une session
Le stockage d'informations dans la session est similaire la lecture. Il suffit
d'utiliser la mthode setAttribute() (putvalue() pour les versions antrieures
la 2.2) en lui fournissant comme attributs la cl et la valeur associe.
Object setAttribute("cle","valeur")
L'exemple suivant stocke dans la session la page d'appel de la servlet (une
page ayant fait un lien) :
HttpSession session = request.getSession(true);
session.setAttribute("referer",request.getHeader("Referer"));
Invalider une session
Pour supprimer une session, il suffit de faire appel la mthode invalidate()
de l'objet HttpSession
HttpSession session = request.getSession(true);
session.invalidate();

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
37
Autres mthodes de HttpSession
Mthode Description
long getCreationTime() Retourne l'heure de la cration de la session
Object getAttributes(String Name)
Retourne l'objet stock dans la session sous le
nom Name, null s'il n'existe pas
String getId() Gnre un identifiant de session
long getCreationTime()
Retourne la date de la requte prcdente pour
cette session
String[] getValueNames()
Retourne un tableau contenant le nom de toutes
les cls de la session
Object getValue(String Name)
Retourne l'objet stock dans la session sous le
nom Name, null s'il n'existe pas
void invalidate() Supprime la session
boolean isnew()
Retourne true si la session vient d'tre cre,
sinon false
void putValue(String Name, Object Value)
Stocke l'objet Value dans la session sous le nom
Name
void removeValue(String Name) Supprime l'lment Name de la session
void setAttribute(String Name, Object Value)
Stocke l'objet Value dans la session sous le nom
Name
int setMaxInactiveInterval(int interval)
Dfinit l'intervalle de temps maximum entre
deux requte avant que la session n'expire
int getMaxInactiveInterval(int interval)
Retourne l'intervalle de temps maximum entre
deux requte avant que la session n'expire



Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
38

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
39

3.1 Introduction
Les JSP (Java Server Pages) constituent une technologie Java permettant
la gnration de pages web dynamiques. Une JSP est habituellement
constitue :
de donnes et de tags HTML
de tags JSP
de scriptlets (code Java intgr la JSP)
Les fichiers JSP possdent par convention lextension .jsp.
3.2 Les Tags JSP
Il existe trois types de tags :
tags de directives : <%@ ... %>
tags de scripting : ils permettent dinsrer du code Java dans la
servlet gnre.
tags dactions : <jsp:>
Remarque :
Les noms des tags sont sensibles la casse.
3.3 Les tags de directives <%@ ... %>
Syntaxe :
<%@ directive attribut="valeur" ... %>
Il existe 3 directives :
Directive Description
page permet de dfinir des options de configuration
include permet dinclure des fichiers dans la JSP
taglib permet de dfinir des tags personnaliss
Chapitre 3.
Les JSP
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
40
3.3.1 La directive page
Cette directive doit tre utilise dans toutes les pages JSP : elle permet de
dfinir des options qui sappliquent toute la JSP.
Quelques options importantes de la directive Page :
Option Valeur
contentType Une chane contenant le type mime
errorPage URL ouvrir en cas derreur
extends Une classe
import Une classe ou un package.*, peuvent tre spars par ,
langage Par dfaut "java"

Exemples :

<%@ page language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

<%@page import="java.util.Vector"%>

3.3.2 La directive include
Cette directive permet dinclure un fichier dans une JSP. Le fichier inclus
peut tre un fragment de code JSP, HTML ou Java.
Si le fichier inclus est un fichier HTML, celui ci ne doit pas contenir de tag
<HTML>, </HTML>, <BODY> ou </BODY>
Syntaxe :
<%@ include file="chemin du fichier" %>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
41
3.3.3 La directive taglib
Cette directive permet de dclarer lutilisation dune bibliothque de tags
personnaliss.
Cette directive possde deux attributs :
prefix : un prfix qui servira despace de noms pour les tags de la
bibliothque dans la JSP
uri : lURI de la bibliothque telle que dfinie dans le fichier de
description
Exemple :
<%@ taglib prefix="s" uri="/struts-tags" %>
3.4 Les tags de scripting
Il existe trois tags pour insrer du code Java :
Tag de dclaration :
le code Java est inclus dans le corps de la servlet gnre. Ce code
peut tre la dclaration de variables dinstances ou de classes ou la
dclaration de mthodes.
Syntaxe :
<%!
...
%>
Tag dexpression :
Evalue une expression et insre le rsultat sous forme de chane de
caractres dans la page web gnre.
Syntaxe :
<%= ... %>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
42
Tag de scriptlets :
par dfaut, le code Java est inclus dans la mthode service() de la
servlet.
<%
...
%>
Exemple :
<body>

<%
for(int i=0;i < 20; i++)
response.getWriter().println(i + "<br>");

%>

</body>
3.5 Les variables implicites
Les spcifications des JSP dfinissent plusieurs objets utilisables dans le
code dont les plus utiles sont :
Object Classe Rle
out
javax.servlet.jsp.JspWriter Flux en sortie de la page HTML gnre
request
javax.servlet.http.HttpServletRequest Contient les informations de la requte
response
javax.servlet.http.HttpServletRequest Contient les informations de la rponse
session
javax.servlet.http.HttpSession Gre la session

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
43
3.6 Les tags de commentaires
Il existe deux types de commentaires avec les JSP :
les commentaires visibles dans le code HTML
syntaxe :
<!-- ... <%= expression %> ... -->
les commentaires invisibles dans le code HTML
syntaxe :
<%-- ... --%>
3.7 Tags dactions
3.7.1 Le tag <jsp:useBean>
Le tag <jsp:useBean> permet de localiser une instance ou dinstancier un
bean pour lutiliser dans la JSP.
Syntaxe :
<jsp:useBean attribut="valeur" >
...
</jsp :useBean>
Liste de quelques attributs :
Attribut description
id Nom de la variable qui va contenir la rfrence sur le bean
scope Porte durant laquelle le bean est dfini et utilisable. Les
valeurs possibles sont : page|request|session|application
class Classe du bean : pleinement qualifie :
nom.du.package.Classe
type Gnralement linterface de base : mre de la classe du bean

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
44
Exemple :
<jsp:useBean
id="produit01" scope="session"
class="com.acs.lab.jsp.Produit"
/>

3.7.2 Le tag <jsp:setProperty >
Le tag <jsp:setProperty> permet daffecter des valeurs aux proprits du
Bean (en utilisant implicitement leur setters).
Syntaxe :
Il existe trois faons de mettre jour les proprits soit partir des
paramtres de la requte soit avec une valeur :
Affecter automatiquement toutes les proprits avec les valeurs des
paramtres correspondants de la requte. Dans ce cas, les noms
des proprits et ceux des paramtres doivent tre identiques.
<jsp:setProperty
name="idDuBean"
property="*"
/>
alimenter automatiquement une proprit avec le paramtre de la
requte correspondant. Si lattribut param est omis, alors le nom
de la proprit et celui du paramtre doivent tre identiques.
<jsp:setProperty
name="idDuBean"
property=" nomDeLaProprit "
[param=" nomDuparamtre "]
/>
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
45
alimenter une proprit avec la valeur prcise
<jsp:setProperty
name="idDuBean"
property="nomDeLaProprit"
value="{string | <%= expression%>}"
/>
3.7.3 Le tag <jsp:getProperty>
Permet de rcuprer et dafficher la valeur dune proprit du bean.
Syntaxe :
<jsp:getProperty name="idDuBean" property=" nomProprit" />
- Lattribut name indique le nom du bean tel quil a t dclar
dans le tag <jsp:useBean>.
- Lattribut property indique le nom de la proprit en question.
3.7.4 Le tag de redirection <jsp:forward>
Cette balise permet de rediriger la requte vers une autre URL pointant
vers un fichier HTML, JSP ou un servlet.
Syntaxe :
<jsp:forward page="{relativeURL | <%= expression %>}" />
3.7.5 Le tag <jsp:include>
Ce tag permet dinclure le contenu gnr par une JSP ou une servlet
dynamiquement au moment ou la JSP est execute. Cest la diffrence
avec la directive include avec laquelle le fichier est insr dans la JSP
avant la gnration de la servlet.
Syntaxe :
<jsp:include page="relativeURL" />
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
46
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
47



4.2 Chargement dun pilote JDBC
La classe DriverManager gre la liste des drivers chargs par
lintermdiaire de la classe Class , et offre donc la possibilit
douverture de connexions travers les pilotes chargs. Le chargement
dun driver est effectu comme suit :
Class.forName( "classe du driver" );
Une fois cette tape effectue JDBC est pret se connecter la base de
donne.
4.3 Connexion la base de donne
Pour se connecter une base de donnes il vous faut un identifiant, un
mot de passe et l'adresse de connexion au serveur.
La classe grant les connexions est Java.SQL.Connection et la mthode
permettant de crer une connexion est getConnection. Une connexion
s'effectue de la manire suivante :
Connection db = DriverManager.getConnection("URL", "user" , "pwd" );
La classe Connection renvoie une exception SQLException si une erreur
d'accs la base de donnes se produit.
Une fois la connexion effectue, il est dsormais possible d'excuter des
requtes sur la base de donnes.
Chapitre 4. Accs aux Bases
de donnes avec JDBC
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
48
Cas dune base de donnes MySQL
Pour MySQL il faut utiliser un driver spcifique disponible gratuitement sur
http://dev.mysql.com/downloads/
private String driver = "com.mysql.jdbc.Driver";
private String bridge = "jdbc:mysql:";

private Connection db;
private DatabaseMetaData dbm;


//Etape N 1 : Chargement du Pilote d'acces base de donnes
try {
Class.forName(driver);
} catch (Exception e) {
System.out.println("Erreur de chargement du Driver");
}

//Etape N 2 : ouverture d'une connexion base de donnes
url = bridge + "/" + host + "/" + dbName;
try {
db = DriverManager.getConnection(url, user,
pwd);
dbm = db.getMetaData();
} catch (Exception e) {
System.out.println("Erreur de Connexion");
}
Cas dune base de donnes Oracle
Un driver spcifique est aussi disponible pour Oracle, celui-ci se trouve
dans les rpertoires dinstallation doracle.
Louverture de la base de donnes est effectue en respectant le mme
scnario, mais avec les paramtres suivants :
private String driver = " oracle.jdbc.driver.OracleDriver";
private String bridge = " jdbc:oracle:thin:";

url = bridge + "@" + host + ":1521:" + dbName;


Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
49
Cas dune base de donnes Access via ODBC
Un driver natif est fourni avec le JDK permettant laccs aux bases de
donnes ACCESS publies avec les pilotes ODBC.
Louverture de la base de donnes est aussi effectue en respectant le
mme principe. Les paramtres sont les suivants :
private String driver = " sun.jdbc.odbc.JdbcOdbcDriver";
private String bridge = " jdbc:odbc:";

url = bridge + dbName;

4.4 Excution des requtes SQL
Une requte est un ordre SQL envoy la base et excut par celle-ci.
Une requte peut renvoyer des donnes s'il s'agit d'un SELECT par
exemple, ou modifier le contenu de la base s'il s'agit d'un INSERT par
exemple.
Lexcution des requtes se fait travers un objet de type
java.sql.Statement . ce dernier s'initialise avec la mthode
createStatement de la classe Connection
Dans le cas dune requte SELECT , les donnes retournes
seront stockes dans un objet de type java.sql.ResultSet .
La classe grant les requtes est et celle grant les resultset est
java.sql.ResultSet.
Les requtes s'excutent ensuite avec la mthode
executeQuery() de lobjet Statement pour une requte
SELECT, executeUpdate() pour les autres requtes DML
(INSERT, UPDATE et DELETE), et finalement execute() pour
les requtes DDL.
Un resultset contenant plusieurs lignes se parcourt l'aide de la
mthode next qui renvois false lorsqu'il n'y a plus de lignes
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
50
retournes. L'accs aux colonnes de chaque ligne se faisant via les
mthodes get suivis du nom du type de la colonne telles que
getInt(), getString(), . Ces mthodes get accdent aux colonnes
via leur nom ou leur index (commenant partir de 1).
Voici un exemple d'une requte Select :
Statement sql = db.createStatement();
ResultSet rs = st.executeQuery( "SELECT * FROM produit" );
while( rs.next() ) {
System.out.println( rs.getString( "desig" ) );
System.out.println( rs.getDouble(3) );
}
Remarques
La classe ResultSet possde de nombreuses mthodes permettant de
travailler sur les requtes. Ainsi il est possible de changer la ligne
courante avec absolute, ou encore de se dplacer directement la
premire ou dernire ligne avec first et last. Il est possible de
supprimer une ligne du rsultat et de la base de donnes avec
deleteRow, d'insrer des lignes avec insertRow ou encore de
modifier des valeurs avec update suivit du type de donn a modifier
(updateInt par exemple ).
Les classes Statement et ResultSet renvoient une exception SQLException
si une erreur d'accs la base de donnes se produit. Il est possible de
rcuprer les erreurs renvoyes par le SGBD avec la mthode
getWarnings qui renvois un objet de type SQLWarning
Une fois vos requtes effectues il est ncessaire de fermer la connexion.
Les connexions, les Statement et les ResultSet peuvent tre termins par
le dveloppeur ou automatiquement par le Garbage Collector . Il est
fortement recommand de fermer toutes les ressources utilises
lorsqu'elles ne sont plus ncessaires afin d'viter tous problmes.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
51
La fermeture d'un objet Statement, Connection ou ResultSet se fait via
leurs mthodes close .
rs.close();
sql.close();
db.close();
4.5 Les requtes prpares ou pr compiles :
Prepared Statement
La classe PreparedStatement est directement drive de la classe
Statement. Elle reprend donc les mmes mthodes et fonctionne d'une
manire similaire. Mais contrairement au Statement classique, la requte
est fournie des la cration de l'objet. Elle est alors immdiatement
envoye au SGBD qui la compile. Ainsi un PreparedStatement n'excute
pas une requte SQL mais une requte SQL pr compile.
Cela pour effet une rduction trs forte du temps d'excution lorsque
vous excutez plusieurs fois la mme requte. De plus il y a possibilit de
fournir des paramtres aux requtes permettant ainsi d'utiliser les
PreparedStatement avec des requtes similaires et non forcment
identiques.
La cration d'un PreparedStatement se fait via l'appel de la mthode
createPreparedStatement, de la classe Connection, laquelle on passe la
requte. Les paramtres tant dsign par des "?".
PreparedStatement pst = conn.preparedStatement( "INSERT INTO
ma_table VALUES( ? )" );
Une fois la requte prte il va falloir lui donn les valeurs des paramtres
avant de l'excuter. Il faut pour cela utiliser les mthodes set suivit du
type du paramtre ( setInt par exemple ). Il faut spcifi l'index du
paramtre ( index a 1 ) puis la valeur du paramtre.
Une fois tous les paramtres dfinis on appel la mthode d'excution
voulue ( execute, executeQuery ou executeUpdate ).
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
52
PreparedStatement sql = conn.preparedStatement( "INSERT INTO
ma_table VALUES( ? )" );
for( int cmp = 0 ; cmp < 10 ; cmp++ ) {
sql.setInt( 1 , cmp );
sql.executeUpdate();
}
Une fois son utilisation termine, il faut cette fois-ci encore fermer le
PreparedStatement l'aide de la mthode close.
sql.close();

Les transactions :
Il est possible d'annuler tous ou certains des changements effectus avec
la mthode rollback couple a l'utilisation de setSavePoint et de les valider
avec la mthode commit, il est galement possible de confirmer
automatiquement tous les ordres passs avec autoCommit.
4.6 Appel de procdures stockes
1. Prparer lappel :
CallableStatement st ;
3 cas se prsentent :
1. procedure sans paramtres :
st = db.prepareCall("{call nomProcedure}" );
2. procedure avec paramtres :
st = db.prepareCall("{call nomProcedure(?, , ?)}" );
3. fonction qui retourne un rsultat :
st = db.prepareCall("{ ? = call nomProcedure (?, , ?)}" );

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
53
2. Dfinir les valeur des paramtres dentre :
Utiliser les mthodes setXXX( , ) du Statement. Exemple :
st.setInt(1, valeur);

3. Fixer le type des paramtres de sortie :
Utiliser la fonction registerOutParameter du statement. Exemple :
st.registerOutParameter(2, java.sql.Types.FLOAT);

4. Excution de la procdure :
st.execute();

5. Rcupration du rsultat dappel :
Utiliser les mthodes getResultSet() et getMoreResults() du
Statement.

6. Rcupration des valeurs des paramtres de sortie :
Utiliser les mthodes getXXX( , ) du Statement. Exemple :
System.out.println("Rsultat = " + st.getFloat(2));
4.7 Gestion des transactions
Le mode par dfaut est Auto Commit :
connexion.setAutoCommit(false);
connexion.commit();
connexion.rollback();
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
54
4.8 Accs la structure de la base de donnes
Mta donnes sur les ResultSet

ResultSetMetaData m = rs.getMetaData();
Informations disponibles :
nombre de colonnes,
Libell d'une colonne,
table d'origine,
type associ une colonne,
la colonne est-elle nullable?
etc.
Mta donnes sur la base

DataBaseMetaData dbmd = connexion.getMetaData();
Informations disponibles :
tables existantes dans la base,
nom d'utilisateur,
version du pilote,
etc.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
55
4.9 Extensions JDBC
Nouvelle version des ResultSet
Il existe quatre types de Result Set:
scroll-insensitive: Vision fige du rsultat de la requte au
moment de son valuation.
scroll-sensitive: Le Result Set montre l'tat courant des donnes
(modifies/dtruites).
read-only: Pas de modification possible donc un haut niveau de
concurrence.
updatable: Possibilit de modification donc pose de verrou et faible
niveau de concurrence.
Exemple :
Statement sql = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT * FROM Produit");
Dplacement dans un ResultSet

rs.first();

rs.beforeFirst();

rs.next();

rs.previous();

rs.afterLast();

rs.absolute( n );

rs.relative( n );
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
56
Modification d'un ResultSet

Modification:
rs.absolute(100);
rs.updateString("Desig", "Clavier");
rs.updateInt("Prix", 150);
rs.updateRow();

Destruction:
rs.deleteRow();

Insertion de lignes:
rs.moveToInsertRow();
rs.updateString("Desig", "Clavier");
rs.updateInt("Prix", 150);
rs.insertRow();
rs.first();
Excution des requtes en batch

connexion.setAutoCommit(false);
Statement st = connexion.createStatement();
st.addBatch("INSERT ...");
st.addBatch("DELETE ...");
st.addBatch("UPDATE ...");

int[] nb = st.executeBatch();
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
57
4.10 Gestion des DataSources sous Tomcat
Linterface DataSource a t ajoute lAPI JDBC
(javax.sql.DataSource) pour dfinir les paramtres de connexion
une base de donne.
La configuration des datasources sous tomcat peut tre ralise de
diffrentes manires. Nous prsentons 2 solutions :
1
re
Solution :
Fournir les paramtres de connexion sous forme dune ressource dans le
fichier de configuration context.xml du rpertoire conf se trouvant
dans le rpertoire dinstallation de Tomcat.
Voici un exemple :
<Context>

<Resource
name="jdbc/stock"
type="javax.sql.DataSource"
username="root"
password=""
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/stock"
/>
</Context>

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
58
2
me
Solution :
Faire la mme configuration, mais travers un fichier context.xml du
sous rpertoire MATA-INF de lapplication Web.
Dans tous les cas louverture de connexion pourra tre ralise ensuite
laide des instructions suivantes :
try {
DataSource ds = (DataSource) new
InitialContext().lookup("java:comp/env/NomDeLaRessource");

Connection db = ds.getConnection();
}

Exemple :

try {
DataSource ds = (DataSource) new
InitialContext().lookup("java:comp/env/jdbc/stock ");

Connection db = ds.getConnection();
}
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
59

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
60



4.1 Installation de JBoss avec le support des EJB 3
JBoss est un serveur d'application J2EE dvelopp partir de 1999 par un
franais Marc FLEURY. Ce serveur est crit en Java et il est distribu sous
licence LGPL.
JBOSS est disponible en tlchargement gratuit sur le lien suivant :
http://www.jboss.org/download/


Excuter l'installeur en double-cliquant sur le fichier suivant :
jboss-4.0.4.GA-Patch1-installer.jar




Chapitre 5. Les EJB3 avec
JBoss et Eclipse
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
61
On clique sur OK puis suivant, puis choisir le support ejb3 :

On clique sur suivant puis suivant pour terminer linstallation :





Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
62
Larborescence du rpertoire dinstallation de JBOSS:


bin contient un fichier run.bat qui permettra de dmarrer le serveur
JBOSS.
lib contient les librairies utilises par JBOSS
log contient les logs de fonctionnement de JBOSS
server/default contient l'environnement qui sera utilis par
dfaut au lancement de JBoss.
o Conf contient certains lments de configuration. On y trouve
par exemple la configuration log4j utilis par JBOSS pour les
applications qu'il hberge.
o Deploy contient les applications hberges par JBoss. On y
trouve notamment :
jbossweb-tomcat55.sar qui est le Tomcat embarqu par
JBoss
Cest dans ce rpertoire que seront dploy les EJB

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
63
Afin de vrifier que l'installation et la configuration Jboss est correcte, on
dmarre JBoss en excutant le run.bat qui se trouve dans le chemin
suivant :
Jboss-4.0.4.GA\bin\run.bat



Dmarrer la page daccueil : http://localhost:8080/


Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
64
4.2 Configuration Eclipse
Nous utilisons Eclipse JEE (Ganymede ou Galileo) disponible sur le site :
http://www.eclipse.org sous la rubrique DOWNLODS


Aller par la suite sur le sous-item Installed JREs sous litem JAVA, pour
configuer le JDK. On ajoute et on slectionne alors le chemin vers le JDK.
On obtient la fentre suivante :





Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
65
On ajoute ensuite sous la rubrique Server / Runtime Environments
le chemin vers le serveur JBoss :


On ajoute ensuite le serveur dans la vue Servers en bas de la fentre
Eclipse : Clique bouton droit, en suite New puis Server





Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
66
Licne du serveur JBOSS devrait alors apparatre dabs la vue Servers


Pour le faire dmarrer, cliquez dessus :










Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
67
4.3 Cration dun Bean session avec Eclipse et JBoss
Etape N 1 : Cration du Projet :
Crer un EJB Project.




Il faut sassurer que lenvironnement dexcution cible Target Runtime
est bien le serveur JBoss v4.2 , et que la version des EJB est la version
3.0.
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
68
Etape N 2 : Cration du Bean session :





Il faut sassurer de crer un package dans lequel sera insr lejb session.
Dans le champ State type choisir : statless ou statfull,
Dans cet exemple on utilise stateless , en sachant que limplmentation
de lautre type est tout fait similaire.
Prciser le type de business interface : Local ou Remote. Dans notre
exemple, on utilise une interface distante (Remote).
com.acs.lab.jee.ejb
com.acs.lab.jee.ejb.CalculatriceRemote
com.acs.lab.jee.ejb.CalculatriceRemote
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
69
On obtient :


Lexemple est une simple calculatrice capable de faire la somme de rels.
package com.acs.lab.jee.ejb;
import javax.ejb.Remote;

@Remote
public interface CalculatriceRemote {
public double sum (double x, double y);
}


package com.acs.lab.jee.ejb;

import javax.ejb.Stateless;

@Stateless
public class Calculatrice implements CalculatriceRemote {

public Calculatrice() {

}

public double sum(double x, double y) {
return x+y;
}
}
com.acs.lab.jee.ejb
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
70
Etape N 3 : Dploiement du Bean :

Pour dployer le Bean : click droit sur le projet, puis Run As , et
ensuite Run on Server .
On obtient la fentre suivante, on clique alors Next ensuite Finish






Nous pouvons remarquer que l EJB sajoute comme suit:





Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
71
Etape N 4 : Cration du client :

Il sagit dune application Java ordinaire. Faut-il alors slectionner la
perspective Java :



Crer ensuite un projet Java Le client . Celui-ci doit contenir linterface
Remote (sans les annotations) :




A remarquer que le client peut tre une entit de toute forme : application
avec ou sans interface graphique, un bean, une Servet ou une JSP ou un
autre EJB.
Le stub est une reprsentation locale de l'objet distant. Il implmente
l'interface remote mais contient une connexion rseau pour accder au
Skelton de l'objet distant.
Le mode d'appel d'un EJB suit toujours la mme logique :
Obtenir une rfrence qui implmente l'interface home de l'EJB
grce JNDI.
Crer une instance qui implmente l'interface remote en utilisant la
rfrence prcdemment acquise.
Appel des mthodes de l'EJB.
com.acs.lab.jee.ejb
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
72
La classe du client :

package com.acs.lab.jee.ejb;

import javax.naming.Context;
import javax.naming.InitialContext;

public class Client {
public static void main(String[] args) {
try{
Context context = new InitialContext();
CalculatriceRemote cal =
(CalculatriceRemote)context.lookup("Calculatrice/remote");
System.out.println("somme = " + cal.sum(10, 20));
} catch(Exception e){ e.printStackTrace(); }
}
}

Lappel dun EJB par un client repose sur les APIs JNDI. Pour que cela
fonctionne, il faut dfinir un fichier jndi.properties qui indique au
client les paramtres ncessaires pour localiser lEJB :

java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099

Le client a aussi besoin dun certain nombre de bibliothques quil faut
ajouter au Buid Path de lapplication :




Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
73
Les biliotques sont les suivantes :



4.4 Cration dun Bean Entity :
4.4.1 HSQLDB et JBOSS :
La livraison de JBOSS inclus la base de donnes Hypersonic . Le
fonctionnement de cette base repose sur un jar : hsqldb.jar. Cette archive
contient la fois le code du serveur et le code dun client dadministration.
Hypersonic SQL est un petit systme de gestion de bases de donnes crit
en Java, il est livr avec un administrateur de base se nommant : l'outil
Database Manager, quon pourrait retrouver laide de la JMX Console
depuis la page daccueil de JBoss :


Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
74





Appuyez sur Invoke pour obtenir la fentre du manager :


Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
75
4.4.2 Crer le bean Entity :
Tout dabord nous allons crer un EJB Project comme avant, y ajouter une
classe Produit par exemple qui va reprsenter le Entity bean .




Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
76



package com.acs.lab.jee.ejb;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Produit implements Serializable {
@Id
private String ref;
private String desig;
private double PU;
private int QS;

public Produit() {
super();
}
public Produit(String ref, String desig, double pu, int qs) {
super();
this.ref = ref;
this.desig = desig;
PU = pu;
QS = qs;
}
..GETTER ET SETTER
public String toString(){
return "("+ref+")" +desig+ ":"+PU+"==>"+QS;
}
}

Remarquons :

lajout de deux nouvelles annotations : @Entity,@Id.
La premire est pour indiquer que la classe est lentit persister,
tandis que la seconde prcise la cl primaire prendre en compte
lors de la cration de la table.
La classe doit tre Serializable.

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
77
4.4.3 Raliser un Session Bean :
package com.acs.lab.jee.ejb;
import java.util.List;
import javax.ejb.Remote;

@Remote
public interface StockRemote {
public void insert(Produit p);
public Produit select(String ref);
public List<Produit>selectAll();
}

package com.acs.lab.jee.ejb;

import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class Stock implements StockRemote {
@PersistenceContext
private EntityManager manager;

public Stock() {

}

public void insert(Produit p) {
this.manager.persist(p);
}

public Produit select(String ref) {
return this.manager.find(Produit.class,ref);
}

public List<Produit> selectAll() {
String q = "SELECT * FROM Produit";
Query query=manager.createQuery(q);
List<Produit> list=(List<Produit>)query.getResultList();
return list;
}
}
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
78
Il ya eu lajout de lannotation @PersistenceContext, en plus de
lobjet EntityManager qui aura le rle de grer et faciliter la
communication.
4.4.4 Fichier persistence.xml :
Fichier ajout sous le rpertoire META-INF.


Il sagit dun fichier de configuration permettant dtablir la connexion
avec lunit de persistance adquate.

- Cas de la base de donnes Hypersonic :
<?xml version="1.0" encoding="UTF-8"?>
<persistence>

<persistence-unit name="EJB01">
<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>

Selon la balise <jta-data-source>, nous remarquons que la BD utilise est
celle par dfaut dont le fichier de configuration se trouve dans le chemin :
C:\ProgramFiles\jboss4.0.4.GA\server\default\deploy\hsqldb-ds.xml
Dont voici un extrait :
com.acs.lab.jee.ejb
Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
79
<?xml version="1.0" encoding="UTF-8"?>

<!-- The Hypersonic embedded database JCA connection factory config -->

<!-- $Id: hsqldb-ds.xml,v 1.15.2.1 2006/01/10 18:11:03 dimitris Exp $ -->

<datasources>
<local-tx-datasource>

<!-- The jndi name of the Data Source, it is prefixed with java:/ -->
<!-- Datasources are not available outside the virtual machine -->

<jndi-name>DefaultDS</jndi-name>

</datasources>

- Cas de la base de donnes MySQL :
Dans ce cas, il faut ajouter le fichier MySQL Connector mysql.jar dans
le rpertoire lib suivant :
C:\Program Files\jboss-4.0.4.GA\server\default\lib

Le fichier persisatnce.xml :
<?xml version="1.0" encoding="UTF-8"?>
<persistence>
<persistence-unit name="MySQLbean">
<jta-data-source>java:/MySqlDS</jta-data-source>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.acs.lab.jee.ejb.Produit</class>
<properties>
<property name="hibernate.dialect"
value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>

Copyright ACS TechnoCenter / N. Chenfour, Tel : 06 63 05 10 39, email : nchenfour@acs.ma
80
Remarquons lutilisation du provider Hibernate qui est un Framework open
source grant la persistance des objets en base de donnes relationnelle.
La proprit hibernate.dialect va servir configurer le dialecte SQL de la
base de donnes.
Ce dialecte va servir Hibernate pour optimiser certaines parties de
l'excution en utilisant les proprits spcifiques la base.
Cela se rvle trs utile pour la gnration de cl primaire par exemple.
Aussi nous voyons la property hibernate.hbm3dll.auto ayant pour value
update et qui signifie une synchronisation de la classe avec la base de
donne.
Le fichier de configuration associ devrait tre dfinie dans le rpertoire
suivant :
C:\ProgramFiles\jboss4.0.4.GA\server\default\deploy\mysql-ds.xml

<?xml version="1.0" encoding="UTF-8"?>

<datasources>
<local-tx-datasource>
<jndi-name>MySqlDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/stock
</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>root</user-name>
<password></password>
</local-tx-datasource>
</datasources>

Vous aimerez peut-être aussi