Introduction à Java EE

Jamal Eddine CHERKAOUI

Dans ce tutoriel, on va voir comment créer un projet J2EE, en utilisant :
La plateforme de développement : Eclipse Web Tools Platform (WTP) 2.0.1.
Le serveur web : Apache Tomcat 6.
Le serveur de base de données : MySQL 5.1.
L'utilitaire de gestion de base de données : Toad for Mysql 3.1.
Les frameworks : Hibernate 3, et Struts 1.3.8.

Mes Remerciements vont à :
Ricky81 pour ses encouragements.
djo.mos, OButterlin, et c_nvy pour leurs remarques.
diogene pour sa relecture.

- Titre : Introduction à Java EE

- Auteur : Jamal Eddine CHERKAOUI

- Parution : 23 juin 2008

- Licence : Copyright ® 2008 Jamal Eddine CHERKAOUI. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Installation et configuration de MySQL 5.1

- I-1. Téléchargement de Mysql

- I-2. Installation

- I-3. Configuration

- II. Création de la base de données avec Toad for MySql

- II-1. Téléchargement et installation de Toad for Mysql

- II-2. Création de la base de données

- III. Installation de Hibernate sur Eclipse Web Tools Platform (WTP)

- III-1. Téléchargement de Hibernate 3 et WTP

- III-2. Installation de WTP et de Hibernate

- IV. Installation et test de Apache Tomcat 6

- IV-1. Téléchargement et installation de Tomcat

- IV-2. Test de Tomcat

- V. Projet Tomcat - Hibernate

- V-1. Création du projet Tomcat

- V-2. Préparation du projet

- V-3. Création du fichier de configuration

- V-4. Génération des fichiers de mapping et des classes Java

- V-5. Création de HibernateUtil.java

- V-6. Test d'insertion, de mise à jour, de sélection et de suppression

- VI. La suite du projet avec Struts

- VI-1. Téléchargement et préparation de Struts

- VI-2. Déploiement du projet

- VI-3. Test des formulaires

I - Installation et configuration de MySQL 5.1

La première étape du projet consiste à installer et configurer le serveur de base de données MySql 5.1.

I-1 - Téléchargement de Mysql

Pour télécharger MySQL 5.1, on va à cette adresse: http://dev.mysql.com/downloads/mysql/5.1.html

On choisit de télécharger la version Windows ZIP/Setup.EXE (x86).

Après le téléchargerment, on passe à l'installation du serveur de base de données.

I-2 - Installation

On démarre l'installeur.

On laisse le type d'installation à Typical qui est sélectionné par défaut.

L'installation du serveur MySQL est lancée.

On passe rapidement les fenêtres de publicité de MySql Enterprise.

L'installation est finie, on passe maintenant à la configuration du serveur.

I-3 - Configuration

On commence la configuration d'une instance de notre serveur MySQL.

On laisse le type de configuration comme il est et on continue.

On laisse la configuration à Developer Machine qui est sélectionné par défaut.

On coche Include Bin Directory in Windows PATH pour pouvoir accéder au mode console en cas de problèmes avec MySQL.

On décoche Modify Security Settings pour accéder au compte 'root' sans mot de passe.

On clique sur Execute pour démarrer la création d'une instance du serveur MySQL.

L'instance du serveur a bien été créée, et la configuration est terminée.

II - Création de la base de données avec Toad for MySql

La deuxième étape du projet consiste à installer l'utilitaire Toad for Mysql et à créer la base de données qu'on utilisera durant nos tests.

II-1 - Téléchargement et installation de Toad for Mysql

Pour télécharger Toad for MySql, il faut aller à cette adresse : http://www.toadsoft.com/toadmysql/Overview.htm

L'installation de Toad for MySql est l'une des plus classiques, il suffit de suivre les instructions jusqu'à la fin de l'installation.

L'installation s'est bien déroulée, on passe maintenant à la création de la base de données.

II-2 - Création de la base de données

Après le démarrage de Toad, une fenêtre de connexion apparait, il faut indiquer le nom d'hôte, le nom de l'utilisateur du serveur, le mot de passe, puis le port du serveur, et à la fin, on clique sur 'Connect' pour nous connecter au serveur MySQL.

La connexion a été établie.

On va commencer par créer notre base de données.
Dans le menu, on va à Create -> database, puis on ajoute une base de données au nom de tutorialDB.

On sélectionne la nouvelle base de données dans Object Palette, puis on crée notre première table.
On va à Create -> Table, puis on crée une table au nom de dept avec 2 colonnes :
#id_dept qui sera notre clé primaire.
nom_dept où on stockera le nom du département.

On crée maintenant notre deuxième table au nom de personnel, avec 5 colonnes :
#id_personnel : la clé primaire de la table.
id_dept : la clé étrangère indique à quel département appartient la personne.
nom_personnel : le nom de la personne.
prenom_personnel : le prénom de la personne.
date_naissance : la date de naissance de la personne.

III - Installation de Hibernate sur Eclipse Web Tools Platform (WTP)

La troisième étape du projet consiste à installer Hibernate 3 sur la version WTP d'Eclipse.

III-1 - Téléchargement de Hibernate 3 et WTP

Pour télécharger Hibernate 3, il faut aller à cette adresse : http://www.hibernate.org/

Hibernate Core 3.2.5.ga, Hibernate Tools 3.2.0 GA sont les principaux fichiers dont nous aurons besoin dans notre projet.

On télécharge maintenant Eclipse Web Tools Platform de cette adresse :
http://download.eclipse.org/webtools/downloads/drops/R2.0/R-2.0.1-20070926042742/
La version dont on aura besoin dans notre projet est wtp-all-in-one-sdk-win32, elle intègre les principaux plugins pré-installés pour le développement d'application J2EE.

III-2 - Installation de WTP et de Hibernate

On décompresse WTP.
Voici le contenu de l'archive wtp-all-in-one-sdk-R-2.0.1-20070926042742-win32.zip.

On décompresse les fichiers hibernate-3.2.5.ga.zip et HibernateTools-3.2.0.GA.zip.

On copie le contenu du dossier plugins de HibernateTools-3.2.0.GA dans le dossier plugins d'Eclipse.

On copie le contenu du dossier features de HibernateTools-3.2.0.GA dans le dossier features d'Eclipse.

IV - Installation et test de Apache Tomcat 6

La quatrième étape du projet est l'installation de Apache Tomcat 6 et du plugin Sysdeo pour Eclipse.

IV-1 - Téléchargement et installation de Tomcat

Pour télécharger Apache Tomcat 6, il faut aller à cette adresse : http://tomcat.apache.org/download-60.cgi
On choisit la version Core - Windows Service Installer.

On démarre l'installation de Tomcat.

On accepte la licence.

On laisse le type d'installation à Normal.

On choisit un répertoire d'installation.

On choisit le port, le nom d'utilisateur et le mot de passe.

On sélectionne la version de la machine virtuelle à utiliser.

L'installation de Tomcat est en cours.

L'installation de Tomcat est terminée, on passe maintenant au test.

IV-2 - Test de Tomcat

On se connecte avec un navigateur à cette adresse : http://localhost:8080/.

On clique sur Tomcat Manager, puis on s'identifie avec notre login et mot de passe.

L'authentification est réussie, et on accède au gestionnaire d'application web Tomcat. Donc Tomcat est installé correctement.

V - Projet Tomcat - Hibernate

La cinquième étape du projet consiste à créer un projet Tomcat, et les fichiers nécessaires au bon fonctionnement de Hibernate.

V-1 - Création du projet Tomcat

Au lancement d'Eclipse, on définit un workspace, puis on coche "use this as the defut and do not ask again".

Pour créer un nouveau projet Tomcat, on va à New -> Other...

On sélectionne Dynamic Web Project dans le menu Web, puis on clique sur next.

On donne un nom à notre projet, par exemple tutorialDB, puis on clique sur New... dans Target Runtime.

On sélectionne Apache Tomcat v6.0 dans le menu Apache puis on clique sur Next.

On ajoute le chemin de tomcat dans Tomcat installation directory.

On sélectionne Apache Tomcat v6.0 dans Target Runtime.

On clique sur Finish puis sur Yes pour basculer vers Java EE perspective .

On clique sur Go to workbench pour retourner à notre projet.

Notre projet a bien été créé et voici son arborescence.

V-2 - Préparation du projet

Maintenant on retourne dans le dossier où on a décompressé Hibernate Core pour copier les fichiers indispensable à son utilisation dans le dossier WEB-INF\lib.
Ces fichiers sont : ant-1.6.5.jar, ant-antlr-1.6.5.jar, ant-junit-1.6.5.jar, ant-launcher-1.6.5.jar, antlr-2.7.6.jar, ant-swing-1.6.5.jar, asm.jar, asm-attrs.jar, cglib-2.1.3.jar, commons-collections-2.1.1.jar, commons-logging-1.0.4.jar, dom4j-1.6.1.jar, ehcache-1.2.3.jar, jta.jar, log4j-1.2.11.jar, oscache-2.1.jar.

A la fin, on copie hibernate3.jar qui se trouve à la racine du dossier de Hibernate Core dans le dossier WEB-INF\lib.

On télécharge le driver JDBC pour MySQL : http://dev.mysql.com/downloads/connector/j/5.1.html

On décompresse le fichier, puis on copie le driver dans le dossier WEB-INF\lib.

V-3 - Création du fichier de configuration

Maintenant, on va passer à la création d'un fichier de configuration pour nous connecter à notre base de données MySQL, puis on va générer les fichiers de mapping et les classes Java correspondant aux tables de la base.
On commence par aller à New -> Others...

On choisit Hibernate Configuration File (cfg.xml) dans le menu Hibernate.

On laisse le nom à hibernate.cfg.xml puis on clique sur Next.

On sélectionne MySQL dans Database dialect, puis com.mysql.jdbc.Driver dans Driver class, on écrit l'adresse de la base de données dans Connection URL et à la fin on met le nom d'utilisateur et le mot de passe de la base de données.
On clique sur Next.

On donne un nom à la console Hibernate par exemple : tutorialDB.
Puis on va à l'onglet Classpath .

On ajoute le driver JDBC de MySQL, puis on clique sur Finish pour créer notre fichier de configuration.

Notre fichier de configuration a bien été créé.

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/tutorialDB</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>

On ajoute des propriétés au fichier de configuration :

Les propriétés a ajouté au fichier hibernate.cfg.xml

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.show_sql">true</property>

On va maintenant vérifier si Hibernate arrive à se connecter à MySQL.
On va à Windows -> Show View -> Others...

On sélectionne Hibernate Configurations dans le menu Hibernate.

Quand on déroule l'arborescence de la base de données, on voit bien que Hibernate arrive à se connecter à MySQL.

On passe à Java perspective pour avoir accès à Hibernate Tools.

V-4 - Génération des fichiers de mapping et des classes Java

Maintenant, on passe à la génération de nos fichiers de mapping et des classes Java avec l'outil Hibernate Tools.
On commence par aller à Run -> Hibernate Code Generation... -> Open Hibernate Code Generation Dialog...

On crée une nouvelle configuration.
On fait un clique droit sur Hibenate Code Generation puis on sélectionne New.

Dans l'ongle Main, on commence par sélectionner notre base de données dans Console configuration, puis on ajoute le chemin du répertoire source de notre projet \tutorialDB\WEB-INF\src dans Output directory, on coche Reverse engineer from JDBC Connection, et à la fin on ajoute le nom du Package où les fichiers vont être créer.

Dans reveng.xml, on clique sur Setup... puis Create new... pour créer notre fichier reveng.xml.

On sélectionne le dossier source de notre projet, puis on clique sur Finish.

Maintenant que tout est ok dans l'onglet Main, on passe à Exporters.

Dans General settings, on coche Use Java 5 syntax.
Puis dans Exporters on coche :

- Domain code (.java) pour créer les classes Java correspondantes à nos 2 tables de la base de données, qu'on utilisera pour le développement plus tard.

- Hibernate XML Mappings (.hbm.xml) pour créer nos fichiers de mapping.

- DAO code (.java) (Data Access Object) pour créer nos objets persistants.

- Hibernate XML Configuration (.cfg.xml) pour mettre à jour notre fichier de configuration.

A la fin, on clique sur Apply puis sur Run.

Voici la nouvelle structure de notre projet.
Le package a été créé ainsi que les classes Java et les fichiers de mapping.

Maintenant, il va falloir éditer les 2 fichiers de mapping puisque Hibernate ne reconnait pas que les id des deux tables doivent être incrémenté automatiquement.
On ouvre le fichier de mapping Dept.hbm.xml, puis on change la classe du tag generator de la colonne id_dept de identity à increment.

On fait la même chose pour le fichier de mapping personnel.hbm.xml

V-5 - Création de HibernateUtil.java

On va à New -> Package

On crée un package au nom de com.util

On va à New -> File

On crée un nouveau fichier au nom de HibernateUtil.java

On ajoute le code suivant :

HibernateUtil.java

package com.util;

import org.hibernate.*;
import org.hibernate.cfg.*;

public class HibernateUtil {
public static final SessionFactory sessionFactory;

static {
try {
// Création de la SessionFactory à partir de hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static final ThreadLocal session = new ThreadLocal();

public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

V-6 - Test d'insertion, de mise à jour, de sélection et de suppression

Maintenant on va procéder à la création du fichier testInsert.java pour tester si l'insertion se passe bien.

On ajoute le code suivant :

testInsert.java

import org.hibernate.*;
import com.tutorialDB.Dept;
import com.util.HibernateUtil;

public class testInsert {

public static void main(String[] args)
throws HibernateException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Dept d1 = new Dept();
d1.setNomDept("informatique");
session.save(d1);

session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
}

On va à Run -> Open Run Dialog...

On fait un clique droit sur Java Application puis on sélectionne New.

On clique sur Run pour compiler notre fichier.

L'insertion s'est bien déroulée.

Console

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select max(id_dept) from dept
Hibernate: insert into tutorialDB.dept (nom_dept, id_dept) values (?, ?)

On vérifie avec Toad si les données ont bien été transmises.

Pour tester la mise à jour, on crée un nouveau fichier au nom de testUpdate.java, puis on ajoute le code suivant :

testUpdate.java

import org.hibernate.*;
import com.tutorialDB.Dept;
import com.util.HibernateUtil;

public class testUpdate {

public static void main(String[] args)
throws HibernateException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Dept d1 = (Dept) session.load(Dept.class, 1);

d1.setNomDept("finance");
session.save(d1);

session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
}

On crée une nouvelle configuration d'exécution puis on exécute la classe.
La mise à jour s'est bien déroulée.

Console

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select dept0_.id_dept as id1_0_0_, dept0_.nom_dept as nom2_0_0_ from tutorialDB.dept dept0_ where dept0_.id_dept=?
Hibernate: update tutorialDB.dept set nom_dept=? where id_dept=?

On vérifie dans Toad pour voir si la mise à jour s'est bien déroulée.

Pour tester la sélection, on crée un nouveau fichier au nom de testSelect.java, puis on ajoute le code suivant :

testSelect.java

import java.util.Iterator;
import org.hibernate.*;
import com.util.HibernateUtil;

public class testSelect {

public static void main(String[] args)
throws HibernateException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

String query = "select d.id_dept, d.nom_dept from dept d where d.id_dept = 1";

Iterator results = session.createSQLQuery(query).list().iterator();

while(results.hasNext())
{
Object[] row = (Object[]) results.next();
Integer id = (Integer) row[0];
String nom = (String) row[1];
System.out.println("id_dept = "+id+"| nom_dept = "+nom);
}

session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
}

La sélection s'est bien déroulée.

Console

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select d.id_dept, d.nom_dept from dept d where d.id_dept = 1
id_dept = 1| nom_dept = finance

Pour tester la suppression, on crée un nouveau fichier au nom de testDelete.java, puis on ajoute le code suivant :

testDelete.java

import org.hibernate.*;
import com.tutorialDB.Dept;
import com.util.HibernateUtil;

public class testDelete {

public static void main(String[] args)
throws HibernateException {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();

Dept d1 = (Dept) session.load(Dept.class, 1);
session.delete(d1);

session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
}
}

La suppression s'est bien déroulée.

Console

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: select dept0_.id_dept as id1_0_0_, dept0_.nom_dept as nom2_0_0_ from tutorialDB.dept dept0_ where dept0_.id_dept=?
Hibernate: delete from tutorialDB.dept where id_dept=?

On vérifie dans Toad. On voit que la suppression s'est bien déroulée.

VI - La suite du projet avec Struts

La 6éme étape du projet consiste à créer une interface simple qui permettra de faire l'interaction entre Struts et Hibernate.

VI-1 - Téléchargement et préparation de Struts

Struts est un Framework de développement basé sur l'architecture M-V-C (model-vue-contrôleur).
Pour télécharger Struts, il faut aller à cette adresse : http://struts.apache.org/download.cgi#struts138
On choisit la version struts-1.3.8-all.zip.

On décompresse le fichier téléchargé puis on sélectionne les fichiers : antlr-2.7.2.jar, commons-beanutils-1.7.0.jar, commons-chain-1.1.jar, commons-digester-1.8.jar, commons-fileupload-1.1.1.jar, commons-io-1.1.jar, commons-logging-1.0.4.jar, commons-validator-1.3.1.jar, oro-2.0.8.jar, standard-1.0.2.jar, struts-core-1.3.8.jar, struts-el-1.3.8.jar, struts-extras-1.3.8.jar, struts-scripting-1.3.8.jar, struts-taglib-1.3.8.jar.

On copie les fichiers sélectionnés dans WEB-INF\LIB.

Pour utiliser Struts, on aura besoin de formulaires JSP (Vue) qui envoyent les données pour être stockées dans les JavaBeans (Model). Ces derniers seront récupérés par les classes (contrôleur) qui envoyèrent les données à Hibernate, et qui les enverront par la suite au serveur de base de données.
L'arborescence de notre projet Struts se présente comme suit :

web.xml : Fichier de configuration et de déploiement de l'application web.
struts-config.xml : Fichier de configuration de Struts.

Model :
com.struts.data : Package du model.
DeptForm.java, PersonnelForm.java : Les JavaBeans qui stockent les données envoyées par les formulaires de la page jsp.

Vue :
dept_form.jsp, personnel_form.jsp : Les pages qui contiennent les formulaires.
dept_succes.jsp, personnel_succes.jsp : Les pages qui s'affichent quand l'ajout est effectué par le contrôleur.

Contrôleur :
com.struts.controleur : Package du contrôleur.
AjoutDeptAction.java, AjoutPersAction.java : Les classes qui constituent la partie contrôleur de Struts, elles envoient les données stockées dans les JavaBeans vers Hibernate.

Code Source : tutorialDB.zip
WAR : tutorialDB.war

VI-2 - Déploiement du projet

On passe maintenant au déploiement du projet.
On va à l'onglet Servers, puis on fait un clic droit puis New -> Server.

On sélectionne Tomcat v6.0 Server dans le menu Apache.
Puis on clique sur Next.

On sélectionne notre projet tutorialDB puis on l'ajoute avec add au projet à déployer.
A la fin on clique sur Finish.

Notre serveur a bien été créé.
On clique sur Start the server pour le démarrer.

Le serveur a bien été démarré, on passe maintenant au test.

VI-3 - Test des formulaires

On va à : http://localhost:8080/tutorialDB/dept_form.jsp.
Puis on ajoute un nouveau département, par exemple : mondepartement.

Après la validation, la page Succes s'affiche pour confirmer que le nouveau département a bien été ajouté.

On vérifie avec Toad for MySQL pour voir si l'enregistrement a été ajouté dans notre table dept.

On va à : http://localhost:8080/tutorialDB/personnel_form.jsp pour ajouter un nouveau membre au personnel.

Le nouveau membre a bien été ajouté.

On vérifie avec Toad for MySQL, et on voit que le nouveau membre a été ajouté correctement.