User Tools

Site Tools


sysrep:ejb3

TP EJB3

Documentation

Prérequis : vous devez disposer d'un Java 1.6 et de NetBeans 7. Si ce n'est pas le cas, veuillez consulter la section installation à la fin de cette page. Lancez la commande suivante :

$ netbeans-7.2

Prise en main de l'IDE NetBeans

  1. Contruire une simple application Java qui affiche “Hello World”. Cliquez sur le menu 'New Project' et laissez vous guider. Un peu d'aide : http://netbeans.org/kb/docs/java/quickstart.html
  2. Créer un nouveau projet de type Web Application utilisant GlassFish 3. Modifiez la page web générée par défaut (index.jsp), et testez-la en cliquant sur 'Run'.
  3. Ajoutez à votre projet une servlet “NewServlet” qui affiche la date courante. Puis, re-déployer votre application web. Pour afficher la servlet par défaut (plutôt que la JSP), ouvrez les Property puis dans Run, indiquez l'URL “HelloServlet”. Run, un navigateur doit ouvrir votre servlet.

Jouons avec les Beans

Faites du ménage dans vos projets : fermez NetBeans ; rm -rf ~/NetBeansProjects/* ; puis relancez-le.

Nous allons maintenant créer un nouveau projet de type “Enterprise Application” qui contiendra trois modules différents : un module web (war), un module ejb et un module client. Ce projet contiendra un Stateless Session Bean avec l'interface ci-dessous, accessible avec une interface “Remote” depuis un client Java (standalone) et avec une interface “Local” depuis une Servlet.

public interface HelloInterface {
  public String hello();
}  
  1. Créez un projet de type Enterprise Application, appelé “EnterpriseApplication” qui contient un module EJB (EnterpriseApplication-ejb) et un module Web (EnterpriseApplication-war).
  2. Créez un nouveau projet “Java Class Library”, appelé “HelloLibrary”. Ce projet servira par la suite à accueillir l'interface Remote de notre Session Bean. Nota Bene : Cette étape est nouvelle depuis NetBeans 7 !
  3. Dans le module EJB, ajoutez maintenant un Session Bean (Stateless) HelloBean, composé d'une interface “Local” et “Remote”, cette dernière étant associé au projet “HelloLibrary”.
  4. A ce niveau, votre bean (HelloBean.java) est créé ainsi que deux interfaces : HelloBeanLocal.java et HelloBeanRemote.java (dans HelloLibrary). Complétez ces fichiez.
  5. Sélectionnez le module web et ajoutez une servlet “HelloServlet” qui utilise votre Session Bean. Pour cela, il faut ouvrir HelloServlet.java et cliquer sur le menu contextuel 'Insert Code / Call Enterprise Bean…', puis vous laisser guider. Utilisez votre bean dans la servlet…
  6. Pour Tester votre servlet, il faut faire Clean / Build / Run sur le projet principal “EnterpriseApplication” et non sur un des sous-modules ! Par défaut, la JSP est affiché, ouvrez donc explicitement votre servlet à l'URL suivante : http://localhost:8080/EnterpriseApplication-war/HelloServlet
  7. Nous allons maintenant ajouter un client distant, qui utilise donc l'interface Remote de notre bean. Pour ce faire, cliquez sur le menu New Project / Java EE / Enterprise Application Client, puis ajoutez-le à votre Enterprise Application et cochez la case Enable Contexts and Dependency Injection. Nota Bene : Netbeans ne permet que de démarrer un seul module client à la fois, le client standalone ou la servlet. Pour choisir lequel exécuter, sélectionner le menu Properties du projet principal “EnterpriseApplication”, puis modifier le 'Client Module' dans la catégorie 'Run'.
  8. Utilisez ce Bean dans une JSP, en vous inspirant du code ci-dessous…
  <jsp:useBean id='hellobean' class='package.HelloBean'/>
  <%! String s; %>
  <% s = hellobean.hello();%>
  <%=s%> 

Nota Bene : L'IDE NetBeans est un peu sensible ! Il faut éviter autant que possible de faire du refactoring (rename, remove, …). Si une erreur persiste au Build dans les cibles XML, tentez de redémarrer l'IDE. Si le problème persiste toujours, bah vous êtes bon pour recommencer tout votre projet :-(

Application Bancaire

Créer maintenant un nouveau projet, appelé BankApp, de type Enterprise Application, qui contient un module EJB, un module Web et un module client. Nous allons créer une application bancaire simplifiée à base d'un Session Bean (Stateful), de type BankBean, accessible par un client distant BankClient d'une part et par une servlet BankServlet d'autre part. Bankbean doit donc disposer d'une interface @Local et @Remote.

On considère l'interface Bank suivante, implantée par le bean :

Bank.java
public interface Bank {
  public void createAccount(Long id, String firstname, String lastname);
  public void removeAccount(Long id);
  public void removeAllAccounts();
  public List<Account> findAllAccounts();
  public void deposit(Long id, Float amount);
  public void withdraw(Long id, Float amount);
  public Float balance(Long id);
}

Un compte est représenté par la classe Account (Serializable), qui possède les champs suivants :

  • id (Long)
  • firstname (String)
  • lastname (String)
  • balance (Float)
  1. Implantez BankBean un utilisant une HashMap<Long,Account>…
  2. Implantez un client standalone distant BankClient.java qui teste votre application (cf. nota Bene).
  3. Testez avec une servlet.

Plus d'infos :

Application Bancaire Persistante (Bonus)

En vous inspirant de l'exercice précédent, développer une application de compte bancaire persistante, appelée BankAppPersistant. Dans ce cas précis, chaque compte sera représenté par un Entity Bean de type Account.

  1. Créer une nouvelle classe Entity, Account. Sélectionner Long comme type de la clé primaire. Cette classe nécessite la création d'une unité de persistance, reliée à la base 'jdbc/sample'. Laisser les autres paramètres par défaut, notamment le Persistance Unit Name, le Persistance Provider et pour les Transactions. Compléter le code généré pour la classe Account, avec tous les champs persistants ainsi que les getter/setter associés.
  2. Pour accéder aux entités persistantes, on utilise typiquement une façade (design pattern) implanté via un Session Bean Stateless. Pour ce faire, utiliser le menu 'New Session Bean for Entity Classes…' qui va génèrer automatiquement un code template utilisant l'Entity Manager responsable de la persistance. On choisira d'ajouter une interface @Local et @Remote. Le code généré sera a priori suffisant pour débuter.
    • Quelle méthode va permettre d'ajouter une entrée dans la table Account ?
    • Comment l'Entity Manager fait-il pour être relier à la bonne table ?
  3. Implanter maintenant une Servlet, BankServlet.java, qui affichera la liste des comptes bancaires et proposera un formulaire HTML pour créer de nouveaux comptes, puis pour déposer ou retirer de l'argent sur un compte à partir de son ID.

Plus d'infos :

Installation de NetBeans 7

Nous allons installer l'IDE NetBeans 7.2.1 dont le script d'installation est disponible sur mon compte informatique. Vous pouvez également le télécharger ici. Copiez ce fichier dans le /tmp de votre machine et lancez le script d'installation, puis suivre les étapes en activant GlassFish 3 et Apache Tomcat 7. Il faut choisir de tout installer dans le /tmp pour des raisons d'économie d'espace disque.

$ cp /net/stockage/auesnard/netbeans-7.2.1-ml-javaee-linux.sh /tmp
$ cd /tmp 
$ chmod +x netbeans-7.2.1-ml-javaee-linux.sh
$ ./netbeans-7.2.1-ml-javaee-linux.sh

Au final, vous devez disposer de JavaEE 6, GlassFish 3, Apache Tomcat 7 et de NetBeans 7. Lancez maintenant l'IDE NetBeans. Le serveur web est configuré par défaut sur le port 8080 et l'interface web d'administration sur le port 4848. Vous pouvez accéder à ces configurations via l'onglet 'Services' du panneau de gauche.

/* Il est également possible de lancer NetBeans 7 depuis la version installée sur mon compte :

$ /net/autre/LABRI/esnard/netbeans-7.2.1/bin/netbeans --userdir ~/netbeans

Il faut ensuite cliquer sur l'onglet “Services” puis dans la rubrique “Servers”, il faut ajouter un nouveau Serveur Glassfish 3 (pointant sur /net/autre/LABRI/esnard/glassfish-3.1.2.2) avec un répertoire “Domain” situé sur votre compte. Vous pouvez maintenant supprimer l'ancien serveur Glassfish et commencer à travailler… */

sysrep/ejb3.txt · Last modified: 2024/03/18 15:06 by 127.0.0.1