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.