Exercice 4 - Implémentation du projet d'entreprise⚓︎
Nous allons maintenant implémenter le cadre contenant les parties "Couche Présentation" et "Couche Métier" du schéma suivant :
1. Création du projet d'entreprise (EAR)⚓︎
Nous avons créé un module Web et un module EJB qui font partie du même projet. Pour les déployer ensemble sur le serveur, il faut créer un projet EAR.
Note
Pour être déployés, les projets Java doivent être mis sous forme d'archives. Il existe principalement trois types d'archives, qui sont en fait des fichiers ZIP :
- Les JAR, pour Java ARchive : ils contiennent des classes Java et des métadonnées. Ils permettent de déployer des projets Java classiques ou des projets EJB.
- Les WAR, pour Web application ARchive : ils contiennent des classes Java, des métadonnées, et tout le contenu Web (HTML, CSS, JavaScript, images, ...). Ils permettent de déployer des projets Web.
- Les EAR, pour Entreprise Application aRchive : ils contiennent plusieurs modules (au moins un). Il peut y avoir un ou plusieurs modules Web, un ou plusieurs modules EJB et un ou plusieurs modules Java.
Dans le menu Entreprise Explorer,
- Faire un clic droit, puis :material-mouse:
New > Project...
, puis :material-file-tree:Java EE > Entreprise Application Project
, puisNext > . -
Nommer le projet GestionNotesEAR, vérifier la runtime utilisée, puis cliquer sur
Next > : -
Sélectionner les projets GestionNotesEJB et GestionNotesWeb, puis cliquer sur
Finish .
2. Déploiement de l'application d'entreprise⚓︎
Il faut maintenant déployer l'EAR. Pour cela, faire un clic droit sur le serveur, :material-mouse:Add and Remove...
. Supprimer le projet GestionNotesEJB, et ajouter le projet GestionNotesEAR, puis cliquer sur
Dans les logs du serveur, vérifier que l'EJB a bien été déployé, en vérifiant la présence de la ligne suivante dans les logs :
ejb:GestionNotesEAR/GestionNotesEJB/NotesBusinessImpl!fr.univtours.polytech.gestionnotes.business.NotesBusinessRemote
On constate au passage que le nom JNDI a légèrement changé, puisqu'on voit maintenant apparaître le nom du projet EAR.
3. Test de l'application⚓︎
L'application est maintenant disponible ici http://localhost:8080/GestionNotesWeb/notesList.
URL pour accéder à l'application
- On constate que même lorsqu'on déploie l'EAR, l'URL pour accéder à l'application a toujours pour racine le
context-root
du module Web (par défaut le nom de ce projet), ici GestionNotesWeb. -
On peut se demander quel est l'intérêt de générer le fichier 📄
web.xml
alors que nous déployons maintenant les Servlets via les annotations. Le descripteur de déploiement permet d'indiquer la ressource à exécuter par défaut. Il faut pour cela ajouter la balisewelcome-file
à l'intérieur de la balisewelcome-file-list
. Par exemple :XML<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> <display-name>GestionNotesWeb</display-name> <welcome-file-list> <welcome-file>notesList</welcome-file> </welcome-file-list> </web-app>
Si on exécute la requête http://localhost:8080/GestionNotesWeb, alors c'est notesList qui est exécutée, c'est-à-dire http://localhost:8080/GestionNotesWeb/notesList.
4. Retour sur le client Java⚓︎
Si on exécute maintenant le client Java, on obtient dans les logs une erreur de ce genre :
Exception in thread "main" org.jboss.ejb.client.RequestSendFailedException: EJBCLIENT000409: No more destinations are available
...
...
Suppressed: javax.ejb.NoSuchEJBException: No such EJB: /GestionNotesEJB/NotesBusinessImpl @ remote+http://localhost:8080
...
...
En effet, le module EJB est maintenant déployé dans une application d'entreprise, et non plus directement. Il faut donc mettre à jour l'URL pour y accéder.
Pour cela, il faut modifier la classe NoteClient
, et plus précisément la méthode getBusiness
. Il faut maintenant indiquer le nom du projet d'entreprise :
String appName = "GestionNotesEAR";
Ça y est, notre SI respecte le schéma présenté au début.