TD6 Initiation aux EJB3 avec Eclipse Ecriture d une application J2EE complète



Documents pareils
1. Installation d'un serveur d'application JBoss:

Web Tier : déploiement de servlets

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Groupe Eyrolles, 2005, ISBN :

Tutoriel d installation de Hibernate avec Eclipse

Création d une application JEE

Projet Java EE Approfondi

Mise en œuvre des serveurs d application

Etude de cas : PGE JEE V2

JOnAS Day 5.1. Outils de développements

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Compte Rendu d intégration d application

JavaServer Pages (JSP)

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Les architectures 3-tiers Partie I : les applications WEB

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Refonte front-office / back-office - Architecture & Conception -

Création d un service web avec NetBeans 5.5 et SJAS 9

Java pour le Web. Cours Java - F. Michel

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Architecture Orientée Service, JSON et API REST

Approche Contract First

EXA1415 : Annotations

Utilisation de Jakarta Tomcat

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

La base de données XML exist. A. Belaïd

Le Modèle de Sécurité dans JAVA

Introduction à Eclipse

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Documentation CAS à destination des éditeurs

Java Naming and Directory Interface

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

Une introduction à la technologie EJB (2/3)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TP1 : Initiation à Java et Eclipse

Auto-évaluation Aperçu de l architecture Java EE

Aspects techniques : guide d interfaçage SSO

Cours en ligne Développement Java pour le web

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

TP1 : Initiation à Java et Eclipse

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Application web de gestion de comptes en banques

TP JAVASCRIPT OMI4 TP5 SRC

Formulaires et Compteurs

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Grenoble INP Genie Industriel G-SCOP Université Joseph Fourier CNRS. Stages d excellence L2 Mathématiques Informatiques

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

JOnAS 5. Serveur d application d

Déploiement d application Silverlight

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

Construire des plug-ins pour SAS Management Console SAS 9.1

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Installation et prise en main

BIRT (Business Intelligence and Reporting Tools)

Formation en Logiciels Libres. Fiche d inscription

Environnements de Développement

Connexions à un projet CVS via Eclipse en accès local et distant. 15 Mai 2007

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Module BD et sites WEB

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Gestion d Active Directory à distance : MMC & Délégation

Remote Method Invocation (RMI)

Logiciels de référencement

Application Web et J2EE

Alfstore workflow framework Spécification technique

Développement Logiciel

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Europa. Développement JEE 5. avec Eclipse. K a r i m D j a a f a r. A v e c l a c o n t r i b u t i o n d e O l i v i e r S a l v a t o r i

RAPPORT DE STAGE GWT PRISE EN MAIN SERVLET - TEST DES DAO TELOSYS PLUGIN ECLIPSE WIZARD DATASET TELOSYS

Flex. Lire les données de manière contrôlée. Programmation Flex 4 Aurélien VANNIEUWENHUYZE

Un serveur d'archivage

4. Groupement d objets

2 Chapitre 1 Introduction

Applications orientées données

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

TD/TP 1 Introduction au SDK d Android

Remote Method Invocation Les classes implémentant Serializable

Les frameworks au coeur des applications web

Créer et partager des fichiers

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

< Atelier 1 /> Démarrer une application web

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

Le passage à l échelle de serveur J2EE : le cas des EJB

Informatique : Création de site Web Master 2 ANI TP 1

J2EE - Introduction. Développement web - Java. Plan du chapitre

Guide d implémentation Interface avec la plateforme de paiement

Transcription:

TD6 Initiation aux EJB3 avec Eclipse Ecriture d une application J2EE complète Nous allons écrire une application J2EE qui permet dans un navigateur web de gérer des contacts. Pour cela, nous allons suivre le pattern MVC (Modèle Vue Contrôleur). La vue est l interface graphique écrite en jsp. Le contrôleur sera écrit sous forme de servlets qui sont à même de contrôler le séquencement entre les différentes pages du projet. Enfin, le modèle prendra la forme d ejbs. L architecture générale sera la suivante : Vue JSP contactform Conteneur WEB Contrôleur Servlets AddContactForm Servlet Conteneur d application FACADE EJB session Remote Stateless ou stateful Modèle EJB entity Local Navigateur web contactadded contactnotadded listcontact AddContactExecute Servlet ListContact Servlet ContactManager Contact Contact Conseil : utilisez les noms de classes et de variable du TD et prenez la version de JBoss de l archive (7.1.1) Cette architecture est une architecture J2EE classique. Le client Le client est dans la zone internet, il accède de ce fait au système d'information par le conteneur web. Les servlets Dans ce conteneur, une ou plusieurs servlets répondent aux demandes des clients. Le conteneur web est par nature un conteneur fragile car accessible de partout. De ce fait, il est conçu pour contenir uniquement de la présentation ou des transferts d'information entre le cœur du SI (les processus métiers et le client). De plus, un des apports de J2EE est de permettre de proposer plusieurs présentations différentes associées aux processus métiers. Par exemple, dans une agence de voyage, une réservation d'un séjour peut se faire directement par client dans une interface web ou par le personnel de l'agence dans une application java. Les processus métiers impliqués sont les mêmes mais la présentation différente. Il faut donc être très attentif à ne pas déplacer une partie du processus métier dans les servlets. Dans cet exemple, les servlets contiendront uniquement l'appel à l'ejb Facade. Les ejb Tout d'abord, la persistance des données est assurée par une base de données mysql. Pour gérer cette base, il est classique d'associer un ejb entité par table. Dans tous les systèmes d'information, la base de données est complexe et faite de plusieurs tables interconnectées par des clés étrangères. De plus, un processus métier fait couramment appel à plusieurs ejb. Par exemple, pour réserver une chambre pour un client, il faut utiliser les ejb des hôtels et des chambres pour vérifier la réservation puis l'ejb des réservations pour rajouter la réservation mais aussi l'ejb du client pour ajouter ou rechercher le client. La gestion de ces processus complexe doit être isolée des ejb entités qui sont chacun dédiés à la gestion d'une table. Pour cela, une solution est de créer un ejb dit façade qui se charge des processus métiers. Cet ejb ne gère pas de la persistance mais synchronise les appels aux ejb persistants, il s'agit donc d'un ejb session sans état. 1 Création des projets 1.1 Création du projet WEB Une fois votre IDE Eclipse lancé cliquez sur : «File -> New ->Project -> Web -> Dynamic Web Project». Cliquez sur Next. Remplissez les champs comme ci-dessous. Attention, le nom de l'ear doit être modifié. ASI TD6 Anne Lapujade 1

Il ne vous reste plus qu à cliquer sur «Finish». 1.2 Création du projet EJB Créez un projet EJB «EJB Project» (EJB -> EJB Project). Remplissez la fenêtre comme ci-dessous : Cliquez sur «Finish» pour terminer l opération. 1.3 Dépendances Le projet web va accéder aux EJB, nous devons donc créer une dépendance entre ces deux projets. Faire un clic droit sur ProjetContactWeb -> Properties. Allez dans Java Build Path et cliquez sur l onglet Projects. Cliquez sur Add et sélectionnez ProjetContactEJB. ASI TD6 Anne Lapujade 2

Ne vous inquiétez pas si la console JBoss vous indique une erreur " No META-INF/application.xml found". Nous créerons ce fichier par la suite. Vous pouvez arrêter JBoss. 1.4 Vues finales Maintenant que vous avez paramétré l ensemble des projets (Web / EJB / EAR) vous devez avoir les 4 projets suivants dans votre package explorer : 1.5 Ajout du projet dans l environnement d exécution du serveur Dans l onglet serveur, clic droit sur JBoss puis choisir Add and remove projects. Ajouter le ProjetContactEAR : Remarque : vous pouvez comme ci-dessus retirer ProjetEJB du serveur, nous n'en n aurons plus besoin. 2 Les EJB - ProjetContactEJB Nous allons mettre en place un exemple simple qui consistera à développer une application web permettant d ajouter et lister des contacts dans un agenda. Notre application a besoin : de décrire l entité Contact de gérer les instances des contacts en base de données ASI TD6 Anne Lapujade 3

Pour cela, nous allons utiliser : 1 Entity Bean (permet de mapper notre entité objet Java vers une base de données) 1 Session Bean Stateless (service façade de gestion des instances) 2.1 Entity bean 2.1.1 Base de données Créez une nouvelle base vide nommée agenda. 2.1.2 Les EJB Créez un package ejbagenda dans lequel vous mettrez vos EJB Utilisez le TD précédent pour : Créer la datasource Créer un EJB entité Contact avec les attributs suivants : private int id; private String prenom; private String nom; private String addresse; private int codepostal; private String ville; private String telephone; private String mobile; Remarque : Clic droit + Source + Generate getter and setters permet de gagner beaucoup de temps... Créer un EJB façade ContactManager qui implante les méthodes suivantes : * addcontact : qui permet d ajouter un contact * listcontact : qui retourne l ensemble des contacts trouvés L implémentation de ces méthodes est la suivante : public Contact ajoutercontact(contact contact) { em.persist(contact); return contact; public Collection<Contact> listercontact() { // Vous pouvez aussi utiliser une named query définie dans l entité (cf TD5) return em.createquery("select c FROM Contact c").getresultlist(); Remarque : pour un même ensemble de processus métiers, il est envisageable, notamment pour des raisons de sécurité de créer plusieurs façades différentes. Par exemple, dans le cas d'une banque, on peut avoir une façade simplifiée pour un client distributeur de billets qui ne donne accès qu'aux méthodes du retrait et de l'édition d'un relevé simplifié de compte. Par contre, dans le cas d'une application client destinée aux commerciaux de la banque, le façade donnera accès à toutes les fonctionnalités de la banque. 3 Les servlets : ProjetContactWeb Nous allons mettre en place le pattern MVC («Modèle Vue Contrôleur») dans notre application Web. Les servlets sont les contrôleurs et les JSP les vues. La couche modèle est implémentée par les EJB3 Contact et ContactManager. Nous allons créer 3 servlets au total : * AddContactForm : qui permettra d afficher le formulaire d ajout de contact * AddContactExecute : qui ajoute le Contact avec les données du formulaire * ListContact : qui récupère la liste des Contacts et l affiche dans un tableau Les classes suivantes vont être créées dans le projet ProjetContactWeb. Pour cela, clic droit sur ProjetContactWeb > New package > nommez-le «web». 3.1 La classe EjbLocator Une fonctionnalité commune à ces trois servlets est la récupération du ContactManager (EJB Session). Le design pattern «Locator» est une solution que nous allons utiliser afin de regrouper les mécanismes de localisation des EJB au sein d une même classe. Créez dans le package web une classe EjbLocator dont voici le code source : package web; import java.util.hashtable; ASI TD6 Anne Lapujade 4

import javax.naming.context; import javax.naming.initialcontext; import javax.naming.namingexception; import ejbagenda.contactmanagerremote; import ejbagenda.rendezvousmanagerremote; public class EjbLocator { private static Context ctx; private static EjbLocator instance = new EjbLocator(); private EjbLocator() { public static EjbLocator getlocator() { return instance; private <T> T getejb(class<t> ejbclass, String beanname) { try { final Hashtable jndiproperties = new Hashtable(); jndiproperties.put(context.url_pkg_prefixes, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties); final String appname = "ProjetContactEAR"; final String modulename = "ProjetContactEJB"; return (T) context.lookup("java:global/" + appname + "/" + modulename + "/" + beanname + "!" + ejbclass.getname()); catch (NamingException e) { return null; public ContactManagerRemote getcontactmanager() { return getejb(contactmanagerremote.class, "ContactManager"); Cette classe implémente le pattern Singleton afin de gérer la propre instanciation de son unique instance. Vous pouvez remarquer l utilisation des Generics (méthode getejb). 3.2 La servlet d affichage du formulaire d ajout de contacts Le code des servlets est alors très basique. Créez une servlet dans le package web du projet ProjetContactWeb Fichier/Nouveau/Web/Servlet ASI TD6 Anne Lapujade 5

Nommez la servlet AddContactFormServlet : Cette version d'eclipse va générer automatiquement le mapping dans le fichier web.xml, laissez l'url-mapping par défaut : Nous ne générerons automatiquement que le doget() ASI TD6 Anne Lapujade 6

Modifiez la méthode doget() : protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = request.getrequestdispatcher("/web-inf/jsps/contactform.jsp"); rd.forward(request, response); 3.3 La servlet d ajout du contact avec les données du formulaire Répétez la même opération pour créer la servlet AddContactExecuteServlet avec un dopost cette fois-ci : protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { Contact contact = new Contact(); contact.setprenom(request.getparameter("contact.prenom")); contact.setnom(request.getparameter("contact.nom")); contact.setadresse(request.getparameter("contact.adresse")); contact.setcodepostal(integer.parseint(request.getparameter("contact.codepostal"))); contact.setville(request.getparameter("contact.ville")); contact.setmobile(request.getparameter("contact.mobile")); contact.settelephone(request.getparameter("contact.telephone")); ContactManagerRemote contactmanagerremote = EjbLocator.getLocator().getContactManager(); Contact newcontact = contactmanagerremote.ajoutercontact(contact); RequestDispatcher rd = null; if(newcontact.getid() > 0) { rd = request.getrequestdispatcher("/web-inf/jsps/contactadded.jsp"); else { rd = request.getrequestdispatcher("/web-inf/jsps/contactnotadded.jsp"); rd.forward(request, response); 3.4 La servlet de récupération de la liste des contacts Répétez la même opération pour créer la servlet ListContactServlet protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { ContactManagerRemote contactmanagerremote = EjbLocator.getLocator().getContactManager(); request.setattribute("listcontacts", contactmanagerremote.listercontact()); RequestDispatcher rd = request.getrequestdispatcher("/web-inf/jsps/listcontact.jsp"); rd.forward(request, response); 3.5 Mappage des servlets Nous utilisons ici une version plus récente de la norme Servlet que dans les TDs dédiés aux servlets qui va nous permettre de nous affranchir du mapping dans le fichier web.xml. Ainsi par exemple, le tag @WebServlet("/AddContactExecuteServlet") situé au début du fichier AddContactExecuteServlet.java permet tout à la fois de déclarer que cette classe est une servlet et de donner son url-pattern. 4 L interface graphique : les JSP Comme nous souhaitons respecter le pattern MVC, la vue est bien entendu séparée dans des fichiers JSP. Nous allons vous fournir l'ensemble des pages jsp. La première contient le formulaire d'insertion des données. Il va être placé, comme toutes les autres pages JSP, dans le répertoire "WebContent/WEB-INF/jsps/". 4.1 Formulaire de saisie d un nouveau contact contactform.jsp <html> <head> <title> Contact </title> </head> <body> Ajoutons un contact : <br/> <form method="post" action="addcontactexecuteservlet"> prénom : <input type="text" name="contact.prenom"/><br/> nom : ASI TD6 Anne Lapujade 7

<input type="text" name="contact.nom"/><br/> adresse : <input type="text" name="contact.adresse"/><br/> code postal : <input type="text" name="contact.codepostal"/><br/> ville : <input type="text" name="contact.ville"/><br/> téléphone portable : <input type="text" name="contact.mobile"/><br/> téléphone : <input type="text" name="contact.telephone"/><br/> <input type="submit"/> </form> </body> </html> 4.2 Affichage de la liste des contacts Voici le code de la page listcontact.jsp (page contenant le plus de code Java) : <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <%@ page import="java.util.*" %> <%@ page import="ejbagenda.contact" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>liste des contacts</title> </head> <body> Liste des contacts : <br/> <br/> <br/> <table width="90%" > <% Iterator it = ((Collection)request.getAttribute("listContacts")).iterator(); while(it.hasnext()) { Contact contact = (Contact)it.next(); %> <tr> <td><%= contact.getprenom() %></td> <td><%= contact.getnom() %></td> <td><%= contact.getadresse() %></td> <td><%= contact.getville() %></td> <td><%= contact.getcodepostal() %></td> <td><%= contact.gettelephone() %></td> <td><%= contact.getmobile() %></td> </tr> <% %> </table> </body> </html> Cette page génère le tableau des Contacts préalablement chargés par la Servlet (ListContactServlet). Les autres pages ne contiennent que du HTML. 4.3 Attestation de l ajout d un contact contactadded.jsp <html> le contact a été ajouté. </html> 4.4 Attestation du non ajout d un contact contactnotadded.jsp <html> Le contact n'a pas pu être ajouté. </html> ASI TD6 Anne Lapujade 8

4.5 Page d accueil index.html, qui se place à la racine de WebContent : <html> <head></head> <body> Gestionnaire de contacts <ul> <li/><a href="addcontactformservlet"/>ajout d'un contact</a><br/> <li/><a href="listcontactservlet"/>lister les contacts</a><br/> </ul> </body> </html> 5 Configuration générale de l application Il reste à configurer le fichier.ear. Pour cela, rajouter un répertoire META-INF dans le répertoire EarContent du ProjetContactEAR. Ajoutez un fichier application.xml dans le répertoire META-INF avec le contenu suivant : <?xml version="1.0" encoding="utf-8"?> <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" version="5" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd"> <display-name>contact web application</display-name> <module> <web> <web-uri>projetcontactweb.war</web-uri> <context-root>/projetcontactweb</context-root> </web> </module> <module> <ejb>projetcontactejb.jar</ejb> </module> </application> 6 Exécution Il faut maintenant passer à l exécution de l application afin de voir si tout fonctionne correctement. Il suffit de faire un clic droit sur le ProjetContactWeb -> Run AS -> Run On Server». Sélectionnez «JBoss -> JBoss v7.1». Finalement, cliquez sur Finish. Le plugin déploie votre application (package war, ejb, et ear) et lance le serveur. Vous pouvez aller à l adresse : http://localhost:8080/projetcontactweb Remarque : Notez que pour ce serveur comme pour le serveur Jonas c'est Tomcat qui est utilisé comme conteneur web. ASI TD6 Anne Lapujade 9

Vous pouvez tester l'ajout de contacts : Une fois un utilisateur ajouté, vous pouvez ensuite visualiser la liste des utilisateurs. Vous pouvez aller consulter votre base agenda, la table a été créée ainsi que les enregistrements. ASI TD6 Anne Lapujade 10