Vous êtes sur la page 1sur 14

Tutoriel Eclipse / Jboss

Rsum
Ce tutoriel correspond Eclipse Galileo et Jboss 5.1.0. Il met en oeuvre un EJB 3.0 Session stateless, un servlet de test et un client lourd .

Avertissement
Le copier/Coller fait certes gagner du temps, il ne vous dispense de lire le contenu des classes et de comprendre ce que vous faites...

Configuration de Java
Il vous faudra un vrai jdk sun 6.

Configuration d'Eclipse
Configuration du JDK
A faire si vous avez plusieurs jdk installs, sous peine d'tre guett(e) par bien des tourments... Lancer Eclipse. Cliquer sur Windows/preferences. Configurer Java : Vrifier les JRE installs. Au besoin, ajouter un jdk 6 et le choisir comme jdk par dfaut.

Dans java/compilers, vrifier que le niveau de compatibilit java est 1.6.

A ce point, cliquez sur ok pour valider ces deux modifs, puis rouvrez la fentre des prfrences pour vrifier que les deux modifs ont bien t prises en compte.

Configuration du serveur d'applications


Dans eclipse, cliquer sur Windows/preferences. Ajouter Jboss dans la liste des serveurs disponibles (Server/Runtime Environments : Add...).

N'oubliez pas de cocher Create a new local server . Dans la fentre suivante, prciser le rpertoire d'installation de jboss...

Cliquez sur next puis finish et fermez la fentres des prfrences en cliquant sur OK. Dans la page principale d'eclipse, vous voyez maintenant le server jboss dans l'onglet Servers

Cration de l'EJB
Crez un projet de type EJB.

Indiquez le nom du projet.

Cliquez sur Next jusqu' la dernire fentre (pour s'assurer du paramtrage complet), puis sur Finish.

Crez une interface dans ce projet.

puis compltez son code comme suit :


package prem.ejb; import javax.ejb.Local; @Local public interface Premier { public String getText(String txt); }

Crez ensuite la classe de l'ejb (new class) :

Puis compltez son code :


package prem.ejb; import javax.ejb.Stateless; @Stateless public class PremierBean implements Premier { public String getText(String txt) { return "vous avez envoye : "+txt; } }

Vous pouvez maintenant dmarrer jboss (si ce n'est dj fait) en passant par l'onglet servers (la premire fois, l'ajouter en passant par clic droit + new ), puis publier l'EJB (clic droit sur jboss + Add and remove projects + glisser le projet dans la fentre de droite...) Si tout se passe bien vous obtenez le message suivant dans la console de dploiement :
Buildfile: /usr/java/eclipse/plugins/org.eclipse.jst.server.generic.jboss_1.6.1.v200904151 730/buildfiles/jboss323.xml deploy.j2ee.ejb: [jar] Building jar: /home/exbrayat/essaiAVirer/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/ Premier.jar [move] Moving 1 file to /usr/java/jboss-5.1.0.GA/server/default/deploy BUILD SUCCESSFUL Total time: 10 seconds

et le message suivant dans la console jboss :


15:17:50,176 INFO [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@16420652{vfszip:/usr/java/jboss5.1.0.GA/server/default/deploy/Premier.jar/} 15:17:50,177 INFO [Ejb3DependenciesDeployer] Encountered deployment AbstractVFSDeploymentContext@16420652{vfszip:/usr/java/jboss5.1.0.GA/server/default/deploy/Premier.jar/} 15:17:50,247 INFO [JBossASKernel] Created KernelDeployment for: Premier.jar 15:17:50,248 INFO [JBossASKernel] installing bean: jboss.j2ee:jar=Premier.jar,name=PremierBean,service=EJB3 15:17:50,248 INFO [JBossASKernel] with dependencies: 15:17:50,248 INFO [JBossASKernel] and demands: 15:17:50,248 INFO [JBossASKernel] jboss.ejb:service=EJBTimerService 15:17:50,248 INFO [JBossASKernel] and supplies: 15:17:50,248 INFO [JBossASKernel] jndi:PremierBean/remote 15:17:50,248 INFO [JBossASKernel] jndi:PremierBean/local-prem.ejb.Premier 15:17:50,248 INFO [JBossASKernel] jndi:PremierBean/local 15:17:50,248 INFO [JBossASKernel] Class:prem.ejb.Premier 15:17:50,249 INFO [JBossASKernel] Added bean(jboss.j2ee:jar=Premier.jar,name=PremierBean,service=EJB3) to KernelDeployment of: Premier.jar 15:17:50,249 INFO [EJB3EndpointDeployer] Deploy AbstractBeanMetaData@10f0424{name=jboss.j2ee:jar=Premier.jar,name=PremierBean,s ervice=EJB3_endpoint bean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImpl properties=[container] constructor=null autowireCandidate=true} 15:17:50,347 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=Premier.jar,name=PremierBean,service=EJB3 15:17:50,348 INFO [EJBContainer] STARTED EJB: prem.ejb.PremierBean ejbName: PremierBean 15:17:50,356 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI: PremierBean/local - EJB3.x Default Local Business Interface PremierBean/local-prem.ejb.Premier - EJB3.x Local Business Interface

Cration du Servlet
Crez un projet web (Dynamic web project):

Cliquer sur next jusqu' la fin, puis finish. Dans le nouveau projet (Fentre Project Explorer), faire clic droit + configure build path Ajouter le projet EJB dans l'onglet Projects du projet web :

Cliquez sur OK.

Ajouter un servlet PremierServlet.

Puis cliquez sur finish . Modifiez le code comme suit :


public class PremierServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out =response.getWriter(); try { Context ctx=new InitialContext(); Premier prem=(Premier) ctx.lookup("PremierBean/local"); out.println(prem.getText("essai")); } catch (NamingException ne) { out.println(ne.toString()); } out.close(); } }

Dployez ensuite le projet web, puis invoquez l'url http://localhost:8080/PremierWeb/PremierServlet...

Cration du client externe.


Nous allons maintenant utiliser un client java classique. La dmarche est assez similaire. Commencez par modifier l'ejb en ajoutant proprement une interface remote : Dans l'interface Premier, enlevez le tag @Local . Crez une interface PremierLocal qui tend Premier. Placez y le tag @Local . Crez une interface PremierRemote qui tend Premier. Placez y le tag @Remote . Modifiez PremierBean, qui implmente maintenant PremierLocal et PremierRemote. Republiez tout (mieux vaut enlever les projets de jboss, puis les remettre). Crez ensuite un projet java classique (cela vous fera passer dans la perspective java d'eclipse). Dans la liste des projets du build path , ajoutez Premier (le projet EJB). Crez ensuite une classe Java comme suit :
package prem.cli; import import import import javax.naming.Context; javax.naming.InitialContext; javax.naming.NamingException; prem.ejb.Premier;

public class Client { public static void main(String args[]) { try { Context ctx=JBossContext.getInitialContext(); Premier prem=(Premier) ctx.lookup("PremierBean/remote"); System.out.println(prem.getText("essai")); } catch (NamingException ne) { System.out.println(ne.toString()); } } }

Crez aussi la petite classe utilitaire JBossContext pour le chargement du contexte, comme indiqu dans le cours :
package prem.cli; import java.util.Properties; import javax.naming.*; public class JBossContext { public static Context getInitialContext() throws NamingException{ Properties prop=new Properties(); prop.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingC ontextFactory"); prop.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfac es"); prop.put(Context.PROVIDER_URL,"jnp://localhost:1099"); return new InitialContext(prop); } }

Lancez ensuite l'excution de la classe Client. Attention : il est possible que le passage par la perspective java arrte le serveur jboss. A vrifer avant le test...

Vous aimerez peut-être aussi