Vous êtes sur la page 1sur 27
Développement EJB 3.0 avec Eclipse Ganymede Cet atelier a pour objectif de démontrer la pr

Développement EJB 3.0 avec Eclipse Ganymede

Cet atelier a pour objectif de démontrer la programmation des EJB 3.0. Il démontre l'utilisation conjointe des beans Entité et Session conformément au design pattern "Session Façade". Il détaille les configurations de l’environnement de développement et des différents outils et serveurs d’applications utilisés. C’est un très bon support qu’on ne peut trouver sur le net et bien adapté à tout niveau.

Installation des outils

Nous utilisons le J2SDK 1.5 de Sun (Tiger).

Comme IDE, la version utilisée ici est Eclipse J2EE Ganymede. Cette version présente les avantages de :

o

supporter le développement des projets EJB 3.0

o

facilité de leur déploiement

o

Intégration du framework DALI 1.2

Eclipse J2EE Ganymede est une version améliorée de Eclipse J2EE Europa et est constitué de la version 3.4 de Eclipse.

L'installation de Eclipse J2EE Ganymede est extrêmement simple, il suffit de décompresser le zip vers un endroit de votre système de fichier.

La version du serveur JBoss utilisée ici est la version JBoss 4.2.2.GA, téléchargeable depuis Sourceforge. La version 4.2.2 présente l'avantage d'être déjà pré-configurée pour le support des EJB 3. Pour l'installer, il suffit simplement de la décompresser dans un répertoire de votre système de fichiers.

Nous allons utiliser aussi le serveur d’application OC4J d’Oracle en Standalone version

10.1.3.4.0.

Nous allons utiliser également les serveurs de base de données HSQLDB utilisé par defaut par JBoss et MySQL.

Scénario de l'atelier

L’objectif ici est de développer un module EJB 3 contenant :

un EJB Entité appelé Article qui représente un Produit appartenant à un stock de produits. Ce bean fera ainsi l'objet d'un mappage objet/relationnel. Le conteneur EJB se chargera de cette tâche.

un EJB de session appelé GestionCommandes sans état qui joue le rôle de façade pour le bean Article. Il s'agit d'un bean sans état qui offre une interface (distante) aux programmes clients leur permettant de gérer des produits (ajouter un produit, consulter un produit, …).

Toutefois, et pour tester notre module EJB une fois déployé, nous développerons un client de test consistant en un simple programme Java autonome qui appellera les méthodes de la façade fonctionnelle GestionCommandes. Ce programme de test sera crée dans un projet Java séparé, et il ne fera naturellement pas l'objet d'un quelconque déploiement sur le serveur d'application.

Les activités avancées du TP couvriront le sujet d'un mappage sur une base de données autre que celle fournie par défaut par JBoss et le sujet des relations managées entre les beans Entité.

Préparation de l’environnement du travail

Déclaration de JBoss dans Eclipse

1. Lancez Eclipse à partir du fichier ECLIPSE_HOME\ eclipse.exe ou. Spécifiez au lancement d'Eclipse le répertoire à utiliser comme répertoire de travail (Workspace).

2. On commence par créer un environnement serveur qui servira pour n’importe quel projet du Workspace :

- Ouvrir la page de préférences du workspace en suivant le chemin suivant :

menu Window -> Preference s-> Server -> Installed RunTime s-> Add

s-> Ser ver -> Installed RunTime s-> Add Développement EJB 3.0 avec Eclipse Ganymede et JBOSS
2 1
2
1

- Dans la liste proposée, sélectionnez le type de serveur "JBoss v4.2", puis sélectionner la configuration "defaut" pour JBoss. Pour le JRE, il est conseillé de travailler avec le JDK 1.5 au lieu du JRE, pour cela suivre le lien "Installed JRE Preferences" présent sur cette boîte de dialogue et spécifier le chemin de votre JDK. Fournir le répertoire de localisation de votre JBoss 4.2.1GA puis Next>

1 2
1
2
1 2
1
2
1 2 Développement EJB 3.0 avec Eclipse Ganymede et JBOSS Adel ELJ pour IFIB Page
1 2
1
2
1 2
1
2

Création d’une connection de base de données

Nous allons créer une connection à une base données existante pour notre workspace.

1. Utiliser l’onglet Data Source Explorer pour le faire : bouton droit Souris sur Database et New…

le faire : bouton droit Souris sur Database et New… 2. Choisir MySQL comme type de

2. Choisir MySQL comme type de base et indiquer un nom de connection par exemple BaseCommerciale (meilleure pratique : utiliser le même nom que votre base existante). Appyer sur Next

1 2 3
1
2
3

3. Appuer sur le bouton

1 2 3 3. Appuer sur le bouton pour définir le pilote (driver) à utiliser. Développement

pour définir le pilote (driver) à utiliser.

sur le bouton pour définir le pilote (driver) à utiliser. Développement EJB 3.0 avec Eclipse Ganymede

4.

Dans l’onglet Name/Type Choisir MySQL JDBC Driver 5.0.

Dans l’onglet Name/Type Choisir MySQL JDBC Driver 5.0 . 5. Dans l’onglet JarList supprimer le driver

5. Dans l’onglet JarList supprimer le driver par défaut et ajouter le votre.

3 1 2
3
1
2
1 2
1
2

6. Dans l’onglet Properties définir les paramétres de votre base.

Properties définir les paramétres de votre base. 7. Tester la connexion. Développement EJB 3.0 avec Eclipse

7. Tester la connexion.

3 2 1
3
2
1

Remarquer l’ajout de la base en bas de la fenêtre de l’espace de travail :

de la base en bas de la fenêtre de l’espace de travail : Développement EJB 3.0

Ecriture de l’application

Création d'un projet EJB 3

1. Créez un nouveau projet du type EJB Project comme suit : Menu File->New->Projet- >EJB Project puis Next

Menu File->New->Projet- >EJB Project puis Next 2. Nommez le projet, GestionCommerciale . Sélectionnez

2. Nommez le projet, GestionCommerciale. Sélectionnez l’environnement JBoss v4.2, précédemment crée, comme environnement d'exécution cible et appuyer sur Modify pour intégrer la facette JPA DALI à votre projet. (Cette intégration pourra se faire après)

1 2 3
1
2
3

3.

côcher l’option Java Persistence 1.0 et appyer sur OK pui sur Finish.

1 2
1
2

4. appuyer sur Next> sans côcher l’option Generate Deployment Descriptor qui correspond à la version EJB2.

Deployment Descriptor qui correspond à la version EJB2. Développement EJB 3.0 avec Eclipse Ganymede et JBOSS

5.

- Choisir la plateforme EclipseLink au lieu de Generic. Cette dernière vous prive de la génération de la base de données à partir des classes Entity et du Reverse Engineering.

- choisir la base correspondante

- cocher l’option Annotated classes must be listed in persistence.xml. Cette option va nous permettre de bénificier de la puissance du framework de persistence DALI.

- Appuyer sur Finish

1 2 3 4
1
2
3
4

Eclipse vous crée une structure de répertoire convenable pour votre projet :

une structure de répert oire convenable pour votre projet : Développement EJB 3.0 avec Eclipse Ganymede

6.

sous JPA Content, le fichier persistence.xml doit contenir toutes les informations nécessaires pour la persistance des données. Ces informations sont nécessaires au gestionnaire de persistance. La structure de ce fichier dépend de l’implémentation de JPA (Hibernate, Toplink, iBatis, JDO, …). Vu qu’on va utiliser JBoss dans cet exemple, il s’agit donc de Hibernate que JBoss a choisi comme implémentation de JPA.

Remarques :

- Vous remarquez la présence de 2 fichiers persistence.xml dans la structure du projet. Il s’agit d’un seul fichier. Le vrai fichier est celui sous META-INF. celui qui se trouve sous JPA Content est une image de l’autre. Preuve : si on supprime le fichier sous META-INF, l’image sous JPA Content sera supprimée, et si on change dans le fichier l’image change en conséquence.

- L’image de persistence.xml sous JPA Content est très utile. Elle sert à synchroniser entre le contenu du fichier avec le code de la couche de persistance que nous allons créer dans la suite.

- N’oublier pas faire une synchronisation avant une nouvelle génération du schéma de la base.

image Fichier principal
image
Fichier principal

7. créer une librairie utilisateur pour MySQL :

principal 7. créer une librairie u tilisateur pour MySQL : Développement EJB 3.0 avec Eclipse Ganymede
2 1
2
1
2 1 8. Associer cette librairie au projet GestionCommerciale : Développement EJB 3.0 avec Eclipse Ganymede
2 1 8. Associer cette librairie au projet GestionCommerciale : Développement EJB 3.0 avec Eclipse Ganymede

8. Associer cette librairie au projet GestionCommerciale :

2 1 3 2 1 3
2
1
3
2
1
3
1 2
1
2

Cocher la librairie MySQLib créée au paravent et appyer sur Finish.

1 2
1
2
MySQLib créée au paravent et appyer sur Finish . 1 2 Remarque : Au lieu de

Remarque : Au lieu de créer une librairie utilisateur, vous pouvez ajouter le fichier .jar directement en utilisant add exeternal jars ou en le plaçant sous %JBOSS_HOME%\server\default\lib.

9. Associer le projet à un environnement Serveur parmis ceux configurés dans le workspace. On va choisir pour notre cas JBoss 4.2.

Faites un click droit sur la fenêtre correspondante à l’onglet Servers et choisir New Server

à l’onglet Se rvers et choisir New Server Choisir JBoss v4.2 at localhost dans le champ

Choisir JBoss v4.2 at localhost dans le champ Server name et faites Next.

2 2
2
2

Pour éviter un conflit avec Oracle, il est préférable de changer le port d’écoute http de JBoss(voir la suite pour la config.)

d’écoute http de JBoss(voir la suite pour la config.) Développement EJB 3.0 avec Eclipse Ganymede et

Ajouter le projet GestionCommerciale au serveur en le selectionnant et appuyant sur Add>. De cette manière, le projet est reconnu par le serveur et peut lui rendre service.

2 1
2
1
est reconnu par le serveur et peut lui rendre service. 2 1 Le serveur est ajouté

Le serveur est ajouté dans la fenêtre correspondante à l’onglet

est ajouté dans la fenêtre correspondante à l’onglet Développement EJB 3.0 avec Eclipse Ganymede et JBOSS
est ajouté dans la fenêtre correspondante à l’onglet Développement EJB 3.0 avec Eclipse Ganymede et JBOSS

Pour configurer un autre port d’écoute sur HTTP pour JBoss, il suffit de modifier le fichier server.xml sous %JBOSS_HOME%\server\default\deploy\jboss-web.deployer.

%JBOSS_HOME%\server\default\deploy\jboss-web.deployer . Fichier server.xml Développement de l’ EJB Entité

Fichier server.xml

. Fichier server.xml Développement de l’ EJB Entité "Article"

Développement de l’ EJB Entité "Article"

Maintenant on va commencer le développement de notre première entité de gestion Article. Elle correspond à une classe entité de base pour la gestion commerciale.

1. Créer un nouveau package appelé persistence : Il va représenter la couche de persistance de tout le projet. Il va renfermer toutes les classes Entity du projet.

1 2 3
1
2
3
1 2 3 2. Créer une classe java Article sous le package persistence . Développement EJB

2. Créer une classe java Article sous le package persistence.

1 2 3
1
2
3
1 2 3 3. Pour qu’elle soit une classe de pers istence, la classe Article doit

3. Pour qu’elle soit une classe de persistence, la classe Article doit :

- implémenter l’interface Serializable,

- avoir des getters et des setters public,

- être annoté @Entity

- Avoir un idantifiant annoté @Id

Petit rappel concernant les EJB Entité

La spécification EJB 3 revoit très largement le développement des Entity Beans. Les EJB Entity sont décrits dans une spécification complémentaire nommée JPA (Java Persistence API) dont les principaux apports sont :

1. Simplification du code via l'utilisation de l'approche "POJO" (Plain Old Java Object): un EJB Entité consiste en une classe Java.

2. Fonctionnalités de mappage objet-relationnel plus riches. La spécification JPA propose d'utiliser les annotations pour définir ce mappage. Des problématiques comme l'héritage ou l'optimisation via l'utilisation de requêtes SQL sont prises en compte. De façon générale, JPA aborde de façon complète et pragmatique le problème de persistance alors que les spécifications EJB précédentes adoptaient une approche plutôt dogmatique et faisaient l'impasse sur des fonctionnalités essentielles permettant de mieux gérer le compromis entre transparence et optimisation.

3. Utilisation possible en dehors d'un serveur d'applications J2EE : JPA peut être utilisée dans une application cliente, la présence d'un conteneur d'EJB n'est plus nécessaire. Des solutions intermédiaires sont aussi possibles : déploiement dans Tomcat d'une application à base de

Servlets et JSP utilisant JPA.

4. Soit donc le code suivant :

package persistence;

import java.io.Serializable; import java.lang.String; import javax.persistence.*;

@Entity public class Article implements Serializable {

private int codeArticle; private String designationArticle; private double quantiteStk;

public Article() {

}

@Id public int getCodeArticle() { return codeArticle;

}

public void setCodeArticle(int codeArticle) { this.codeArticle = codeArticle;

}

public String getDesignationArticle() { return designationArticle;

}

public void setDesignationArticle(String designationArticle) { this.designationArticle = designationArticle;

}

public double getQuantiteStk() { return quantiteStk;

}

public void setQuantiteStk(double quantiteStk) { this.quantiteStk = quantiteStk;

}

}

Il faut importer les interfaces correspondantes aux annotations :

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

Le code indique une erreur sur l’annotation @Entity. Vu que nous avons une nouvelle entité, Il faut la synchroniser avec le fichier presistence.xml en utilisant l’image de ce fichier sous JPA Content.

en utilisant l’image de ce fichier sous JPA Content . Si la table n’existe pas dans

Si la table n’existe pas dans la base, Une erreur est signalée : table Article can not be resolved ou la table Article n’a pas pût être trouvé dans la base. C’est là la valeur ajouté du framework de persistance DALI : Au lieu de perdre du temps en testant l’application pour s’en rendre compte au moment runtime que la table n’existe pas, DALI nous permet de détecter cette erreur au moment de la compilation, ce qui nous procure une autre vitesse de productivité.

ce qui nous procure une autre vitesse de productivité. Pour résoudre le problème, DALI nous offre

Pour résoudre le problème, DALI nous offre la possibilité de générer la table correspondante.

Mais avant de pouvoir utiliser cette fonctionnalité, il faut configurer le fichier persistence.xml. Voici un exemple de contenu :

Vu qu’on utilise les librairies JBoss pour la persistance, on va utiliser une configuration Hibernate. Rappel : la syntaxe de persistence.xml dépend de quel produit de persistance on utilise.

<persistence> <persistence-unit name="GestionCommerciale"> <provider>org.hibernate.ejb.HibernatePersistence </provider> <class> persistence.Article</class> <properties> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <property name="hibernate.connection.username" value="commerce" /> <property name="hibernate.connection.password" value="commerce" /> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/commerce" /> <property name="hibernate.hbm2ddl.auto" value="drop-and-create" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider" /> </properties> </persistence-unit> </persistence>

5. génération automatique de la table correspondante en utilisant la facette JPA :

- click droit sur le projet

- choisir JPA tools

- choisir Generate DDL

1 2 3
1
2
3

Choisir Yes à la question Warning, il s’agit d’une nouvelle base.

6. Vérifier que la table a été générée avec succès.