Aller au contenu

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 :

archi appli

Architecture de notre application

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 :

  1. 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.
  2. 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.
  3. 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,

  1. Faire un clic droit, puis :material-mouse:New > Project..., puis :material-file-tree:Java EE > Entreprise Application Project, puis Next >.
  2. Nommer le projet GestionNotesEAR, vérifier la runtime utilisée, puis cliquer sur Next > :

    Création projet EAR

  3. 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 Finish.

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 :

📋 Logs du serveur WildFly
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
  1. 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.
  2. 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 balise welcome-file à l'intérieur de la balise welcome-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 :

📋 Logs du serveur WildFly
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 :

☕ Code Java
String appName = "GestionNotesEAR";

Ça y est, notre SI respecte le schéma présenté au début.