TP1 EJB : mise en place de l'environnement, premières applications

De $1

Version de 19:24, 25 Avr 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

Installation logicielle

Logiciels obligatoires :

  • un JDK (pas un JRE) version 1.6 ou supérieur installé sur votre machine, pas un JRE. Si ce n'est pas le cas, récupérez sur http://java.sun.com/javase/downloads/index.jsp un jdk récent et installez-le.
  • Netbeans 6.7.x : Sur la page de download de netbeans 6 récupérez une version de netbeans qui vient avec les serveurs glassfish et tomcat (celle dans la colonne de droite). Pour info, le fichier windows de la version 6.7.1 s'appelle : netbeans-6.7.1-ml-windows.exe et fait dans les 300Mo. Votre professeur fera passer une clé USB pour ne pas que vous ayez à le télécharger au début du TP. En revanche, si vous lisez cet énoncé avant le TP, vous pouvez le télécharger et l'installer. Lors de l'installation, cocher la case pour installer aussi Tomcat 6 ! Cela nous sera très utile pour la suite du cours.


NE CHANGEZ AUCUN MOT DE PASSE !

Note : si jamais les liens ci-dessus ont changé, google est votre ami pour récupérer des versions à jour.

Installez donc le JDK si vous ne l'avez pas, puis netbeans, et passons à la suite.

Vérification de l'installation

Lancez netbeans une fois l'installation terminée. Cliquez sur l'onglet "services" et ouvrez l'item serveurs. Vous devez voir que tomcat et glassfish sont installés :

 Snap2.jpg

Vérifions maintenant que tout est ok... L'archive que nous avons installée comprend l'outil de développement netbeans mais aussi le serveur d'application de Sun, appellé Glassfish. Lancez netbeans, puis allez dans l'onglet "services". Nous allons lancer le serveur pour voir si tout est ok:

Snap3.jpg

Puis, en demandant à voir la console d'administration, cela va ouvrir la page d'admin dans votre navigateur. En entrant le mot de passe adminadmin, une belle page devrait s'afficher. J'espère que vous n'avez pas modifié le mot de passe proposé par défaut, car dans une classe de TP, les statistiques prouvent que la moitié des élèves ne se souviennent plus de leur mot de passe très rapidement!

Snap4.jpg

 Snap7.jpg

 Le screenshot précédent présente la console d'administration. Nous en reparlerons plus tard. Le fait qu'elle s'affiche dans votre navigateur prouve que l'installation est ok.

Création d'un nouveau projet

Nous allons créer maintenant un projet pour le TP d'aujourd'hui. Allez dans le menu file/new project, puis dans la fenêtre suivante, sélectionnez JavaEE  comme catégorie de projet et « enterprise application » comme projet:

 Snap5.jpg

 Cliquez sur « next », puis donnez un nom à votre projet et n'oubliez pas d'indiquer que nous allons utiliser le serveur d'application de Sun (glassfish pour netbeans 6)

 Snap8.jpg

Une fois terminé, vous verrez dans l'onglet project « trois sous projets » :

 Snap9.jpg

  1. Le premier correspond au projet « global » qui contient en fait les archives des deux autres (il correspond au fichier .ear du cours),
  2. le second correspond au .jar qui va contenir tous vos ejbs
  3. le troisième au .war qui va contenir vos servlets, jsps et pages html.

Le fichier .ear est en fait une archive qui contient les deux autres fichiers : le .jar et le .war, il permet de déployer l'ensemble de la web application d'un seul coup.

 

Création d'un premier ejb de type session bean stateless : HelloWorld

Allez sur le sous projet TP1EJB_2009-ejb (celui avec l'icone en forme de haricot, qui correspond à la partie "ejb" du projet) et faites bouton droit/new/session bean :

 Snap10.jpg

Puis dans la fenêtre suivante, indiquez le nom de votre Ejb, son type, et un nom de package (obligatoire) :

 Snap11.jpg

Une fois terminé, deux fichiers sont ajoutés dans le sous-projet : HelloWordBean.java et HelloWorldLocal.java, qui correspondent à la classe du bean et à son interface « locale » (un bean avec un interface locale ne peut être utilisé que par un client tournant dans la même JVM : une jsp, une servlet ou un autre ejb).

Snap12.jpg

Ajoutons une méthode dans ce bean, la méthode getMessage() qui renvoie la chaîne de caractères «Hello World» :

public String getMessage() {
    System.out.println("Hello World qui va s'afficher dans la console du serveur, pour trace");
    return "Hello World";
}

Puis, dans l'éditeur, cliquez sur l'en-tête de la méthode, une petite lampe jaune doit appraître sur la gauche, proposant des actions contextuelles. Choisissez "Add to Local Interface" pour indiquer que cette méthode n'est pas une méthode interne du bean mais une méthode qui sera accessible au travers de l'interface locale du bean. Si jamais cette lampe n'apparait pas, il faut dans ce cas, manuellement, ajouter l'en-tête de la méthode dans l'interface.

Snap14.jpg

D'ailleurs, si vous regardez le source de HelloWorldLocal.java, vous verrez les lignes suivantes :

@Local
public interface HelloWorldLocal {
    java.lang.String getMessage();
}

Rappel : les lignes commençant par @ sont des « attributs de code » ou encore des "annotations de code". Ce sont en fait des méta-données… Elles serviront au compilateur à générer du code contextuel. Ceci permet de n'avoir dans le source .java que du POJO (Plain Old Java Object, une classe java "normale" en fin de compte !)

Ecriture d'une servlet client de test de ce bean

Sur le projet finissant par -war, faites click droit/new/Servlet :

Snap18.jpg

N'oubliez pas de donner un nom de package !

Snap19.jpg

 Vous verrez que votre servlet est apparue dans les sources du projet. Vous savez (depuis le cours de technos web de l'an dernier) que dans un projet J2EE, les caractéristiques des servlets se trouvent dans le descripteur web.xml. Vous pouvez obtenir une vue éditable de ce fichier en double cliquant dessus, il se trouve sous "configuration" dans le projet :

Snap20.jpg

En double cliquant on peut éditer ce fichier au travers d'une interface graphique. Notamment, l'onglet "Servlets" permet de voir les URLs associés aux servlets :

Snap21.jpg

Dans les sources de cette servlet, on va indiquer que l'on va « parler » au bean HelloWorld. Pour cela, cliquez avec le bouton de droite dans le code de la servlet (n'importe où) et selectionnez « insert code » :

Snap22.jpg

Un menu apparait, choisissez "call enterprise bean" :

Snap23.jpg

Cela va insérer dans la Servlet deux lignes de code qui vont correspondre à la fois à la déclaration et à l'initialisation d'une variable référençant un objet du type de l'interface du Bean que l'on souhaite appeler. Le @EJB est l'annotation de code qui va procéder à "l'injection de code" lors de la compilation ou du déploiement. Bien que la variable helloWorldBean ne soit pas initialisée, on pourra l'utiliser, elle ne vaudra pas "null" comme cela pourrait sembler :

public class ServletTest extends HttpServlet {
    @EJB
    private HelloWorldLocal helloWorldBean;

Notons aussi que quelques imports ont étés rajoutés, ce sont ceux dont le code généré aura besoin. L'objet helloWorldBean va, à partir de maintenant pouvoir être utilisé directement dans la servlet, sans que l'on ait besoin de l'initialiser.

Ajoutons la ligne suivantes dans la méthode processRequest de la servlet :

out.println("L'ejb HelloWorld a renvoyé :" + helloWorldBean.getMessage());

Sauvegardons le tout, et exécutons le projet principal :

Snap25.jpg

Cela va avoir pour effet de lancer le serveur d'application, (cette opération peut prendre un certain temps, mais n'ayez crainte, si on fait plusieurs fois "run", si le serveur tourne déjà il ne sera pas relancé) des lignes vont s'afficher et au final, vous devriez avoir une ligne :

BUILD SUCCESSFUL (total time: 4 seconds)

Votre projet a été déployé et le navigateur doit ouvrir la page par défaut . Nous allons maintenant invoquer la servlet. Prenez un navigateur et tapez l'URL suivant : http://localhost:8080/TP1ejb-war/servletTest, ou bien faites bouton de droite/run sur le projet "enterprise" global et complétez l'URL.

Normalement après un certain temps, le navigateur ouvre une page correspondant à la page JSP index.jsp home page du projet (dans "web pages", dans le fichier war, vous pourrez modifier le nom de la home page en éditant le fichier web.xml). Rajoutons juste l'URL relatif de la servlet à la fin : /ServletTest. Sur mon PC cela donne :

http://pc-de-michel:8080/2009-war/ServletTest

Il ne s'affiche rien dans la page web ! C'est normal !!!! Regardez plutot la console du serveur :

Snap26.jpg

Voilà, vous avez exécuté votre première appli web utilisant des EJBs !!!!

Ecriture d’un second bean appelé par le bean HelloWorld

  • Procédez comme précédemment pour créer un second bean, semblable à HelloWorld, appelez-le MonSecondBean, ajoutez une méthode getMessage() qui renvoie « Je suis le second bean, appelé par le bean HelloWorld ».
  • Modifiez le bean HelloWorld afin que sa méthode getMessage() appelle la méthode getMessage() du second bean, récupère la valeur de retour et l’ajoute à la fin du message qu’elle renvoie.
  • Une fois vos modifications terminées, sauvegardez, déployez, testez la servlet.

 

Au final, lorsqu’on exécute la servlet de test, cela doit afficher : L'ejb HelloWorld a renvoyé : Hello World Je suis le second bean, appelé par le bean HelloWorld