Bean Session et Clients Prérequis Création d`un bean session
Transcription
Bean Session et Clients Prérequis Création d`un bean session
Bean Session et Clients Auteur : Cédric Dumoulin Créé le : 27 septembre 2016 Rev : 27 septembre 2016 Prérequis Eclipse JEE Glassfish Glassfish est enregistré comme serveur dans Eclipse Création d’un bean session L’objectif est de créer un bean session avec une méthode public String sayHello() retournant « Hello the world ». Créez un nouveau projet « EJB Project » nommé ‘ipint.ejb.firstbeansession’. Créez, dans un package, un Bean Session ‘SayHelloBean’ de type stateless, avec interfaces Remote et Local. Ajoutez votre méthode String sayHello() dans votre classe, et dans les interfaces Remote et Local. Déployez votre bean session (clique droit -> Run As -> Run on Server) Observez la console du serveur : - Il ne doit pas y avoir d’erreurs Dans la console, recherchez les lignes du type : 2016-09-27T11:14:54.272+0200|Infos: Portable JNDI names for EJB SayHelloBean: [java:global/ipint.ejb.firstbeansession/SayHelloBean!ipint.ejb.firstbeansession.Sa yHelloBean, java:global/ipint.ejb.firstbeansession/SayHelloBean!ipint.ejb.firstbeansession.Say HelloBeanLocal, java:global/ipint.ejb.firstbeansession/SayHelloBean!ipint.ejb.firstbeansession.Say HelloBeanRemote] 2016-09-27T11:14:54.272+0200|Infos: Glassfish-specific (Non-portable) JNDI names for EJB SayHelloBean: [ipint.ejb.firstbeansession.SayHelloBeanRemote, ipint.ejb.firstbeansession.SayHelloBeanRemote#ipint.ejb.firstbeansession.SayHelloB eanRemote] Ces lignes vous indiquent : - Que votre bean s’est bien déployé, - Les noms JNDI de votre bean. Ces noms vont servir pour demander l’accès au bean à partir des clients. Création d’un client lourd (par un main() ) Nous allons maintenant accéder au bean par l’intermédiaire d’un client lourd. Ce client est lancé dans une class contenant un main(). Créez un nouveau projet ‘ipint.ejeb.clientlourd’ de type ‘Application Client Project’. Choisissez de créer une ‘default main class’. Modifier le classpath Vous devez modifier le classpath de votre projet (Build Path-> Configure Build Path…) : - Ajoutez le projet ‘ipint.ejb.firstbeansession’ - Supprimez ‘Glassfish Runtime Library’ - Ajoutez une nouvelle ‘User Library’ appelé ‘client-glassfish’, que vous créez, et dans laquelle vous mettez le jar ‘gf-client.jar’ qui se trouve dans l’installation de Glassfish. Dans le main() de votre classe, vous allez maintenant appelez une méthode qui va rechercher une implémentation de votre bean. En fait, cette méthode retourne un proxy sur votre bean. Vous pourrez alors appelez les méthodes de votre bean. Aidez-vous de l’exemple suivant. Il faut utiliser le nom JNDI de votre bean ! import javax.naming.NamingException; import ipint.ejb.firstbeansession.SayHelloBeanRemote; public class Main { public static void main(String[] args) { try { // création du "contexte initial" = de la connexion à l'annuaire du serveur InitialContext context = new InitialContext(); // requête sur le nom de la ressource que l'on veut, ici notre EJB SayHelloBeanRemote bean = (SayHelloBeanRemote)context.lookup("ipint.ejb.firstbeansession.SayHelloBeanRemote" ) ; System.out.println("Id = " + bean.sayHello()) ; } catch (NamingException e) { e.printStackTrace(); } } public Main() { super(); } } Testez votre client ! Création d’un client lourd (par JUnit ) Par la suite, nous utiliserons JUnit pour tester nos bean. Créez une classe JUnit avec une méthode de teste appelant votre bean en tant que client lourd (ie : la méthode de test contient le code qui était dans le main() de la classe précédente). Vous pouvez créer votre classe de test en selectionnant le bean, puis click droit>New->Other->Java->JUnit->JUnit Test Case). Vous déplacez ensuite votre classe dans un package ‘ipint.ejeb.clientlourd.tests’ de votre projet ‘clientlourd’. Testez votre classe de test. Appel d’un bean Session par Injection L’objectif de cette atelier est de créez un second bean session stateless qui va appelez votre premier bean. Dans votre projet ‘ipint.ejb.firstbeansession’ créez un nouveau bean session stateless appelé ‘AskMe’. Créez une méthode String askMe() qui appelle la méthode sayHello(), et renvoie le résultat concaténé avec « askMe : » . Le bean SayHello est récupéré par injection. public class AskMe implements AskMeRemote, AskMeLocal { @Inject SayHelloBeanLocal bean; /** * Default constructor. */ public AskMe() { // TODO Auto-generated constructor stub } public String askMe() { return "askMe " + bean.sayHello(); } } Ajoutez une nouvelle méthode dans votre classe de test afin de tester le nouveau bean. Création d’un client léger Dans cet atelier, vous allez créer un client léger (web) pour appeler vos bean session. Le client léger est ici une page web jsp. Créez un nouveau projet ‘ipint.ejb.clientleger’ de type ‘Dynamic Web Project’. Choisissez l’option ‘Generate web.xml deployment descriptor’. Modifier le classpath Vous devez modifier le classpath de votre projet (Build Path-> Configure Build Path…) : - Ajoutez le projet ‘ipint.ejb.firstbeansession’ - Supprimez ‘Glassfish Runtime Library’ - Ajoutez la librairie ‘client-glassfish’ - Ajouter jars externe requis (javax.servlet-api.jar …) Copiez l’interface repertoire src. ipint.ejb.firstbeansession.SayHelloBeanRemote dans Modifiez le jsp pour appeler votre bean : <%@page import="java.util.Date"%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <%@ page import="ipint.ejb.firstbeansession.SayHelloBeanRemote,javax.naming.*"%> <%!private SayHelloBeanRemote helloBean = null; public void jspInit() { try { InitialContext context = new InitialContext(); helloBean = (SayHelloBeanRemote) context.lookup(SayHelloBeanRemote.class.getName()); } catch (Exception ex) { System.out.println("Couldn't find bean." + ex.getMessage()); } } public void jspDestroy() { helloBean = null; } %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> le <body> Calling method (<%=new Date().toString()%>): <br> <%=helloBean.sayHello()%> <br> --------------</body> </html> Déployez votre jsp et appelez-la à partir d’un navigateur.