02.11.2012 Views

Encadr - MultiMania

Encadr - MultiMania

Encadr - MultiMania

SHOW MORE
SHOW LESS

Transformez vos PDF en papier électronique et augmentez vos revenus !

Optimisez vos papiers électroniques pour le SEO, utilisez des backlinks puissants et du contenu multimédia pour maximiser votre visibilité et vos ventes.

UNIVERSITE MOHAMMED PREMIER<br />

ECOLE NATIONALE DES SCIENCES APPLIQUES<br />

OUJDA<br />

Département Génie Informatique<br />

Réalisé par : <strong>Encadr</strong>é par :<br />

YAZIDI ALAOUI Youssef M. BOUCHENTOUF Toumi<br />

EBOURKI Abderrahman<br />

Année universitaire : 2004-2005


Etude de serveur d’application JBoss<br />

Sommaire<br />

1 Introduction :---------------------------------------------------------------------------------------- 3<br />

2 Architecture J2EE : -------------------------------------------------------------------------------- 4<br />

2.1 Introduction :---------------------------------------------------------------------------------- 4<br />

2.2 Définition : ------------------------------------------------------------------------------------ 4<br />

2.2.1 Environnent d’exécution J2EE :------------------------------------------------------ 4<br />

2.2.2 Les API J2EE : ------------------------------------------------------------------------- 4<br />

2.3 Composants J2EE :--------------------------------------------------------------------------- 5<br />

2.3.1 Servlets :--------------------------------------------------------------------------------- 5<br />

2.3.2 Les JSP :--------------------------------------------------------------------------------- 7<br />

2.3.3 Les EJB : -------------------------------------------------------------------------------- 9<br />

3 Les outils de développement : -------------------------------------------------------------------14<br />

3.1 Eclipse :---------------------------------------------------------------------------------------14<br />

3.1.1 L’installation ---------------------------------------------------------------------------15<br />

3.1.2 le Workbench --------------------------------------------------------------------------16<br />

3.1.3 Les fonctions pratiques du Workbench---------------------------------------------16<br />

3.1.4 Le workspace --------------------------------------------------------------------------17<br />

3.1.5 Le Java Development Tooling (JDT)-----------------------------------------------17<br />

3.1.6 Génération de la documentation javadoc-------------------------------------------18<br />

3.1.7 La perspective "debug" ---------------------------------------------------------------19<br />

3.1.8 Le refactoring --------------------------------------------------------------------------19<br />

3.1.9 L'aide dans Eclipse--------------------------------------------------------------------21<br />

3.2 Le serveur d’application JBOSS :---------------------------------------------------------21<br />

3.2.1 Les serveurs d’applications :---------------------------------------------------------21<br />

3.2.2 JBOSS un serveur d’applications compatible J2EE :-----------------------------23<br />

3.2.3 Architecture technique de JBOSS : -------------------------------------------------23<br />

3.2.4 Installation du serveur JBOSS : -----------------------------------------------------25<br />

3.2.5 Quelques caractéristiques de JBOSS :----------------------------------------------26<br />

3.3 L’outil Ant :----------------------------------------------------------------------------------27<br />

3.3.1 Installation de Ant---------------------------------------------------------------------27<br />

3.3.2 Exécution de Ant ----------------------------------------------------------------------28<br />

3.3.3 Le fichier build.xml -------------------------------------------------------------------28<br />

3.4 L’outil XDoclet : ----------------------------------------------------------------------------35<br />

4 Etude de cas réalisé :------------------------------------------------------------------------------36<br />

4.1 Description : ---------------------------------------------------------------------------------36<br />

4.2 Architecture de l’application : -------------------------------------------------------------36<br />

4.3 Préparatifs : JBOSS IDE -------------------------------------------------------------------37<br />

4.4 Création du projet :--------------------------------------------------------------------------41<br />

4.4.1 Création de L’EJB Session : ---------------------------------------------------------42<br />

4.4.2 Création de l’EJB Entity : ------------------------------------------------------------47<br />

4.4.3 Création de la Servlet : ---------------------------------------------------------------52<br />

4.4.4 Création de l’application Web: ------------------------------------------------------57<br />

4.4.5 Déploiement et exécution :-----------------------------------------------------------59<br />

5 Conclusion :----------------------------------------------------------------------------------------62<br />

6 Bibliographie : -------------------------------------------------------------------------------------62<br />

ENSA d’Oujda 2


Etude de serveur d’application JBoss<br />

1 Introduction :<br />

Aujourd’hui, les applications web complexes utilisent les serveurs d’applications J2EE<br />

qui sont une extension des serveurs web grâce aux différents services offerts comme la<br />

gestion de la sécurité, des transactions et leur grande disponibilité. Et face aux différentes<br />

solutions propriétaires du marché, le monde Open Source propose lui aussi des solutions<br />

fiables et stable dont la plus connue est le serveur d’application certifié J2EE Jboss.<br />

C’est dans ce contexte, que se situe notre projet J2EE, d’une durée de 2 mois et sous le<br />

thème : Etude du serveur d’application Jboss, Tomcat et Eclipse. Il s’agit en effet d’un projet<br />

dont l’objectif consiste à installer, manipuler et mettre en œuvre le serveur d’application Jboss<br />

avec le moteur de Servlet intégré Tomcat d’Apache et réaliser une étude de cas détaillé tout<br />

en profitant des possibilités offertes par un environnement de développement intégré comme<br />

Eclipse.<br />

Ce rapport de projet décrit une étude de cas détaillé et qui met en œuvre deux types de<br />

composants EJB : un EJB session et un autre EJB Entity type CMP pour la gestion de la<br />

persistance ainsi qu’une Servlet pour communiquer avec le client en utilisant le serveur<br />

d’application open source Jboss.<br />

La première partie de ce rapport décrit en détail l’architecture J2EE ainsi que les<br />

composants utilisés comme les EJB ou les servlets. La deuxième partie traite les outils de<br />

développement utilisés qui sont le serveur d’application Jboss, l’IDE Eclipse, Ant, Tomcat et<br />

XDoclet. La dernière partie décrit l’étude de cas réalisé qui récapitule l’ensemble des<br />

connaissances acquises à propos des composants J2EE ainsi que le serveur d’application<br />

Jboss.<br />

Ce rapport se termine par une conclusion et éventuellement des perspectives.<br />

ENSA d’Oujda 3


Etude de serveur d’application JBoss<br />

2 Architecture J2EE :<br />

2.1 Introduction :<br />

J2EE signifie Java 2 Entreprise Edition et repose donc sur Java, le fameux langage objet<br />

conçu pour être "portable" ("Write Once, Run Anywhere").<br />

Dès son origine, java a révolutionné plusieurs domaines de l'informatique, que ça soit la<br />

téléphonie, l'Internet ou les applications d'entreprise. Aujourd'hui, SUN a réorganisé son offre<br />

autour de 3 briques :<br />

� Java 2 Standard Edition (J2SE) qui vise les postes clients.<br />

� Java 2 Micro Edition (J2ME) qui cible les terminaux portables.<br />

� Java 2 Entreprise Edition (J2EE) qui définit le cadre d'un serveur d'applications et<br />

d'intégration.<br />

2.2 Définition :<br />

J2EE est une plateforme orientée serveur pour le développement et l’exécution<br />

d’application distribuées. Elle se compose de deux parties :<br />

� Un ensemble de spécifications pour un environnement exécutant les composants Java<br />

qui se nomme serveur d’applications.<br />

� Un ensemble d’API qui peuvent être obtenus et utilisées séparément.<br />

2.2.1 Environnent d’exécution J2EE :<br />

Un des avantages majeurs de J2EE est de faire abstraction de l'infrastructure d'exécution.<br />

En effet, J2EE spécifie les rôles et les interfaces pour les applications, ainsi que<br />

l'environnement d'exécution dans lequel les applications sont déployées. Ceci permet aux<br />

développeurs d'application de ne pas avoir a reprogrammé les services d'infrastructure.<br />

2.2.2 Les API J2EE :<br />

Le serveur J2EE va fournir à votre application un ensemble de services comme les<br />

connexions aux bases de données, la messagerie, les transactions... L'architecture J2EE unifie<br />

l'accès à ces services au sein des API de ses services d'entreprise mais plutôt que d'avoir accès<br />

à ces services au travers d'interfaces propriétaires ou non standard, les applications J2EE<br />

peuvent accéder à ces API via le serveur.<br />

La spécification de la plateforme J2EE prévoit un ensemble d'extensions Java standard<br />

que chaque plate-forme J2EE doit prendre en charge : JNDI, JDBC, SERVLET, JSP, JMS,<br />

JTA, et les EJB.<br />

ENSA d’Oujda 4


Etude de serveur d’application JBoss<br />

2.3 Composants J2EE :<br />

2.3.1 Servlets :<br />

Une servlet est un programme qui s'exécute côté serveur en tant qu'extension du serveur.<br />

Elle reçoit une requête du client, elle effectue des traitements et renvoie le résultat. La liaison<br />

entre la servlet et le client peut être directe ou passer par un intermédiaire comme par exemple<br />

un serveur http.<br />

Même si pour le moment la principale utilisation des servlets est la génération de pages<br />

html dynamiques utilisant le protocole http et donc un serveur web, n'importe quel protocole<br />

reposant sur le principe de requête/réponse peut faire usage d'une servlet.<br />

Ecrite en java, une servlet en retire ses avantages : la portabilité, l'accès à toutes les API<br />

de java dont JDBC pour l'accès aux bases de données, ... Une servlet peut être invoquée<br />

plusieurs fois en même temps pour répondre à plusieurs requêtes simultanées.<br />

La servlet se positionne dans une architecture Client/Serveur trois tiers dans le tiers du<br />

milieu entre le client léger chargé de l'affichage et la source de données.<br />

Fonctionnement :<br />

Un serveur d'application permet de charger et d'exécuter les servlets dans une JVM. C'est<br />

une extension du serveur web. Ce serveur d'application contient entre autre un moteur de<br />

servlets qui se charge de manager les servlets qu'il contient. Pour exécuter une servlet, il suffit<br />

de saisir une URL qui désigne la servlet dans un navigateur.<br />

1. Le serveur reçoit la requête http qui nécessite une servlet de la part du navigateur.<br />

2. Si c'est la première sollicitation de la servlet, le serveur l'instancie. Les servlets sont<br />

stockées (sous forme de fichier .class) dans un répertoire particulier du serveur. Ce<br />

répertoire dépend du serveur d'application utilisé. La servlet reste en mémoire jusqu'à<br />

l'arrêt du serveur. Certains serveurs d'application permettent aussi d'instancier des<br />

servlets dès le lancement du serveur. La servlet en mémoire, peut être appelée par<br />

plusieurs threads lancés par le serveur pour chaque requête. Ce principe de<br />

fonctionnement évite d'instancier un objet de type servlet à chaque requête et permet<br />

de maintenir un ensemble de ressources actives tel qu'une connexion à une base de<br />

données.<br />

3. le serveur créé un objet qui représente la requête http et objet qui contiendra la réponse<br />

et les envoie à la servlet.<br />

4. la servlet créé dynamiquement la réponse sous forme de page html transmise via un<br />

flux dans l'objet contenant la réponse. La création de cette réponse utilise bien sûre la<br />

requête du client mais aussi un ensemble de ressources incluses sur le serveur tels de<br />

que des fichiers ou des bases de données.<br />

5. le serveur récupère l'objet réponse et envoie la page html au client.<br />

ENSA d’Oujda 5


Etude de serveur d’application JBoss<br />

Les servlets http :<br />

L'usage principal des servlets est la création de pages HTML dynamiques. Sun fourni une<br />

classe qui encapsule une servlet utilisant le protocole http. Cette classe est la classe<br />

HttpServlet. Cette classe hérite de GenericServlet, donc elle implémente l'interface Servlet, et<br />

redéfinie toutes les méthodes nécessaires pour fournir un niveau d'abstraction permettant de<br />

développer facilement des servlets avec le protocole http.<br />

Ce type de servlet n'est pas utile que pour générer des pages HTML bien que cela soit son<br />

principal usage, elle peut aussi réaliser un ensemble de traitements tel que mettre à jour une<br />

base de données. En réponse, elle peut générer une page html qui indique le succès ou non de<br />

la mise à jour.<br />

La requête du client est encapsulée dans un objet qui implémente l'interface<br />

HttpServletRequest : cet objet contient les données de la requête et des informations sur le<br />

client. La réponse de la servlet est encapsulée dans un objet qui implémente l'interface<br />

HttpServletResponse.<br />

Typiquement pour définir une servlet, il faut définir une classe qui hérite de la classe<br />

HttpServlet et redéfinir la classe doGet et/ou doPost selon les besoins. La méthode service<br />

héritée de HttpServlet appelle l'une ou l'autre de ces méthodes en fonction du type de la<br />

requête http :<br />

� une requête GET : c'est une requête qui permet au client de demander une ressource.<br />

� une requête POST : c'est une requête qui permet au client d'envoyer des informations<br />

issues par exemple d'un formulaire.<br />

La classe HttpServlet hérite aussi de plusieurs méthodes définies dans l'interface Servlet:<br />

init(), destroy() et getServletInfo().<br />

La méthode init() : Les paramètres d’initialisation de la servlet.<br />

La méthode DoGet() : Le traitement typique de la méthode doGet() est d'analyser les<br />

paramètres de la requête, alimenter les données de l'en-tête de la réponse et d'écrire la<br />

réponse.<br />

La méthode DoPost() : Une requête POST n'est utilisable qu'avec un formulaire<br />

HTML. La méthode doPost() doit généralement recueillir les paramètres pour les traiter et<br />

générer la réponse. Pour obtenir la valeur associée à chaque paramètre il faut utiliser la<br />

méthode getParameter() de l'objet HttpServletRequest. Cette méthode attend en paramètre le<br />

nom du paramètre dont on veut la valeur. Ce paramètre est sensible à la casse.<br />

ENSA d’Oujda 6


Etude de serveur d’application JBoss<br />

2.3.2 Les JSP :<br />

Les JSP permettent d'introduire du code Java dans des tags prédéfinis à l'intérieur d'une<br />

page HTML. La technologie JSP mélange la puissance de Java côté serveur et la facilité de<br />

mise en page d'HTML côté client. En fait dans une servlet, les traitements et la présentation<br />

sont regroupés. L'aspect présentation est dans ce cas pénible à développer et à maintenir à<br />

cause de l'utilisation répétitive de méthodes pour insérer le code HTML dans le flux de sortie.<br />

De plus, une simple petite modification dans le code HTML nécessite la recompilation de<br />

la servlet. Avec un JSP, la séparation des traitements et de la présentation rend ceci très facile<br />

et automatique.<br />

Une JSP est habituellement constituée de données HTML, de tags JSP et de scriplets :<br />

2.3.2.1 Les tags de directives :<br />

Les directives permettent de préciser des informations globales sur la page JSP. Leur<br />

syntaxe est la suivante :<br />

<br />

Les spécifications des JSP définissent trois directives :<br />

page : permet de définir des options de configuration<br />

Exemples :<br />

:défini un import.<br />

: définit le type mime.<br />

include : le fichier inclus peut être un fragment de code JSP, HTML ou Java. Le fichier est<br />

inclus dans la JSP avant que celle ci ne soit interprétée par le moteur de JSP. La syntaxe est la<br />

suivante :<br />

ENSA d’Oujda 7


Etude de serveur d’application JBoss<br />

<br />

taglib : permet de définir des tags personnalisés.<br />

2.3.2.2 Les tags de scripting<br />

Ces tags permettent d'insérer du code Java qui sera inclus dans la servlet générée à partir<br />

de la JSP. Il existe trois tags pour insérer du code Java :<br />

Le tag de déclarations : <br />

Ce tag permet de déclarer des variables ou des méthodes qui pourront être utilisées dans<br />

la JSP. Il ne génère aucun caractère dans le fichier HTML de sortie.<br />

Exemple : <br />

Il est possible de déclarer plusieurs variables dans le même tag en les séparant avec des<br />

caractères ' ;'.<br />

Le tag d'expressions : <br />

Le moteur de JSP remplace ce tag par le résultat de l'évaluation de l'expression présente<br />

dans le tag. Ce résultat est toujours converti en une chaîne.<br />

Exemple :<br />

Date du jour :<br />

<br />

<br />

Le tag des scriplets : <br />

Ce tag contient du code Java nommé un scriptlet. Par défaut, le code inclus dans le tag est<br />

inséré dans la méthode service() de la servlet générée à partir de la JSP.<br />

Exemple :<br />

<br />

<br />

Essai de page JSP<br />

<br />

<br />


Etude de serveur d’application JBoss<br />

2.3.2.3 Les tags de commentaires<br />

Il existe deux types de commentaires avec les JSP :<br />

Les commentaires visibles dans le code HTML : <br />

Ces commentaires sont ceux définis par format HTML. Ils sont intégralement reconduit<br />

dans le fichier HTML généré. Il est possible d'insérer, dans ce tag, un tag JSP de type<br />

expression qui sera exécuté.<br />

Exemple :<br />

Dans la JSP :<br />

−−><br />

Dans la page HTML générée :<br />

<br />

Les commentaires cachés : <br />

Les commentaires cachés sont utilisés pour documenter la page JSP. Leur contenu est<br />

ignoré par le moteur de JSP et ne sont donc pas reconduit dans la page HTML générée.<br />

2.3.2.4 Les tags d'actions<br />

Les tags d'actions permettent de réaliser des traitements couramment utilisés.<br />

2.3.3 Les EJB :<br />

• Le tag : Ce tag permet de localiser une instance ou d'instancier<br />

un bean pour l'utiliser dans la JSP.<br />

• Le tag : Ce tag permet de mettre à jour la valeur d'un ou<br />

plusieurs attributs d'un Bean.<br />

• Le tag : Ce tag permet d'obtenir la valeur d'un attribut d'un<br />

Bean.<br />

• Le tag : Ce tag permet de rediriger la requête vers une autre<br />

URL pointant vers un fichier HTML, JSP ou un servlet.<br />

• Le tag : Ce tag permet d'inclure le contenu généré par une JSP ou<br />

une servlet dynamiquement au moment ou la JSP est exécutée. C'est la<br />

différence avec la directive include avec laquelle le fichier est inséré dans la<br />

JSP avant la génération de la servlet.<br />

Les Entreprise Java Bean ou EJB sont des composants serveurs donc non visuel qui<br />

respectent les spécifications d'un modèle édité par Sun. Ces spécifications définissent une<br />

architecture, un environnement d'exécution et un ensemble d'API.<br />

ENSA d’Oujda 9


Etude de serveur d’application JBoss<br />

Le respect de ces spécifications permet d'utiliser les EJB de façon indépendante du<br />

serveur d'applications J2EE dans lequel ils s'exécutent, du moment ou le code de mise en<br />

oeuvre des EJB n'utilisent pas d'extensions proposées par un serveur d'applications particulier.<br />

En fait Le but des EJB est de faciliter la création d'applications distribuées pour les<br />

entreprises.<br />

Une des principales caractéristiques des EJB est de permettre aux développeurs de se<br />

concentrer sur les traitements orientés métiers car les EJB et l'environnement dans lequel ils<br />

s'exécutent prennent en charge un certain nombre de traitements tel que la gestion des<br />

transactions, la persistance des données, la sécurité, ...<br />

Physiquement, un EJB est un ensemble d'au moins deux interfaces et une classe<br />

regroupée dans un module contenant un descripteur de déploiement particulier.<br />

2.3.3.1 Présentation des EJB<br />

Les EJB sont des composants et en tant que tel, ils possèdent certaines caractéristiques<br />

comme la réutilisabilité, la possibilité de s'assembler pour construire une application, etc. Les<br />

EJB et les beans n'ont en commun que d'être des composants. Les java beans sont des<br />

composants qui peuvent être utilisés dans toutes les circonstances. Les EJB doivent<br />

obligatoirement s'exécuter dans un environnement serveur dédié.<br />

Il sont parfaitement adaptés pour être intégrés dans une architecture trois tiers ou plus. Et<br />

ils s'exécutent dans un environnement particulier : le serveur d'EJB. Celui ci fournit un<br />

ensemble de fonctionnalités utilisées par un ou plusieurs conteneurs d'EJB qui constituent le<br />

serveur d'EJB. En réalité, c'est dans un conteneur que s'exécute un EJB et il lui est impossible<br />

de s'exécuter en dehors.<br />

Le conteneur d'EJB propose un certain nombre de services qui assurent la gestion :<br />

� du cycle de vie du bean<br />

� de l'accès au bean<br />

ENSA d’Oujda 10


Etude de serveur d’application JBoss<br />

� de la sécurité d'accès<br />

� des accès concurrents<br />

� des transactions<br />

Les entités externes au serveur qui appellent un EJB ne communiquent pas directement<br />

avec celui ci. Les accès au EJB par un client se fait obligatoirement via le conteneur.<br />

L'avantage de passer par le conteneur est que celui ci peut utiliser les services qu'il propose et<br />

libérer ainsi le développeur de cette charge de travail. Ceci permet au développeur de se<br />

concentrer sur les traitements métiers proposés par le bean.<br />

Il existe deux types d'EJB : les EJB de session (session beans) et les EJB entité (les entity<br />

beans). Depuis la version 2.0 des EJB, il existe un troisième type d’EJB : les EJB orienté<br />

message (message driven beans).<br />

2.3.3.2 Le développement d'un EJB<br />

Le cycle de développement d'un EJB comprend :<br />

� la création des interfaces et des classes du bean<br />

� le packaging du bean sous forme de fichier archive jar<br />

� le déploiement du bean dans un serveur d'EJB<br />

� le test du bean<br />

La création d'un bean nécessite la création d'au minimum deux interfaces et une classe<br />

pour respecter les spécifications de Sun : la classe du bean, l'interface remote et l'interface<br />

home.<br />

L'interface remote permet de définir l'ensemble des services fournis par le bean. Cette<br />

interface étend l'interface EJBObject. Dans la version 2.0 des EJB, l'API propose une<br />

interface supplémentaire, EJBLocalObject, pour définir les services fournis par le bean qui<br />

peuvent être appelés en local par d'autres beans. Ceci permet d'éviter de mettre en oeuvre<br />

toute une mécanique longue et coûteuses en ressources pour appeler des beans s'exécutant<br />

dans le même conteneur.<br />

L'interface home permet de définir l'ensemble des services qui vont permettre la gestion<br />

du cycle de vie du bean. Cette interface étend l'interface EJBHome.<br />

La classe du bean contient l'implémentation des traitements du bean. Cette classe<br />

implémente les méthodes déclarées dans les interfaces home et remote. Les méthodes<br />

définissant celle de l'interface home sont obligatoirement préfixées par "ejb".<br />

L'accès aux fonctionnalités du bean se fait obligatoirement par les méthodes définies dans<br />

les interfaces home et remote et il existe un certain nombre d'API qu'il n'est pas possible<br />

d'utiliser dans un EJB :<br />

• les threads<br />

• flux pour des entrées/sorties<br />

• du code natif<br />

• AWT et Swing<br />

ENSA d’Oujda 11


Etude de serveur d’application JBoss<br />

L'interface remote<br />

L'interface remote permet de définir les méthodes qui contiendront les traitements<br />

proposés par le bean. Cette interface doit étendre l'interface javax.ejb.EJBObject. Toutes les<br />

méthodes définies dans cette interface doivent obligatoirement respecter les spécifications de<br />

RMI et déclarer qu'elles peuvent lever une exception de type RemoteException. L'interface<br />

javax.ejb.EJBObject définit plusieurs méthodes qui seront donc présentes dans tous les EJB :<br />

L'interface home<br />

• EJBHome getEJBHome() : renvoie une référence sur l'objet Home<br />

• Handle getHandle() : renvoie un objet permettant de sérialiser le bean<br />

• Object getPrimaryKey() : renvoie une référence sur l'objet qui encapsule la clé<br />

primaire d'un bean entité<br />

• booléen isIdentical(EJBObject) : renvoie un booléen qui précise si le bean est<br />

identique à l'instance du bean fourni en paramètre. Pour un bean session sans<br />

état, cette méthode renvoie toujours true. Pour un bean entité, la méthode<br />

renvoie true si la clé primaire des deux beans est identique.<br />

• void remove() : cette méthode demande la destruction du bean. Pour un bean<br />

entité, elle provoque la suppression des données correspondants dans la base de<br />

données.<br />

L'interface home permet de définir des méthodes qui vont gérer le cycle de vie du bean.<br />

Cette interface doit étendre l'interface EJBHome. La création d'une instance d'un bean se fait<br />

grâce à une ou plusieurs surcharges de la méthode create(). Chacune de ces méthodes renvoie<br />

une instance d'un objet type de l'interface remote L'interface javax.ejb.EJBHome définit<br />

plusieurs méthodes :<br />

• EJBMetaData getEJBMetaData() throws java.rmi.RemoteException<br />

• HomeHandle getHomeHandle() throws java.rmi.RemoteException : renvoie<br />

un objet qui permet de sérialiser l'objet implémentant l'interface EJBHome<br />

• void remove(Handle) throws java.rmi.RemoteException,<br />

javax.ejb.RemoveException : supprime le bean<br />

• void remove(Object) throws java.rmi.RemoteException,<br />

javax.ejb.RemoveException : supprime le bean entité dont l'objet encapsulant la<br />

clé primaire est fourni en paramètre<br />

La ou les méthodes à définir dans l'interface home dépendent du type d'EJB:<br />

ENSA d’Oujda 12


Etude de serveur d’application JBoss<br />

2.3.3.3 Les EJB session<br />

Un EJB session est un EJB de service dont la durée de vie correspond à un échange avec<br />

un client. Ils contiennent les règles métiers de l'application. Il existe deux types d'EJB session<br />

: sans état (stateless) et avec état (statefull).<br />

Les EJB session statefull sont capables de conserver l'état du bean dans des variables<br />

d'instance durant toute la conversation avec un client. Mais ces données ne sont pas<br />

persistantes : à la fin de l'échange avec le client, l'instance de l'EJB est détruite et les données<br />

sont perdues. Par contre les stateless ne peuvent pas conserver de telles données entre chaque<br />

appel du client.<br />

Il ne faut pas faire appel directement aux méthodes create() et remove() de l'EJB. C'est le<br />

conteneur d'EJB qui se charge de la gestion du cycle de vie de l'EJB et qui appelle ces<br />

méthodes. Le client décide simplement du moment de la création et de la suppression du bean<br />

en passant par le conteneur.<br />

Une classe qui encapsule un EJB session doit implémenter l'interface<br />

javax.ejb.SessionBean. Elle ne doit pas implémenter les interfaces home et remote mais elle<br />

doit définir les méthodes déclarées dans ces deux interfaces.<br />

2.3.3.4 Les EJB entité<br />

Ces EJB permettent de représenter et de gérer des données enregistrées dans une base de<br />

données. Ils implémentent l'interface EntityBean.<br />

L'avantage d'utiliser un tel type d'EJB plutôt que d'utiliser JDBC ou de développer sa<br />

propre solution pour mapper les données est que certains services sont pris en charge par le<br />

conteneur.<br />

Les beans entité assurent la persistance des données en représentant tout au partie d'une<br />

table ou d'une vue. Il existe deux types de bean entité :<br />

• persistance gérée par le conteneur (CMP : Container Managed Persistence)<br />

• persistance gérée par le bean (BMP : Bean Managed Persistence).<br />

Avec un bean entité CMP, c'est le conteneur d'EJB qui assure la persistance des données<br />

grâce aux paramètres fournis dans le descripteur de déploiement du bean. Il se charge de toute<br />

la logique des traitements de synchronisation entre les données du bean et les données dans la<br />

base de données. Tandis qu’un bean entité BMP, assure lui même la persistance des données<br />

grâce à du code inclus dans les méthodes du bean.<br />

2.3.3.5 Le déploiement des EJB<br />

Pour permettre le déploiement d'un EJB, il faut définir un fichier DD (deployement<br />

descriptor) qui contient des informations sur le bean. Ce fichier au format XML permet de<br />

donner au conteneur d'EJB des caractéristiques du bean.<br />

ENSA d’Oujda 13


Etude de serveur d’application JBoss<br />

Un EJB doit être déployé sous forme d'une archive jar qui doit contenir un fichier qui est<br />

le descripteur de déploiement et toutes les classes qui composent chaque EJB (interfaces<br />

home et remote, les classes qui implémentent ces interfaces et toutes les autres classes<br />

nécessaires aux EJB).<br />

Une archive ne doit contenir qu'un seul descripteur de déploiement pour tous les EJB de<br />

l'archive. Ce fichier au format XML doit obligatoirement être nommé ejb−jar.xml. et met dans<br />

un répertoire META−INF qui contiendra lui même le descripteur de déploiement. Le reste de<br />

l'archive doit contenir les fichiers .class avec toute l'arborescence des répertoires des<br />

packages.<br />

L'appel d'un EJB par un client<br />

Un client peut être une entité de toute forme : application avec ou sans interface<br />

graphique, un bean, une servlet ou une JSP ou un autre EJB.<br />

Le mode d'appel d'un EJB suit toujours la même logique :<br />

• obtenir une référence qui implémente l'interface home de l'EJB grâce à JNDI<br />

• créer une instance qui implémente l'interface remote en utilisant la référence<br />

précédemment acquise<br />

• appelle de la ou des méthodes de l'EJB<br />

2.3.3.6 Les EJB orientés messages<br />

Ces EJB sont différents des deux types d'EJB car ils répondent à des invocations de façon<br />

asynchrone. Ils permettent de réagir à l'arrivée de messages fournis par un M.O.M.<br />

(middleware oriented messages).<br />

3 Les outils de développement :<br />

3.1 Eclipse :<br />

Eclipse est un environnement de développement intégré (Integrated Development<br />

Environment) développé en Java dont le but est de fournir une plate−forme modulaire pour<br />

permettre de réaliser des développements informatiques.<br />

I.B.M. est à l'origine du développement d'Eclipse qui est d'ailleurs toujours le cœur de<br />

son outil Websphere Studio Workbench (WSW). Tout le code d'Eclipse a été donné à la<br />

communauté par I.B.M afin de poursuivre son développement.<br />

Les principaux modules fournis en standard avec Eclipse concernent le développement<br />

avec Java mais d’autres modules peuvent être ajoutés pour d'autres langages notamment C++,<br />

Cobol, et d'autres aspects de développement (base de données, conception avec UML, … ).<br />

Les performances à l'exécution d'Eclipse sont très bonnes car il n'utilise pas Swing pour<br />

l'interface homme−machine mais un toolkit particulier nommé SWT associé à la bibliothèque<br />

ENSA d’Oujda 14


Etude de serveur d’application JBoss<br />

JFace. SWT (Standard Widget Toolkit) est développé en Java par IBM en utilisant au<br />

maximum les composants natifs fournis par le système d'exploitation sous jacent.<br />

Eclipse est formé d’un noyau (le Runtime) qui est le cœur de la plate-forme et d’un<br />

ensemble de modules nommés plug-ins, cela permet l’extension de la plate-forme et ainsi<br />

fournir la possibilité à des tiers de développer des fonctionnalités qui ne sont pas fournies en<br />

standard par Eclipse.<br />

3.1.1 L’installation<br />

Avant de commencer l’installation, il faut obligatoirement qu'un JDK 1.3 minimum y soit<br />

installé. La version 1.4 est fortement recommandée pour améliorer les performances et<br />

pouvoir utiliser le remplacement de code lors du débogage (technologie JPDA).<br />

les plate−formes supportant Eclipse sont Windows ( 98ME et SE / NT / 2000 / XP),<br />

Linux , Solaris 8, QNX, AIX 5.1, HP−UX 11, MAC OS X.<br />

� Sous Windows<br />

Sur le site http://www.eclipse.org/downloads/index.php télécharger le fichier<br />

eclipse−SDK−3.0.1−win32.zip. Ensuite, extraire l'archive dans un répertoire et exécuter le<br />

programme eclipse.exe. le programme termine automatiquement l’installation puis s’exécute.<br />

� Sous Linux<br />

Il faut ajouter le répertoire bin du JDK à la variable système PATH pour permettre au<br />

système de trouver les exécutables nécessaires.<br />

PATH=$PATH: /opt/IBMJava2−13/bin<br />

Pour exécuter Eclipse, il suffit de le lancer dans un shell.<br />

$ eclipse −data workspace<br />

� Lancer Eclipse<br />

Eclipse accepte plusieurs paramètres sur la ligne de commande qui lance l'application.<br />

Les plus importants sont :<br />

–vm : préciser la machine virtuelle qui va exécuter Eclipse.<br />

–data : préciser l'emplacement du workspace.<br />

–ws : préciser sous les environnements de type Unix la bibliothèque graphique utilisée,<br />

"motif" ou "gtk".<br />

Exemple : Eclipse.exe −vm C:\java\jre1.4.2\bin\javaw.exe<br />

ENSA d’Oujda 15


Etude de serveur d’application JBoss<br />

3.1.2 le Workbench<br />

Au lancement d’Eclipse, une seul fenêtre s’ouvre contenant le Workbench. Il est composé<br />

de huit perspectives. Chaque perspective est adaptée a un usage particulier :<br />

Une perspective contient des sous fenêtres qui peuvent contenir des vues et des éditeurs.<br />

Les vues sont pour sélectionner des éléments et les éditeurs pour visualiser et modifier leur<br />

contenu.<br />

3.1.3 Les fonctions pratiques du Workbench<br />

� La fonction de recherche :<br />

Cette fonction de recherche permet d'obtenir une liste d'éléments qui contiennent une<br />

chaîne désignée par un motif. Elle peut se faire dans tous les fichiers, dans les fichiers source<br />

Java ou dans l'aide en ligne.<br />

Exemple : recherche des chaines qui se termine par « Bean » dans les fichier java<br />

Pour la chaîne : *Bean<br />

Pour les fichiers :*.java<br />

� La liste des tâches :<br />

La vue "Tâches" affiche et permet de gérer une liste de tâches à faire. Ces tâches peuvent<br />

être de plusieurs types :<br />

• des actions à réaliser �<br />

• des erreurs de compilation �<br />

• des points d'arrêt pour le debugage �<br />

� La liste des signets<br />

ENSA d’Oujda 16


Etude de serveur d’application JBoss<br />

Les signets permettent de maintenir une liste d'éléments particuliers dans le but d'y<br />

accéder rapidement.<br />

� La comparaison d'éléments<br />

Le workbench dispose d'un outil pratique pour comparer le contenu de deux éléments.<br />

Pour réaliser cette comparaison, il faut sélectionner ces deux éléments en maintenant la<br />

touche Ctrl enfoncée dans la vue "Navigateur" et sélectionner l'option "Comparer /<br />

Réciproquement" du menu contextuel.<br />

La vue de comparaison de fichier contient une barre d'outils qui permet de naviguer dans<br />

les différences et de les reporter pour effectuer une synchronisation sélective.<br />

3.1.4 Le workspace<br />

Le workspace est l'entité qui permet de conserver les projets et leur contenu.<br />

Physiquement c'est un répertoire du système d'exploitation qui contient une hiérarchie de<br />

fichiers et de répertoires. Il y a d'ailleurs un répertoire pour chaque projet à la racine du<br />

workspace. Le workspace contient tous les éléments développés pour le projet. Les opérations<br />

de gestion permises sont tous réalisées dans la vue Navigateur :<br />

� La création de nouvelles entités : un projet, un répertoire, un fichier,…<br />

� La duplication d'un élément<br />

� Le déplacement d'un élément<br />

� Renommer un élément<br />

� Importation<br />

� Exportation<br />

3.1.5 Le Java Development Tooling (JDT)<br />

Le JDT est inclus dans Eclipse pour fournir des outils de développement en Java. Dans le<br />

workspace, il définit un projet de type particulier pour les projets Java. L'arborescence de ces<br />

projets contient un fichier particulier nommé .classpath qui contient la localisation des<br />

bibliothèques utiles à la compilation et à l'exécution du code. Pour pouvoir développer des<br />

entités en Java, il faut les regrouper dans un projet de type Java.<br />

� Création d'un nouveau projet Java<br />

L’assistant de création demande le type de projet à créer, puis le nom de projet. Et on<br />

peut modifier certains paramètres concernant le chemin de la compilation :<br />

ENSA d’Oujda 17


Etude de serveur d’application JBoss<br />

� La création d'entité<br />

Dans un projet Java, il est possible de créer différentes entités qui entrent dans sa<br />

composition<br />

� les packages<br />

� les classes<br />

� les interfaces<br />

� et Autres<br />

� L'éditeur de code<br />

Le JDT propose un éditeur dédié au fichier contenant du code java. Il propose des<br />

fonctionnalités particulièrement pratiques pour le développement de code Java notamment :<br />

� la coloration syntaxique �<br />

� la complétion de code �<br />

� le formatage du code source<br />

� l'importation et l'exportation de code via un assistant<br />

� Affichage des paramètres sous la forme d'une bulle d'aide<br />

� Utilisation des modèles<br />

� La gestion des importations<br />

� La génération de getter et setter<br />

� Formater le code<br />

� Mise en commentaire d'une portion de code<br />

� Protéger une portion de code avec un bloc try/catch<br />

� Signalisation des erreurs grâce a des indicateurs<br />

� une forte synergie avec le débogueur<br />

3.1.6 Génération de la documentation javadoc<br />

Pour demander la génération de la documentation javadoc, il faut utiliser le menu<br />

"Projet/Générer/Le javadoc" après avoir renseigner les préférences.<br />

� Définition du JRE à utiliser<br />

Eclipse est capable de travailler avec plusieurs JRE. Dans l'arborescence " Java/JRE<br />

installé " des préférences, il est possible de définir plusieurs JRE installés sur la machine.<br />

ENSA d’Oujda 18


Etude de serveur d’application JBoss<br />

� Utilisation du scrapbook<br />

Le scrapbook, traduit par " page de testeur de code ", est une fonctionnalité qui permet de<br />

tester des morceaux de code dans une machine virtuelle.<br />

3.1.7 La perspective "debug"<br />

Pour déboguer du code Java, Eclipse propose une perspective dédiée : la perspective<br />

"débogage". Celle ci est automatiquement affichée lorsqu'une application est lancée sous le<br />

contrôle du débogueur en utilisant le bouton de la barre d'outils. Par défaut, la perspective<br />

débogage affiche quelques vues aussi présentes dans la perspective Java (les vues "Structure"<br />

et "Console") ainsi que l'éditeur de code Java. Et elle affiche aussi plusieurs vues<br />

particulièrement dédiées au débogage. Les vues spécifiques au débogage sont :<br />

� la vue "Débogage" : affiche sous la forme d'une arborescence, les différents processus<br />

en cours d'exécution ou terminés.<br />

� la vue "Variables" : affiche les variables utilisées dans les traitements en cours de<br />

débogage.<br />

� la vue "Points d'arrêts" : affiche la liste des points d'arrêts définis dans l'espace de<br />

travail.<br />

� la vue "Expressions" : permet d'inspecter une expression en fonction du contexte des<br />

données en cours d'exécution.<br />

� la vue "Affichage" : permet d'afficher le résultat de l'évaluation d'une expression.<br />

� Mise en oeuvre du débogueur<br />

La mise en oeuvre du débogueur reste comparable à celle proposé par d'autres IDE : mise<br />

en place d'un point arrêts, exécution plus ou moins rapide dans le débogueur pour arriver à<br />

cibler le problème.<br />

� Mettre en place un point d'arrêt<br />

Pour placer un point d'arrêt, il suffit dans l'éditeur de double cliquer dans la barre de<br />

gauche pour faire apparaître une icône ronde bleue.<br />

� Exécution dans le débogueur<br />

Le plus simple pour lancer le débogage d'une application est de sélectionner l'option<br />

«Déboguer en tant que /Application Java ». L'option "Déboguer ... " permet de fournir des<br />

paramètres précis en vue de l'exécution d'une application sous le débogueur. Un assistant<br />

permet de sélectionner la classe et de préciser les paramètres. Il ne reste plus qu'à mettre en<br />

oeuvre les différentes fonctionnalités proposées par les vues de la perpective pour déboguer le<br />

code.<br />

3.1.8 Le refactoring<br />

ENSA d’Oujda 19


Etude de serveur d’application JBoss<br />

Eclipse intègre de puissantes fonctionnalités pour faciliter le refactoring. Le refactoring<br />

consiste à modifier la structure d'un fichier source et si nécessaire à propager ces<br />

modifications dans les autres fichiers sources pour maintenir autant que possible l'intégrité du<br />

code.<br />

Un menu nommé « Propager les modifications » permet d'utiliser certaines de ces<br />

fonctionnalités : il est présent dans le menu principal et dans de nombreux menus contextuels.<br />

Chacune de ces fonctionnalités est applicable sur un ou plusieurs types d'entité selon le cas :<br />

projets, classes et membres d'une classe. Certaines de ces fonctionnalités possède un raccourci<br />

clavier.<br />

ENSA d’Oujda 20


Etude de serveur d’application JBoss<br />

3.1.9 L'aide dans Eclipse<br />

� L’aide en ligne<br />

L'aide en ligne est disponible dans toute l'interface de l'IDE au moyen de la touche F1.<br />

Cette aide est contextuelle en fonction de l'élément sélectionné dans l'interface au moment de<br />

l'appui sur la touche. Le choix des sujets se rapportant à l'élément courant est affiché dans une<br />

info bulle. Il suffit de cliquer sur l'élément sélectionné pour que l'aide en ligne correspondante<br />

s'affiche.<br />

� L'aide Javadoc<br />

Si la configuration de l'IDE est correcte, il est possible d'accéder directement à la page<br />

javadoc d'un élément java en plaçant le curseur sur cet élément et en appuyant sur F2. Si<br />

l'accès à la documentation javadoc pour l'élément n'est pas configuré un message d'erreur<br />

s'affiche.<br />

� Le plug in Java docs de Crionics<br />

La société Crionics propose un plug in qui s'intègre dans l'aide en ligne de Eclipse et qui<br />

contient la documentation du JDK 1.3 et de quelques API open source. Ce plug in créée une<br />

entrée nommée "Essentials Java Docs" dans la table des matière de l'aide en ligne. Cette<br />

documentation regroupe les API essentielles.<br />

3.2 Le serveur d’application JBOSS :<br />

3.2.1 Les serveurs d’applications :<br />

Le serveur d'application est l'environnement d'exécution des applications côté serveur. Il<br />

prend en charge l'ensemble des fonctionnalités qui permettent à N clients d'utiliser une même<br />

application :<br />

� Le support des plateformes : le serveur d'applications doit implémenter un ensemble<br />

d'API propre à chacun des nombreux systèmes d'exploitation pour d’avantage de<br />

liberté et productivité. A titre d'exemple, lorsqu'une application fait appel à des<br />

fonctions dites système telles que l'ouverture, l'écriture, la lecture ou la suppression de<br />

fichiers, le serveur d'applications doit être en mesure de les exécuter indépendamment<br />

de la plate-forme utilisée.<br />

� Répartition de charges : Un des devoirs du serveur d'applications est d'assurer la<br />

fiabilité et les performances de l'application. Dans ce contexte, la fonctionnalité de<br />

répartition de charges joue un rôle essentiel. D'un point de vue technique, cette<br />

approche se traduit généralement par l'exécution de plusieurs instances qu'il est<br />

possible de répartir sur différentes machines serveur. Cette architecture permet<br />

ENSA d’Oujda 21


Etude de serveur d’application JBoss<br />

également de scinder l'application en modules différents, sans avoir l'obligation de<br />

reproduire sur chacun des serveurs la totalité d'une application. Ainsi, un module<br />

fréquemment sollicité peut être isolé sur un seul serveur afin d'absorber plus<br />

facilement la charge.<br />

� La disponibilité : Dans une configuration où l'application est répliquée sur plusieurs<br />

serveurs physiques, il est plus facile de mettre en place la fonctionnalité de reprise sur<br />

incident. En cas de " plantage " au niveau applicatif ou serveur, la requête utilisateur<br />

est redirigée vers un serveur disponible de manière transparente. La tolérance aux<br />

pannes à ce niveau permet d'offrir la disponibilité au niveau application puisqu'il<br />

existe toujours un module actif pouvant être invoqué par les utilisateurs.<br />

Toutefois, le serveur d'applications doit être également capable de maintenir<br />

l'ensemble des opérations effectuées par l'utilisateur. Pour éviter des désagréments<br />

néfastes, il doit donc prévoir la sauvegarde du contexte utilisateur. Cela implique la<br />

réplication des sessions utilisateur sur une autre machine. A ce niveau, cette<br />

réplication se fait soit en base de données, soit sur disque, soit en mémoire. Les<br />

serveurs d'applications les plus avancés automatisent la gestion de reprise sur incident<br />

au niveau session.<br />

� Le pooling de connexions : En architecture web, l'ensemble des utilisateurs accède à<br />

la base de données depuis le serveur d'applications. Cette connexion peut être<br />

ponctuelle, mais les temps de réponse deviennent alors catastrophiques. La solution la<br />

plus couramment retenue consiste à passer par un pool de connexions. Ceci consiste à<br />

démarrer un nombre prédéfini de connexions vers un SGBDR. Le serveur<br />

d'applications dirige ensuite les demandes utilisateur en répartissant les différentes<br />

requêtes sur les connexions disponibles. Ceci permet d'avoir la maîtrise du nombre de<br />

connexions maximales ouvertes et d'éviter le goulet d'étranglement à ce niveau.<br />

� L’ouverture vers l’existant, le respect des standards : un serveur d’application doit<br />

reconnaître les serveurs http ainsi que la plupart des bases de données relationnelles du<br />

marché. Aussi le serveur d’applications doit respecter les standards tels que Java,<br />

XML et permettre d’intégrer les nouvelles technologies.<br />

� La gestion de contexte : Le principe de gestion de contexte consiste à conserver le<br />

temps d'une session les données propres à l'utilisateur contrairement aux variables<br />

d'application qui ne sont rien d'autre que des variables globales. Toutefois, les<br />

variables de session spécifiques à un utilisateur ne sont envisageables que si<br />

l'utilisateur peut être identifié. Une des fonctionnalités de base du serveur<br />

d'applications est de gérer automatiquement cette identification, suivant une des trois<br />

méthodes : le cookie, l'URL long et la variable cachée. Ceci permet au serveur<br />

d'applications de créer un espace mémoire dédié à chaque utilisateur. C'est à ce<br />

niveau, généralement dans un objet session, que vont être stockées les informations<br />

spécifiques à chacun des utilisateurs. Aussi le serveur doit permettre plus de fonctions<br />

comme le time-out, lancement d’un événement en fin de session, etc.<br />

� La sécurité : un serveur d’application doit permettre de déployer une application<br />

utilisant des services sécurisés avec des ports différents.<br />

ENSA d’Oujda 22


Etude de serveur d’application JBoss<br />

� L’administration : un serveur d’application doit être livré avec un outil<br />

d’administration qui se présente sous la forme d’une interface web ou console. Il doit<br />

favoriser le réglage du serveur d’applications.<br />

3.2.2 JBOSS un serveur d’applications compatible J2EE :<br />

JBOSS est un serveur d'application compatible J2EE. Il a été créé par un ancien ingénieur<br />

français de chez Sun, Marc Fleury. Il est distribué sous licence GPL et s'est spécialisé dans les<br />

technologies EJB (Enterprise Java Beans), une des évolutions de la technologie Java<br />

favorisant la réutilisation des composants.<br />

� JBOSS fournit un certains nombres de modules :<br />

� JBossServer qui comporte une infrastructure constituée des conteneurs EJB, ainsi que<br />

du Java Management Extension (JMX).<br />

� JBossMQ pour la gestion des messages JMS (Java Messaging service)<br />

� JBossTX pour la gestion des transactions avec les API JTA (Java Transaction API ) et<br />

JTS (Java Transaction Service).<br />

� JBossCMP pour la persistance CMP.<br />

� JBossSX pour la sécurité basée sur JAAS (Java Authentication and Authorization<br />

Service).<br />

� JBossCX pour la gestion des connecteurs avec JCA (J2EE Connector Architecture).<br />

Tomcat ou Jetty pour le support des servlets et des pages JSP.<br />

JBOSS permet grâce au JMX de chargé les différents modules, conteneurs ou plugin en<br />

fonction des besoins. Bien entendu, JBOSS permet d'implémenter ses propres services.<br />

3.2.3 Architecture technique de JBOSS :<br />

Cette partie décrit de manière plus détaillée l'architecture du serveur d'application Jboss.<br />

La figure ci-dessous est une vue d'ensemble de l'architecture. Le JMX Implementation, EJB<br />

Container et Remote Management correspondent au composant JbossServer, le JMS au<br />

composant JbossMQ. Le JTS/JTA correspond à JbossTX et les Databases représentent le<br />

stockage des objects avec le composant JbossCMP. La security correspond à la gestion de la<br />

sécurité par JbossSX, les Data sources représentent le composant JbossCX réalisant la gestion<br />

des connecteurs, et enfin les Java Server Pages correspond aux serveurs Tomcat ou Jetty.<br />

ENSA d’Oujda 23


Etude de serveur d’application JBoss<br />

� Le composant JbossServer : Ce composant constitue le coeur du serveur<br />

d'application Jboss. Son rôle est de gérer le noyau grâce au JMX, mais également de<br />

fournir les conteneurs EJB.<br />

Contrairement à la plupart des serveurs d'applications J2EE, JbossServer permet de<br />

déployer et redéployer automatiquement les nouvelles applications sans avoir à<br />

stopper ou arrêter le serveur. Comme vous pourez le voir dans l'installation du serveur<br />

Jboss, un répertoire nommé deploy permet de déployer les nouvelles applications de<br />

manière automatique.<br />

� Le composant JbossMQ : Ce composant est apparu en avril 2000. Il implémente<br />

l'API Java Messaging Service (JMS). Le JMS permet un échange entre des<br />

applications ou des composants via des brokers de messages ou MOM (Middleware<br />

Oriented Messages). Ces échanges peuvent se faire dans un contexte interne (pour<br />

l'EAI) ou un contexte externe (pour le B2B). Le module JBOssMQ supporte plusieurs<br />

sortes de message : RMI (Remote Méthode Invocation)<br />

OIL (Optimized Invocation Layer)<br />

UIL pour les applications clientes qui n'acceptent pas les connexions venant du<br />

Serveur.<br />

� Le composant JbossTX : Ce composant permet le support des moniteurs de<br />

transaction avec les API JTA/JTS. Le JTS définit l'implémentation du manager de<br />

transaction qui supporte l'API de transaction JTA. Malgré que Jboss implémente la<br />

manager de transaction JTS, vous ne pouvez pas accéder directement aux méthodes.<br />

Vous devez utiliser l'API JTA pour invoquer les routines de bas niveau du JTS.<br />

Les services offerts par JbossTX sont:<br />

Fournir aux applications la capacité de contrôler le périmètre et la durée d'une<br />

Transaction, supporter les transactions synchronisées, etc...<br />

� Le composant JBossCMP : Ce module permet de gérer les connexions aux bases de<br />

données grâce au connecteur JDBC. La version actuelle de JBOssCMP permet de se<br />

connecter à 17 bases de données (Oracle, SQLServer, DB2, Sybase, PointBase,<br />

Cloupscape, HypersonicsSQL, PostgreSQL, mySQL, etc ...)<br />

ENSA d’Oujda 24


Etude de serveur d’application JBoss<br />

� Le composant JbossSX : Ce composant a pour rôle de gérer la sécurité grâce à l'API<br />

JAAS. JbossSX fournit une implémentation de la sécurité standard à J2EE. Il permet<br />

notamment l'authentification des utilisateurs grâce au module JAAS Login.<br />

� Le composant JbossCX : JbossCX permet de gérer les connecteurs aux systèmes<br />

d'informations de l'entreprise comme CICS, TUXEDO, SAP, Siebel, etc...<br />

� Le composant Web Servers : Le serveur web est géré à l'aide de deux produits<br />

existants Tomcat et Jetty.<br />

3.2.4 Installation du serveur JBOSS :<br />

Pour installer JBOSS, il faut d’abord télécharger JBOSS depuis le site officiel<br />

www.jboss.org . Comme il existe deux versions du serveur, une avec le serveur web Jetty et<br />

l’autre avec Tomcat, on a choisit d’utiliser la dernière.<br />

Pour installer JBOSS, il suffit de décompresser le fichier zippé à l’endroit voulu. Une fois<br />

décompressé, on a l’arborescence suivante :<br />

La structure des répertoires :<br />

ENSA d’Oujda 25


Etude de serveur d’application JBoss<br />

Répertoire Description<br />

Bin Comporte tous les scripts permettant le démarrage, l'arrêt de Jboss,<br />

notamment le script run.bat pour Windows et run.sh pour linux<br />

Client Comporte tous les fichiers JAR pour le client.<br />

Lib Ce répertoire contient toutes les librairies utilisées pour le<br />

fonctionnement du serveur JBOSS.<br />

Server Ce répertoire comporte tous les fichiers de configuration de Jboss.<br />

Les sous répertoire default, all, minimal représentent les différents<br />

types de configuration.<br />

Server/default/deploy Ce répertoire comporte tous les jars devant être déployé. Si vous<br />

ajoutez un jar dans ce répertoire, celui-ci sera automatiquement<br />

chargé par Jboss.<br />

3.2.5 Quelques caractéristiques de JBOSS :<br />

� Permet le déploiement et le redéploiement des applications sans redémarrer le serveur.<br />

� Intègre une base de données par défaut Hypersonic pour gérer la persistance niveau<br />

conteneur.<br />

� Spécialisé sur la technologies des EJB, mais il implémente les autres fonctions J2EE<br />

comme les servlets ou les JSP via le moteurs de servlets libre Tomcat d’Apache ou<br />

Jetty.<br />

� Gratuit et sous licence GPL.<br />

� Son développement est très actif. Il est soutenu par une communauté de 500<br />

développeurs dans le monde, dont un noyau dur de 50 personnes et il est financé par la<br />

vente de documentations et de services autour de ce produit.<br />

� Offre des caractéristiques avancées telles que l’administration via une console JMX.<br />

� Environnement d’exécution complet et 3 configurations de serveurs prédéfinies.<br />

� JBOSS AS 4.0 est la première application Open Source à obtenir la certification J2EE<br />

de Sun microsystems (23000 tests).<br />

� JBOSS AS 4.0 permet l’approche de l’AOP ou programmation Java orientée aspect.<br />

Cette approche de la programmation associe la complexité de J2EE à la simplicité du<br />

langage Java en apportant des éléments contraints J2EE, mais standardisés.<br />

� JBOSS AS 4.0 implémente les EJB 3.0.<br />

� Une excellente diffusion : c’est le quatrième projet le plus actif sur Sourceforge sur<br />

plus de 70000. Il a déjà été téléchargé plus de 3.500.000 de fois depuis début 2002,<br />

dont 1.500.000 les 6 derniers mois.<br />

� Accès à un très nombre de sources de données (Oracle, SQL Server, MySQL,…).<br />

ENSA d’Oujda 26


Etude de serveur d’application JBoss<br />

3.3 L’outil Ant :<br />

Ant est un projet du groupe Apache−Jakarta. Son but est de fournir un outil écrit en Java<br />

pour permettre la construction d'applications (compilation, exécution de tâches post et pré<br />

compilation ...). Ces processus de construction d'applications sont très importants car ils<br />

permettent d'automatiser des opérations répétitives tout au long du cycle de développement de<br />

l’application (développement, tests, recettes, mises en production ... ). Le site officiel de l'outil<br />

est http://jakarta.apache.org/ant/index.html.<br />

Ant repose sur un fichier de configuration XML qui décrit les différentes tâches qui<br />

devront être exécutées par l'outil. Il fournit un certains nombre de tâches courantes qui sont<br />

codées sous forme d'objets développés en Java. Ces tâches sont donc indépendantes du<br />

système sur lequel elles seront exécutées. De plus, il est possible d'ajouter ces propres tâches<br />

en écrivant de nouveaux objets Java respectant certaines spécifications.<br />

Le fichier de configuration contient un ensemble de cibles (Target). Chaque cible<br />

contient une ou plusieurs tâches et peut avoir une dépendance envers une ou plusieurs autres<br />

cibles pour pouvoir être exécutée.<br />

Ant possède donc plusieurs atouts : multi plate−forme, configurable grâce à un fichier<br />

XML, open source et extensible. Ainsi des plug−ins ont été développés pour la majorité des<br />

IDE (JBuilder, Forte, Visual Age ...) pour leur permettre d'utiliser Ant, devenu un standard de<br />

fait.<br />

3.3.1 Installation de Ant<br />

Avant de commencer l’installation, un jdk1.1 ou supérieur est requis. Ensuite, il faut<br />

suivre les étapes suivantes :<br />

ENSA d’Oujda 27


Etude de serveur d’application JBoss<br />

� dézipper le fichier.<br />

� ajouter le chemin complet au répertoire bin de Ant à la variable système PATH<br />

� s'assurer que la variable JAVA_HOME pointe sur le répertoire contenant le<br />

JDK.<br />

� créer une variable d’environnement ANT_HOME qui pointe sur le répertoire<br />

crée lors de la décompression.<br />

� Il peut être nécessaire d’ajouter les fichiers .jar contenu dans le répertoire lib<br />

de Ant a la variable d’environnement CLASSPATH.<br />

3.3.2 Exécution de Ant<br />

Ant s'utilise en ligne de commande avec la syntaxe suivante : ant [options] [cible], par<br />

défaut, Ant recherche un fichier nommé build.xml dans le répertoire courant. Ant va alors<br />

exécuter la cible par défaut définie dans le projet de ce fichier build.xml.<br />

Pour exécuter un autre fichier de configuration, il faut spécifier le nom dans la commande<br />

après l’option –buildfile :<br />

ant –buildfile file.xml<br />

Et pour exécuter une cible particulière, il suffit de spécifier le nom. Par exemple pour<br />

exécuter la cible clean : ant clean<br />

3.3.3 Le fichier build.xml<br />

Le fichier build est un fichier XML qui contient la description du processus de<br />

construction de l'application.<br />

L'élément principal de l'arborescence du document est le projet représenté par le tag<br />

qui est donc le tag racine du document.<br />

� Le projet<br />

A l’intérieur du tag sont définis les autres éléments du fichier, à savoir les<br />

cibles, les propriétés et les tâches. Il possède les attributs :<br />

� name : cet attribut précise le nom du projet<br />

� default : cet attribut précise la cible par défaut à exécuter si aucune cible n'est précisée<br />

lors de l'exécution<br />

� basedir : cet attribut précise le répertoire qui servira de référence pour la localisation<br />

relative des autres répertoires.<br />

� Les propriétés :<br />

Le tag permet de définir une propriété qui pourra être utilisée dans le projet :<br />

c'est souvent la définition d'un répertoire ou d'une variable qui sera utilisée par certaines<br />

tâches. Leur définition en tant que propriété permet de facilement changer leur valeur une<br />

seule fois même si la valeur de la propriété est utilisée plusieurs fois dans le projet.<br />

<br />

ENSA d’Oujda 28


Etude de serveur d’application JBoss<br />

Les propriétés peuvent être définies sur la ligne de commande avec l’option –D suivie du<br />

nom de la propriété, suivi du =, suivi de sa valeur.<br />

Le tag possède plusieurs attributs :<br />

� name : cet attribut défini le nom de la propriété.<br />

� value : cet attribut défini la valeur de la propriété.<br />

� location : cet attribut permet de définir un fichier avec son chemin absolu. Il<br />

peut être utilisé à la place de l'attribut value.<br />

� file : cet attribut permet de préciser le nom d'un fichier qui contient la définition<br />

d'un ensemble de propriétés. Ce fichier sera lu et les propriétés qu'il contient<br />

seront définies.<br />

L'ordre de définition d'une propriété est très important : Ant gère une priorité sur l'ordre<br />

de définition d'une propriété. La règle est la suivante : la première définition d'une propriété<br />

est prise en compte, les suivantes sont ignorées.<br />

Pour utiliser une propriété définie dans le fichier, il faut utiliser la syntaxe suivante :<br />

${nom_propriete}<br />

� les ensembles de fichiers :<br />

Le tag permet de définir un ensemble de fichiers. Cet ensemble de fichier sera<br />

utilisé dans une autre tâche. La définition d'un tel ensemble est réalisé grâce à des attributs du<br />

tag :<br />

L'expression **/ permet de désigner tous les sous répertoires du répertoire défini dans<br />

l'attribut dir.<br />

Exemple :<br />

<br />

On peut utilisé le tag pour définir un ensemble de motifs pour sélectionner<br />

des fichiers. L’ensemble est identifié par un attribut id, les fichiers a inclure sont définies dans<br />

, et ceux a exclure dans . Le refid peut être utilisé pour référencer un<br />

ensemble déjà défini.<br />

Exemple :<br />

<br />

<br />

<br />

ENSA d’Oujda 29


Etude de serveur d’application JBoss<br />

<br />

Pour définir un ensemble de fichier fini, on utilise le tag . Les attributs sont<br />

l’identifiant id, le dir pour indiquer le répertoire de départ, le files pour indiquer les fichiers<br />

séparés par un virgule, et éventuellement le refid pour référencer un ensemble déjà défini.<br />

Exemple :<br />

<br />

� Les éléments de chemins :<br />

Le tag permet de définir un élément qui sera ajouter à la variable<br />

classpath. La définition d'un tel élément est réaliser grâce à des attributs du tag <br />

: location et path.<br />

Exemple :<br />

<br />

<br />

<br />

<br />

� Les cibles :<br />

Le tag définit une cible. Une cible est un ensemble de tâches à réaliser dans un<br />

ordre précis. Cet ordre correspond à celui des tâches décrites dans la cible.<br />

Les attributs :<br />

name contient le nom de la cible. Cet attribut est obligatoire<br />

description<br />

if<br />

unless<br />

depends<br />

contient une brève description de la cible<br />

permet de conditionner l'exécution par l'existence d'une propriété<br />

permet de conditionner l'exécution par l'inexistence de la définition d'une propriété<br />

permet de définir la liste des cibles dont dépend la cible<br />

L’attribut depends défini un ensemble de cible a exécuté avant l’exécution de la cible<br />

courante.<br />

� Les tâches :<br />

Une tâche est une unité de traitements contenue dans une classe Java qui implémente<br />

l'interface org.apache.ant.Task. Dans le fichier de configuration, une tâche est un tag qui peut<br />

avoir des paramètres pour configurer le traitement à réaliser. Une tâche est obligatoirement<br />

incluse dans une cible.<br />

ENSA d’Oujda 30


Etude de serveur d’application JBoss<br />

Ant fournit en standard un certain nombre de tâches pour des traitements courants lors du<br />

développement en Java dont les plus importantes sont :<br />

� Echo :<br />

La tâche permet d'écrire dans un fichier ou d'afficher un message ou des<br />

informations durant l'exécution des traitements.<br />

Les données à utiliser peuvent être fournies dans un attribut dédié ou dans le corps du tag<br />

.<br />

Exemple :<br />

<br />

<br />

<br />

Fin des traitements du projet ${ant.project.name}<br />

<br />

<br />

<br />

Fin des traitements<br />

<br />

<br />

<br />

� Mkdir :<br />

La tâche permet de créer un répertoire avec éventuellement ces répertoires pères<br />

ci ceux ci n'existent pas. Elle possède un seul attribut dir pour donner le chemin et le nom du<br />

répertoire.<br />

Exemple :<br />

<br />

<br />

<br />

� Delete :<br />

La tâche permet de supprimer des fichiers ou des répertoires. Il a pour attributs :<br />

ENSA d’Oujda 31


Etude de serveur d’application JBoss<br />

� Copy<br />

La tâche permet de copier un ou plusieurs fichiers dans le cas ou ils n'existent pas<br />

dans la cible ou si ils sont plus récents dans la cible. Ses attributs sont :<br />

� Tstamp :<br />

La tâche n’a pas d’attribut et permet de définir trois propriétés :<br />

Exemple :<br />

DSTAMP : cette propriété est initialisée avec la date du jour au format AAAMMJJ<br />

TSTAMP : cette propriété est initialisée avec l'heure actuelle sous la forme HHMM<br />

TODAY : cette propriété est initialisée avec la date du jour au format long<br />

<br />

<br />

<br />

<br />

<br />

<br />

� Java :<br />

La tâche permet de lancer une machine virtuelle pour exécuter une application<br />

compilée.<br />

ENSA d’Oujda 32


Etude de serveur d’application JBoss<br />

Le tag fils permet de fournir des paramètres à l'exécution. Et permet<br />

de définir le classpath à utiliser lors de l'exécution.<br />

Exemple :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

� Javac :<br />

La tâche permet la compilation de fichiers source contenus dans une<br />

arborescence de répertoires.<br />

ENSA d’Oujda 33


Etude de serveur d’application JBoss<br />

� Javadoc :<br />

La tâche permet de demander la génération de la documentation au format<br />

javadoc des classes incluses dans une arborescence de répertoires.<br />

Cette tâche possède plusieurs attributs dont les principaux sont :<br />

Exemple :<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

ENSA d’Oujda 34


Etude de serveur d’application JBoss<br />

� Jar :<br />

La tâche permet la création d'une archive de type jar.<br />

Exemple :<br />

<br />

<br />

<br />

� Autres :<br />

Ant utilises d’autres tâches pour divers traitements : exécution d’une requête sql, envois<br />

d’un courrier électronique, zipper ou de zipper un fichier, etc. un guide complet du différentes<br />

tâches est fourni dans la documentation de Ant.<br />

3.4 L’outil XDoclet :<br />

XDoclet est un moteur de génération de code. C'est un projet open-source hébergé sur le<br />

site sourceforge.net, sous licence BSD.<br />

Le but de ce projet est d’améliorer la productivité des développeurs en leur évitant de<br />

taper du code redondant et d’avoir à s’occuper des mises à jour des documents liés à un<br />

projet. Ainsi, tout le travail fastidieux de création de fichiers xml de déploiement ou de<br />

paramétrage et la génération de code source commun (interfaces pour les EJB par exemple…)<br />

est supprimé.<br />

Les développeurs n'auront alors plus qu'à se concentrer sur l'édition d'un seul fichier<br />

source Java par composant. Cela s’appelle l’intégration continue. XDoclet permet de générer<br />

du texte (et donc du code) en ajoutant aux fichiers sources codés des balises de type Javadoc<br />

spécifiques. Les principaux bénéfices de l'intégration continue :<br />

� Mise à jour automatique des fichiers de déploiement (meta-data) à chaque fois que le<br />

code est modifié. Le déploiement de ces meta-data est continuellement intégré.<br />

� Travailler avec un seul fichier par composant permet d'avoir une vue plus globale de<br />

l’application en cours de développement. Si le composant est constitué de plusieurs<br />

fichiers, comme les Entreprise Java Bean (EJB), il est facile de s'y perdre. En effet, un<br />

ENSA d’Oujda 35


Etude de serveur d’application JBoss<br />

seul EJB est traditionnellement constitué de 7 fichiers voire plus. Avec XDoclet, il<br />

suffit de maintenir un seul d'entre-eux et le reste sera généré.<br />

� Réduction du temps de développement, et le développeur pourra ainsi se concentrer<br />

sur d'autres aspects puisque XDoclet va générer 85% du code.<br />

Une balise spécifique XDoclet se présente sous la forme :<br />

/**<br />

* @namespace:tag_name name="value" name2="value2" ...<br />

**/<br />

Chaque balise XDoclet est identifiée par un nom (tag_name) qui appartient à un espace de<br />

noms (namespace). Les propriétés sont passées par le format name="value". Il est possible<br />

d'associer plusieurs propriétés à un élément en cumulant les couples name="value".<br />

4 Etude de cas réalisé :<br />

4.1 Description :<br />

L’étude de cas réalisé récapitule l’ensemble des connaissances acquises sur les EJB et les<br />

Servlets. Ainsi, l’application doit permettre de calculer la moyenne de 3 notes d’un étudiant et<br />

de les enregistrer dans la base de données. La saisie du code, nom et les 3 notes de l’étudiant<br />

se fait via un formulaire Html qui va rediriger la requête vers une servlet. Celle-ci va traiter la<br />

requête Post et récupérer les valeurs du formulaire. Il va faire appel à un bean Session qui va<br />

calculer la moyenne des 3 notes et créer un bean Entity CMP qui se chargera d’enregistrer le<br />

code, le nom et la moyenne dans la base de données Hypersonic disponible par défaut avec le<br />

serveur d’application Jboss.<br />

4.2 Architecture de l’application :<br />

Notre application suit cette architecture car elle se compose d’une servlet, deux EJB<br />

(Session et Entity).<br />

ENSA d’Oujda 36


Etude de serveur d’application JBoss<br />

4.3 Préparatifs : JBOSS IDE<br />

Jboss IDE est un plug-in pour Eclipse qui permet de contrôler Jboss directement depuis<br />

Eclipse : démarrage, arrêt et fenêtre console de Jboss intégré à l'éditeur. Il permet également,<br />

à l’aide d’assistant, de créer des composants EJB, Servlets et des pages JSP ainsi que des<br />

projets J2EE de façon automatisé, ceci afin d’éviter au programmeur d’écrire le squelette de<br />

ces composants. La dernière version (1.3.3) est disponible sur le site de SourceForge.<br />

Pour l’installer, il faut fermer tout d’abord Eclipse si celui-ci est ouvert, ensuite<br />

décompresser le contenu de l’archive téléchargée dans le répertoire de l’installation d’Eclipse.<br />

Une fois ceci effectué il faut relancer Eclipse et aller vous dans le menu Help > Software<br />

Update > Manage Configuration. Cliquer ensuite sur le bouton « Show disabled features ».<br />

Il faut ensuite faire un clic droit sur JBoss-IDE 1.3.30 et choisir Enable dans le menu.<br />

Confirmer le redémarrage d’Eclipse pour que le changement soit pris en compte. Une fois le<br />

plug-in installé il faut maintenant afficher les nouvelles fonctionnalités offertes par celui-ci.<br />

Pour cela, il faut aller dans le menu Windows > Custom perspective, la fenêtre suivante<br />

s’affiche :<br />

ENSA d’Oujda 37


Etude de serveur d’application JBoss<br />

Dans le menu déroulant il faut choisir New et cocher ensuite la case JBoss-IDE. Cela a<br />

pour effet d’afficher les nouveaux assistants quand vous utiliserez le menu File > New.<br />

Toujours dans le même menu déroulant choisir maintenant Show View et cocher encore<br />

JBoss-IDE. Cela a pour effet d’afficher les deux nouvelles vues disponibles dans le menu<br />

Window > Show View. La nouvelle vue Server Navigator est particulièrement utile pour<br />

démarrer ou arrêter le serveur JBoss à partir d’Eclipse.<br />

ENSA d’Oujda 38


Etude de serveur d’application JBoss<br />

Avant de pouvoir rajouter le serveur JBoss à la vue Server Navigator il faut effectuer une<br />

modification dans le menu Window > Preferences:<br />

ENSA d’Oujda 39


Etude de serveur d’application JBoss<br />

Le serveur JBoss a besoin d'utiliser la machine virtuelle incluse avec le JDK. Pour cela<br />

allez dans le menu Java puis Installed JREs, cliquez sur Add. Dans la fenêtre suivante,<br />

cliquer sur Browse pour le champ JRE home directory puis indiquer le répertoire<br />

d’installation de JDK. Pour rajouter le serveur JBoss ouvrer la vue Server Navigator (Window<br />

> Show Wiew) et Choisir la version du serveur JBoss dans la liste (4.0 ici) et cliquer sur New<br />

pour créer une nouvelle configuration de lancement. Renseignez ensuite le chemin d’accès au<br />

répertoire Jboss, valider la nouvelle configuration en cliquant sur Apply et fermer la fenêtre.<br />

Pour démarrer ou arrêter le serveur JBoss un simple clic droit sur la nouvelle<br />

configuration donne accès au menu permettant ces actions.<br />

ENSA d’Oujda 40


Etude de serveur d’application JBoss<br />

4.4 Création du projet :<br />

Après avoir lancé Eclipse, on crée un nouveau projet par « File/New/Project... ». On<br />

choisit »JBoss-IDE/J2EE1.4 Project », puis on clique sur « Next ». Appelons donc le projet «<br />

Projet», puis cliquons sur « Next ».<br />

Dans la fenêtre suivante, il faut définir les répertoires des fichiers sources et binaires,<br />

ainsi que les fichiers jar nécessaires à l'application j2ee.<br />

Nous commençons par créer un répertoire source, que nous appellerons « src », en<br />

cliquant sur « Add folder... », et en saisissant « src ».Il faut définir ensuite le répertoire des<br />

binaires en saisissant « Tutorial/bin » dans « Default output folder ».<br />

Ensuite, nous allons dans l'onglet « Libraries ». Plusieurs bibliothèques ont déjà été<br />

importées automatiquement. Nous allons rajouter les jars spécifiques à Jboss. Pour ce faire,<br />

nous cliquons sur « Add external jars », et nous ajoutons « javax.servlet.jar » (dans<br />

jboss4.0.0/server/default/lib) et « jboss-j2ee.jar » (dans jboss4.0.0/client).<br />

ENSA d’Oujda 41


Etude de serveur d’application JBoss<br />

Nous pouvons maintenant cliquer sur « Finish ». Le projet est créé.<br />

4.4.1 Création de L’EJB Session :<br />

Nous allons tout d'abord créer notre EJB Session stateless, CalculBean, dont la méthode<br />

Moyenne calcule la moyenne des 3 notes.<br />

Création de l’EJB Session :<br />

On clique sur « File/New/Other », puis on choisit « JBoss-IDE/EJB Components/Session<br />

Bean », et on clique sur « Next ». On peut ensuite renseigner notre EJB : on indique le<br />

package : « projet/ejb » ; puis on indique que l'EJB est « stateless », avec interfaces « remote<br />

», et que l'on ajoute la méthode «ejbCreate », puis on clique sur « Finish ».<br />

Il ne reste plus qu'à coder la méthode « Moyenne ». Afin de générer automatiquement les<br />

tags Xdoclet, on passe par les menus : Dans la fenêtre « Outline », on fait un clic droit sur «<br />

CalculBean », et dans « J2EE », on choisit « Add Business Method », que l'on complète<br />

après.<br />

ENSA d’Oujda 42


Etude de serveur d’application JBoss<br />

ENSA d’Oujda 43


Etude de serveur d’application JBoss<br />

On code ensuite notre méthode Moyenne et on rajoute les commentaires Xdoclet. Au<br />

final notre EJB a l’allure suivante :<br />

/*<br />

* Created on 15 janv. 2005<br />

*<br />

* TODO To change the template for this generated file go to<br />

* Window - Preferences - Java - Code Style - Code Templates<br />

*/<br />

package projet.ejb;<br />

import java.rmi.RemoteException;<br />

import javax.ejb.EJBException;<br />

import javax.ejb.SessionBean;<br />

import javax.ejb.SessionContext;<br />

import javax.ejb.CreateException;<br />

//import javax.naming.Context;<br />

import javax.naming.InitialContext;<br />

import javax.naming.NamingException;<br />

//import javax.rmi.PortableRemoteObject;<br />

import projet.interfaces.EtudiantLocal;<br />

import projet.interfaces.EtudiantLocalHome;<br />

/**<br />

ENSA d’Oujda 44


Etude de serveur d’application JBoss<br />

* @ejb.bean name="Calcul"<br />

* display-name="Name for Calcul"<br />

* description="Description for Calcul"<br />

* jndi-name="ejb/Calcul"<br />

* type="Stateless"<br />

* view-type="remote"<br />

* @ejb.ejb-local-ref name="Save"<br />

* type="Entity"<br />

* local-home="projet.interfaces.EtudiantLocalHome"<br />

* local="projet.interfaces.EtudiantLocal"<br />

* @jboss.ejb-local-ref ref-name = "Save"<br />

* jndi-name = "EtudiantLocalH"<br />

*/<br />

public class CalculBean implements SessionBean {<br />

/**<br />

*<br />

*/<br />

public CalculBean() {<br />

super();<br />

// TODO Auto-generated constructor stub<br />

}<br />

/* (non-Javadoc)<br />

* @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)<br />

*/<br />

public void setSessionContext(SessionContext ctx)<br />

throws EJBException,<br />

RemoteException {<br />

// TODO Auto-generated method stub<br />

}<br />

/* (non-Javadoc)<br />

* @see javax.ejb.SessionBean#ejbRemove()<br />

*/<br />

public void ejbRemove() throws EJBException, RemoteException {<br />

// TODO Auto-generated method stub<br />

}<br />

/* (non-Javadoc)<br />

* @see javax.ejb.SessionBean#ejbActivate()<br />

*/<br />

public void ejbActivate() throws EJBException, RemoteException {<br />

// TODO Auto-generated method stub<br />

}<br />

/* (non-Javadoc)<br />

* @see javax.ejb.SessionBean#ejbPassivate()<br />

*/<br />

public void ejbPassivate() throws EJBException, RemoteException {<br />

// TODO Auto-generated method stub<br />

}<br />

/**<br />

* Default create method<br />

ENSA d’Oujda 45


Etude de serveur d’application JBoss<br />

*<br />

* @throws CreateException<br />

* @ejb.create-method<br />

*/<br />

public void ejbCreate() throws CreateException {<br />

// TODO Auto-generated method stub<br />

}<br />

/**<br />

* Business method<br />

* @ejb.interface-method view-type = "remote"<br />

*/<br />

public double Moyenne(double note1, double note2, double note3) {<br />

// TODO Auto-generated method stub<br />

return (note1 + note2 + note3) / 3;<br />

}<br />

public void enregistrer(String code, String nom, double moyen) {<br />

try {<br />

javax.naming.Context jndiContext = new InitialContext();<br />

EtudiantLocalHome home = (EtudiantLocalHome) jndiContext<br />

.lookup("java:comp/env/EtudiantLocalH");<br />

EtudiantLocal instance = home.create(code);<br />

instance.setName(nom);<br />

instance.setMoyenne(moyen);<br />

} catch (NamingException ne) {<br />

// throw new EJBException(ne);<br />

} catch (CreateException ne) {<br />

}<br />

}<br />

}<br />

Génération de fichiers complémentaires pour l’EJB ( Home et l’interface Remote) :<br />

Pour générer ces fichiers complémentaires (les interfaces de l’EJB ainsi que les<br />

descripteurs de déploiement), il faut configurer XDoclet.<br />

Pour cela, il faut ouvrir la configuration en faisant un clic droit sur le projet « Projet », et<br />

en choisissant « Properties ». Ensuite, on se rend dans la rubrique « Xdoclets Configurations<br />

». On fait un clic droit dans la fenêtre en haut à droite, on choisit « Add Standard », et on<br />

choisit « Standard EJB ».<br />

Cela met à jour la plupart des champs nécessaires. On peut cliquer sur le « Standard EJB<br />

» créé, et se promener dans les fenêtres du bas pour s'en rendre compte. La seule modification<br />

consiste à se rendre dans « fileset » et à modifier « includes » (remplacer « **/*.java » par<br />

« **/*Bean.java »).<br />

ENSA d’Oujda 46


Etude de serveur d’application JBoss<br />

On clique ensuite sur « OK ». On peut ensuite lancé la construction de l'EJB en faisant un<br />

clic droit sur le projet Projet, et en cliquant sur « Run Xdoclet ». Après le refresh, Le fichier «<br />

xdoclet-build.xml » est généré. Cette action génère aussi les méta-informations de l'EJB, ainsi<br />

que les classes d'interface (home/remote).<br />

4.4.2 Création de l’EJB Entity :<br />

Enfin, il faut implémenter le dernier élément composant ce projet : l’EJB Entity. Le rôle<br />

de ce dernier est la gestion de la persistance des données. Il existe deux types, mais ici le<br />

CMP qui sera utilisé. L’avantage de ce composant est qu’il permet de gérer rapidement<br />

l’accès à une base de données sans avoir à écrire la moindre ligne de code utilisant JDBC.<br />

Cet exemple s’appuie sur la base de données par défaut fournis avec JBOSS qui est<br />

Hypersonic.<br />

Pour créer cet EJB sous Eclipse, il faut utiliser l’assistant, on clique sur « File/New/Other<br />

», puis on choisi « JBoss-IDE/EJB Components/Entity Bean », et on clique sur « Next ».<br />

On peut ensuite renseigner notre EJB : on indique le package : « projet/ejb » ; puis on<br />

indique Un nom : EtudiantBean, puis on clique sur « Finish ».<br />

ENSA d’Oujda 47


Etude de serveur d’application JBoss<br />

Le bean crée sera donc à la norme CMP 2.x et accessible uniquement en local ce qui<br />

suffit amplement puisque celui-ci sera utilisé par le bean Session.<br />

Il faut ensuite spécifier la méthode ejbCreate.<br />

ENSA d’Oujda 48


Etude de serveur d’application JBoss<br />

Ajout de tags spécifiques à la classe :<br />

Nous devons maintenant rajouter un certain nombre de tags XDoclet qui vont permettre<br />

de définir la base de données et la table sur laquelle le bean devra opérer. Cela évite donc<br />

d’avoir à ajouter manuellement ces informations aux descripteurs de déploiement. Voici la<br />

liste de tous les tags rajoutés avant la déclaration de la classe accompagnés d’une description :<br />

* primkey-field = "Id"<br />

* @ejb.persistence<br />

* table-name = "etudiant"<br />

Son rôle est de définir le nom de la table sur laquelle le bean devra effectuer les<br />

différentes opérations d’ajout, modifications, etc. … ainsi que la clé primaire utilisée.<br />

ENSA d’Oujda 49


Etude de serveur d’application JBoss<br />

Ajout des tags spécifiques aux méthodes :<br />

Maintenant que nous avons rajouté les différents tags au niveau de la classe, nous<br />

pouvons rajouter les différentes variables et méthodes nécessaires au fonctionnement de notre<br />

bean entité.<br />

Le bean entité représentant un enregistrement d’une table de notre base de données, il<br />

doit donc contenir autant de champ que la table en question. Elle se compose des champs<br />

suivants :<br />

� Id : type varchar, clé primaire<br />

� Nom : type varchar,<br />

� Moyenne : type float<br />

Pour chacun des champs, il faut créer deux méthodes : une pour faire le get et l’autre pour<br />

faire le set et de spécifier le nom de la colonne et son type grâce aux tags XDoclet.<br />

/**<br />

If faut rajouter quelques éléments accompagnés de quelques tags.<br />

* Getter for CMP Field Id<br />

*<br />

* @ejb.pk-field<br />

* @ejb.persistent-field<br />

* @ejb.interface-method view-type="local"<br />

* @ejb.persistence column-name = "Id"<br />

* sql-type = "VARCHAR"<br />

*/<br />

public abstract String getId();<br />

/**<br />

* Setter for CMP Field Id<br />

*<br />

* @ejb.interface-method view-type="local"<br />

*/<br />

public abstract void setId(String value);<br />

ENSA d’Oujda 50


Etude de serveur d’application JBoss<br />

/**<br />

* Getter for CMP Field Name<br />

*<br />

*<br />

* @ejb.persistent-field<br />

* @ejb.interface-method view-type="local"<br />

* @ejb.persistence column-name = "Nom"<br />

* sql-type = "VARCHAR"<br />

*/<br />

public abstract String getName();<br />

/**<br />

* Setter for CMP Field Name<br />

*<br />

* @ejb.interface-method view-type="local"<br />

*/<br />

public abstract void setName(String value);<br />

/**<br />

* Getter for CMP Field Moyenne<br />

*<br />

*<br />

* @ejb.persistent-field<br />

* @ejb.interface-method view-type="local"<br />

* @ejb.persistence column-name = "Moyenne"<br />

* sql-type = "FLOAT"<br />

*/<br />

public abstract double getMoyenne();<br />

/**<br />

* Setter for CMP Field Moyenne<br />

ENSA d’Oujda 51


Etude de serveur d’application JBoss<br />

*<br />

* @ejb.interface-method view-type="local"<br />

*/<br />

public abstract void setMoyenne(double value);<br />

Implémentation :<br />

Enfin de pouvoir créer et utiliser ce bean nous devons implémenter une méthode<br />

ejbCreate, elle doit comporter en argument le champ correspondant à la clé primaire de la<br />

table. Pour notre cas elle doit donc avoir une chaîne de caractère.<br />

/**<br />

* Create method<br />

* @ejb.create-method view-type = "local"<br />

*/<br />

public String ejbCreate(String code) throws javax.ejb.CreateException {<br />

}<br />

// TODO Auto-generated method stub<br />

return null;<br />

this.setId(code);<br />

4.4.3 Création de la Servlet :<br />

Pour la création du Servlet, il faut commencer par cliquer sur « File/New/Others », puis<br />

choisir « Web Components/HTTP Servlet ». Dans la fenêtre de dialogue, placer la servlet<br />

dans le package « projet.web », on appelle le servlet « CalculServlet », et on implémente les<br />

méthodes init(), doGet() et doPost().<br />

Nous allons ensuite coder deux méthodes : la méthode init, dans laquelle nous allons lier<br />

le servlet à l'EJB, par le biais du contexte, et la méthode reponse, méthode privée qui crée la<br />

page de réponse et appelée par doPost et doGet. On n'oubliera pas de créer les entrées<br />

Xdoclets pour les références au titre de la page et à l'EJB ainsi que le mapping jboss de l'EJB<br />

(on enlèvera également le paramétrage de l'init).<br />

ENSA d’Oujda 52


Etude de serveur d’application JBoss<br />

Le code de la Servlet est le suivant :<br />

/*<br />

* Created on 15 janv. 2005<br />

*<br />

* TODO To change the template for this generated file go to<br />

* Window - Preferences - Java - Code Style - Code Templates<br />

*/<br />

package projet.web;<br />

import javax.naming.Context;<br />

import javax.naming.InitialContext;<br />

import javax.rmi.PortableRemoteObject;<br />

import javax.servlet.http.HttpServlet;<br />

ENSA d’Oujda 53


Etude de serveur d’application JBoss<br />

import javax.servlet.ServletException;<br />

import javax.servlet.ServletConfig;<br />

import java.io.IOException;<br />

import java.io.PrintWriter;<br />

import javax.servlet.http.HttpServletRequest;<br />

import javax.servlet.http.HttpServletResponse;<br />

import projet.interfaces.Calcul;<br />

import projet.interfaces.CalculHome;<br />

/**<br />

* Servlet Class<br />

*<br />

* @web.servlet name="Calcul"<br />

* display-name="Name for Calcul"<br />

* description="Description for Calcul"<br />

* @web.servlet-mapping url-pattern="/Calcul"<br />

* @web.servlet-init-param name="A parameter"<br />

* value="A value"<br />

* @web.ejb-ref name = "Calcul"<br />

* type = "Session"<br />

* home = "projet.interfaces.CalculHome"<br />

* remote = "projet.interfaces.Calcul"<br />

* description = "ref de calcul"<br />

* @jboss.ejb-ref-jndi ref-name = "Calcul"<br />

* jndi-name = "ejb/Calcul"<br />

*<br />

*/<br />

public class CalculServlet extends HttpServlet {<br />

private CalculHome home;<br />

/**<br />

*<br />

*/<br />

public CalculServlet() {<br />

super();<br />

// TODO Auto-generated constructor stub<br />

}<br />

public void init(ServletConfig config) throws ServletException {<br />

//super.init(config);<br />

// TODO Auto-generated method stub<br />

try {<br />

Context ctx=new InitialContext();<br />

Object ref=ctx.lookup("ejb/Calcul");<br />

home=(CalculHome)PortableRemoteObject.narrow(ref,CalculHome.class);<br />

}catch(Exception e) {<br />

throw new ServletException("lookup of java:/comp/env/Calcul failed");<br />

}<br />

}<br />

protected void doGet(HttpServletRequest req, HttpServletResponse resp)<br />

throws ServletException,<br />

IOException {<br />

// TODO Auto-generated method stub<br />

super.doGet(req, resp);<br />

}<br />

ENSA d’Oujda 54


Etude de serveur d’application JBoss<br />

protected void doPost(<br />

HttpServletRequest request,<br />

HttpServletResponse response) throws ServletException, IOException {<br />

// TODO Auto-generated method stub<br />

reponse(request,response);<br />

}<br />

private void reponse(HttpServletRequest req, HttpServletResponse resp)throws ServletException,<br />

IOException{<br />

resp.setContentType("text/html");<br />

PrintWriter out=resp.getWriter();<br />

out.println("");<br />

out.println("la moyenne");<br />

out.println("");<br />

out.println("");<br />

try{<br />

Calcul bean=home.create();<br />

double limit1=0;<br />

double limit2=0;<br />

double limit3=0;<br />

String code=req.getParameter("code");<br />

String nom=req.getParameter("name");<br />

String note1=req.getParameter("note1");<br />

String note2=req.getParameter("note2");<br />

String note3=req.getParameter("note3");<br />

try{<br />

limit1=Double.parseDouble(note1);<br />

limit2=Double.parseDouble(note2);<br />

limit3=Double.parseDouble(note3);<br />

}catch (Exception e) {<br />

}<br />

double result=bean.Moyenne(limit1,limit2,limit3);<br />

bean.enregistrer(code,nom,result);<br />

out.println("enregistrement");<br />

// bean.remove();<br />

out.println("");<br />

out.println("l'etudiant "+nom+" est enregistré ");<br />

out.println("La moyenne des notes est :");<br />

out.println("" +result);<br />

out.println("");<br />

}catch(Exception e){<br />

e.printStackTrace(out);<br />

}finally{<br />

out.println("");<br />

out.println("");<br />

}<br />

}}<br />

Il nous reste à générer les fichiers relatifs au servlet. On commence par rouvrir les<br />

propriétés du projet, et on retourne dans la configuration de Xdoclet. On ajoute un « Standard<br />

Web », et on modifie :<br />

« webdoclet/destDir » (remplacer « src » par « src/WEB-INF »).<br />

« fileset/includes » (remplacer « **/*.java » par « **/*Servlet.java »).<br />

« jbosswebxml/Version » (4.0)<br />

ENSA d’Oujda 55


Etude de serveur d’application JBoss<br />

On ferme ensuite en cliquant sur « ok », et on relance le « Run XDoclet » dans le menu<br />

contextuel du projet (puis on fait un refresh quand le run est terminé).<br />

On crée ensuite un répertoire pour mettre la page html qui invoque le servlet. On crée<br />

donc un répertoire « docroot » dans le projet (clic droit+ »New/Folder »). On crée à<br />

L’intérieur un fichier « index.html » (par «New/Other » + « Web Components/HTML Page»).<br />

Ce fichier ressemble au contenu suivant :<br />

<br />

<br />

<br />

calcul<br />

<br />

<br />

Formulaire etudiant<br />

<br />

<br />

<br />

code:<br />

name :<br />

note1:<br />

note2:<br />

ENSA d’Oujda 56


Etude de serveur d’application JBoss<br />

note3:<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

<br />

4.4.4 Création de l’application Web:<br />

Nous allons assembler tous nos éléments dans une application j2ee. Pour ce faire nous<br />

allons créer un fichier « application.xml » dans « src/META-INF » (à partir de « New/File »).<br />

Ce fichier liste les modules (ejb et web) qui composent l'application, et indique le point<br />

d'accès au module web.<br />

<br />

<br />

<br />

Sum Application<br />

<br />

CalculEJB.jar<br />

<br />

<br />

<br />

CalculWeb.war<br />

/calcul<br />

<br />

<br />

<br />

On indique ensuite les paramètres de paquetage de l'application et de ses modules. Pour<br />

se faire on ouvre la fenêtre des propriétés du projet, et on va dans « Packaging configurations<br />

». On doit créer quatre rubriques : une pour l'application, une pour le module ejb , une pour le<br />

module web, plus une pour les clients de l'ejb (en l'occurence, le servlet).<br />

Pour l'ejb, on fait un clic droit dans la fenêtre en haut à droite, et on sélectionne « Add<br />

Archive ». On appelle cette archive « CalculEJB.jar », et on clique sur OK. On ajoute ensuite<br />

les rubriques suivantes:<br />

ENSA d’Oujda 57


Etude de serveur d’application JBoss<br />

� Liste des ejb : on précise que l'on utilise les classes des packages ejb et interfaces.<br />

Pour ce faire, clic droit sur « CalculEJB.jar », « Add Folder ». On indique comme<br />

folder « /Projet/bin », puis on indique dans « Includes » : «<br />

projet/ejb/*.class,projet/interfaces/*.class ».<br />

� Fichiers de configuration: Clic droit sur « CalculEJB.jar », « Add File ». On ajoute<br />

deux rubriques, une pour « /Projet/src/META-INF/ejb-jar.xml », une pour «<br />

/Projet/src/METAINF/jboss.xml », en précisant dans les deux cas le préfixe « META-<br />

INF » (c à d qu'ils seront placés dans ce sous répertoire dans le .jar généré).<br />

On crée ensuite l'entrée pour les clients : Clic droit dans la fenêtre + « Add Archive » : on<br />

l'appelle calcul-client.jar. Il suffit de placer à l'intérieur les interfaces de l'EJB : Clic droit+ «<br />

AddFolder ». On indique comme folder « /Projet/bin », puis on indique dans « Includes » : «<br />

projet/interfaces/*.class ».<br />

On crée le module web : Clic droit dans la fenêtre + « Add Archive » (on l'appelle<br />

CalculWeb.war).<br />

� On y place le servlet : clic droit + « Add Folder » + Folder = «Projet/bin » et Includes<br />

=« projet/web/*.class ».<br />

� On ajoute les fichiers de configuration (Projet/src/WEB-INF/jboss-web.xml et<br />

Projet/src/WEB-INF/web.xml) avec « Add File ». Sans oublier de préciser le prefix :<br />

ENSA d’Oujda 58


Etude de serveur d’application JBoss<br />

« WEBINF».<br />

On ajoute enfin le module client, afin que le servlet le voie. On fait donc clic droit+ «<br />

Add File » et on choisit le fichier « Projet/calcul-client.jar » (qui n'existe pas encore car c'est<br />

l’exécution du paquetage qui le créera...). Comme il n'existe pas, on clique sur « Project File »<br />

et on saisit à la main le nom du fichier... Le préfix doit être « WEB-INF/lib »<br />

� Pour avoir accès à index.html on ajoute le répertoire « docroot ».<br />

Reste à créer la configuration de l'application. Dans la fenêtre, on fait un clic droit+ «<br />

Add Archive ». On l'appelle « CalculApp.ear ». On y ajoute le fichier « /Projet/src/META-<br />

INF/application.xml », avec le prefix « META-INF ». On ajoute ensuite les fichiers «<br />

/Projet/CalculEJB.jar » et « /Projet/CalculWeb.war ». Comme ils n'existent pas encore, on<br />

procède comme précédemment.<br />

On peut ensuite cliquer sur ok, puis dans le menu contextuel du projet, lancer « Run<br />

Packaging ». On fait un « refresh » pour voir tous les fichiers générés.<br />

Ainsi l’architecture finale de l’application est la suivante :<br />

4.4.5 Déploiement et exécution :<br />

ENSA d’Oujda 59


Etude de serveur d’application JBoss<br />

Pour tester l'application, on lance JBOSS, puis on déploie l'application en faisant un clic<br />

droit sur « CalculApp.ear » + « Deployment/Deploy to », et choisir « default ».<br />

Pour tester l'application, on lance un navigateur et on va à l'URL : «<br />

http://localhost:8080/calcul »...<br />

ENSA d’Oujda 60


Etude de serveur d’application JBoss<br />

Les données comme l’id, le nom et la moyenne de l’étudiant sont bien enregistré dans la<br />

table etudiant de la base de données.<br />

ENSA d’Oujda 61


Etude de serveur d’application JBoss<br />

5 Conclusion :<br />

L’utilisation d’un serveur d’application open source comme Jboss permet d’avoir plus de<br />

contrôle sur l’environnement utilisé car l’un des avantages majeurs des outils open source est<br />

de pouvoir modifier le code source et l’adapter à des besoins spécifiques de l’entreprise. En<br />

plus, et pour la plupart des outils open source dont Jboss, la correction des bogues est assurée<br />

par une large communauté, ce qui permet d’accélérer le processus de mise à jour des outils<br />

open source.<br />

Ce projet nous a permet sur le plan formation, d’aborder un sujet de grande envergeure<br />

qui est celui des serveurs d’applications et d’étudier la technologie J2EE. Ainsi, on a utilisé<br />

les composants côte serveur, qui sont les EJB ainsi que les servlets et les JSP pour le<br />

développement web. En parallèle, on a eu l’occasion de découvrir des outils Open Source<br />

comme Ant et XDoclet permettant de simplifier la tâche des développeurs tout en profitant<br />

des possibilités offertes par un environnement de développent intégré qui est Eclipse.<br />

6 Bibliographie :<br />

Le site officiel de Jboss : www.jboss.org<br />

Le site officiel d’Eclipse : www.eclipse.org<br />

Livre : Entreprise JavaBeans édition O’Reilly de Richard Monson-Haefel<br />

ENSA d’Oujda 62

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!