User Tools

Site Tools


sysrep:ejb3

This is an old revision of the document!


TP EJB3

Documentation

Installation

Prérequis : vous devez disposer d'un Java 1.6.

Nous allons installer l'IDE NetBeans 7.2.1 dont le script d'installation (./netbeans-7.2.1-ml-javaee-linux.sh) est disponible sur la racine de mon compte (/net/stockage/auesnard/). Vous pouvez également le télécharger ici : http://download.netbeans.org/netbeans/7.2.1/final/bundles/netbeans-7.2.1-ml-javaee-linux.sh

Lancez le script, puis suivre les étapes d'installation en activant GlassFish 3 et Apache Tomcat 7 :

$ ./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. Le serveur web est configuré par défaut sur le port 8080 et l'interface web d'administration sur le port 4848. Lancez maintenant l'IDE NetBeans. 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… */

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() { return "Hello World"; }
}  
  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 une 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. (…) 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 inscpirant du code ci-dessous…
  <jsp:useBean id='hellobean' class='package.HelloBean'/>
  <%! String s; %>
  <% s = hellobean.hello();%>
  <%=s%> 

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. Implanter BankBean un utilisant une HashMap<Long,Account>…
  2. Implanter un client standalone distant BankClient.java qui teste votre application (cf. nota Bene).
  3. Optionnel : tester avec une servlet.

Plus d'infos :

Application Bancaire Persistante

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 :

sysrep/ejb3.1387367204.txt.gz · Last modified: 2024/03/18 15:05 (external edit)