Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n°...

24
asters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Cours n° 11 Services Web et plateforme J2EE Services Web et plateforme J2EE

Transcript of Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n°...

Page 1: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié1

Cours n° 11Cours n° 11

Services Web et plateforme J2EEServices Web et plateforme J2EE

Page 2: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié2

1. Services de présentation Les Servlettes Pages JSP (Java Server Page) Déploiement de WAR (Web Archive)

2. Services d’application Composants transactionnels (Entity Java Bean) Déploiement d’EJB

Sommaire

Page 3: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié3

INTRODUCTIONINTRODUCTION

BibliographieBibliographie

Eric Sarrion, Développement Web avec J2EE, O'Reilly, 2005. Bruce W. Perry, Java Servlet and JSP Cookbook, O'Reilly, 2004.Laboratoire Supinfo, EJB 3 : Des concepts à l'écriture du code - Guide du développeur, Dunod , 2006.

Etienne Langlet, Apache Tomcat 5 : Serveur d'application Java, ENI , 2006.

www.apache.orgjonas.objectweb.org

Page 4: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié4

Schéma de développement d’applications internet, intranet et extranetProposition de la société Sun (/java.sun.com/javaee/5/docs/api/)

Architecture d’applications distribuées à base de composants (API)client, serveur, conteneur, composant logiciel

Spécification des interfaces et de l’environnement d’application

Développement et déploiement rapide de services WEB fiablespersistance des donnéesgestion de la mémoiresécurisation des transactions

Fourniture par des entreprises tierces de serveurs J2EE 24000 tests de certificationIBM (WebSphere), Oracle, BEA (WebLogic), Bordland, …ObjectWeb (open-source Jonas), Jboss group (open-source commercial Jboss)

Solutions alternatives : .NET framework, SAP

INTRODUCTIONINTRODUCTION

Java 2 Entreprise Edition (J2EE)Java 2 Entreprise Edition (J2EE)

Page 5: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié5

Services de présentationServlets : Gestion coté serveur de réponses aux requêtes client (e.g., protocole http)JSP, JSF : Pages Web dynamiquesServices d’applicationEJB : Composants distribués transactionnelsJTA : Gestion des transactionsJAXP : Analyse de documents XMLJAXB : Sérialisation de données en XMLJMX : Administration des applicationsJAXR : Enregistrement de Web ServicesServices de communicationJMS : Communication asynchroneJAXM : Communication asynchrone par XMLJAX-RPC : Communication synchrone par XMLJavaMail : Gestion des mailsRMI : Communication distante entre des objets javaJava IDL : Communication entre objets Java et objets non-Java (CORBA)Services de connexionJNDI : Connexion à des annuaires, notamment des annuaires LDAPJDBC : Connexion à des bases de donnéesJCA : Connexion, notamment à des PGI

INTRODUCTIONINTRODUCTION

Java 2 Entreprise Edition (J2EE) - ComposantsJava 2 Entreprise Edition (J2EE) - Composants

Page 6: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié6

1. SERVICES DE PRESENTATION1. SERVICES DE PRESENTATION

PrincipesPrincipes

Indépendance entre présentation et applicationHeuristique de conception Modèle-Vue-Contrôleur (MVC) pour l’IHMSimplification de la maintenance et amélioration de la sécuritéMultiplicité des vues (présentation) sur un modèle unique de données

Création dynamique de pages webAdaptation aux données provenant du modèle

Traitement automatique de données structuréesFormulaire, tableau

Deux types de composantsPages web dynamiques (Java Server Page et Java Server Face)API Java pour le traitement des requêtes (Servlet)

Exécution sur des serveurs J2EE (moteur de servlet)

Page 7: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié7

1.1 LES SERVLETTES1.1 LES SERVLETTES

La classe GenericServlet (1/2) – Cycle de vieLa classe GenericServlet (1/2) – Cycle de vie

Création de la classe à la réception de la requête Méthodes appelées à la créationvoid init() void init(ServletConfig  config)

Destruction de la classe à la fin du traitement Méthode appelée avant à la destruction void destroy()

Fichier des traces d’exécutionMéthodes d’écriturevoid log(String msg) void log(String message, Throwable t)

Traitement de la requête et d’envoi de la réponsevoid service(ServletRequest req, ServletResponse res)

Page 8: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié8

1.1 LES SERVLETTES1.1 LES SERVLETTES

La classe GenericServlet (2/2) - Accesseurs La classe GenericServlet (2/2) - Accesseurs

Accès aux paramètres de la requêteEnsemble de couples attribut-valeurListe de Attributs

Enumeration getInitParameterNames() Valeur associé à un attribut

String getInitParameter(String name)

Caractéristiques de la servletCaractéristiques générales

ServletConfig getServletConfig()Auteur, version.  

String getServletInfo() Nom 

String getServletName()

Variables globales associées à la servletPartage de données entre servlet

ServletContext getServletContext()

Page 9: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié9

1.1 LES SERVLETTES1.1 LES SERVLETTES

Interface ServletRequest – caractéristiques réseauInterface ServletRequest – caractéristiques réseau

Protocole RéseauString getProtocol() Nom et version du protocole réseauboolean isSecure() Est-ce un protocole sécurisé ?

Nom, adresse IP et port du client envoyant la requête String getRemoteHost() NomString getRemoteAddr() Adresse IPint getRemotePort() Port

Nom, adresse IP et port du serveur destination de la requêteString getServerName() Nomint getServerPort() Adresse IP

Nom, adresse IP et port de l’interface recevant la requêteString getLocalName() NomString getLocalAddr() Adresse IP int getLocalPort() Port

Page 10: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié10

1.1 LES SERVLETTES1.1 LES SERVLETTES

Interface ServletRequest – caractéristiques réseauInterface ServletRequest – caractéristiques réseau

public class testServletRequestNet extends HttpServlet {

protected void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {

PrintWriter writer = res.getWriter();// protocole utiliséwriter.println( req.getProtocol() + " " + req.isSecure());// adresse du clientwriter.println(req.getRemoteHost() + " " + req.getRemoteAddr() + " " + req.getRemotePort());// adresse du serveurwriter.println(req.getServerName() + " " + req.getServerPort());// adresse de l'interfacewriter.println(req.getLocalName() + " " + req.getLocalAddr() + " " + req.getLocalPort());} }

testServletRequestNet.java

HTTP/1.1 false192.161.1.106 192.161.1.106 1077192.161.1.102 9000lili 192.161.1.102 9000

Page 11: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié11

1.1 LES SERVLETTES1.1 LES SERVLETTES

Interface ServletRequest – caractéristiques de la requêteInterface ServletRequest – caractéristiques de la requête

Préférences du clientLocale getLocale()

Corps de la requêteString getCharacterEncoding() codage des caractèresint getContentLength() taille en octets.  String getContentType() codage MIME utilisé

Accès au corps de la requêteServletInputStream getInputStream() Flux de lecture binaireBufferedReader getReader() Flux de lecture texte

Accès aux paramètres de la requêteString getParameter(String nom) Valeur d’une requête d’un nom donné Map getParameterMap() conteneur associatif contenant les requêtes.  

Page 12: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié12

1.1 LES SERVLETTES1.1 LES SERVLETTES

Interface ServletRequest – caractéristiques de la requêteInterface ServletRequest – caractéristiques de la requête

public class testServletRequestReq extends HttpServlet {

protected void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {

PrintWriter writer = res.getWriter();// préférences du clientwriter.println(req.getLocale().getDisplayLanguage());// caractéristiques du corps de la requêtewriter.println(req.getCharacterEncoding() + " " + req.getContentLength() + " " + req.getContentType());// Lecture des paramètres de la requêteMap m = req.getParameterMap(); Iterator it = m.entrySet().iterator();String[] valeurs;while (it.hasNext() == true) {Map.Entry entrée = (Map.Entry)it.next();writer.print(" " + entrée.getKey() + ":");valeurs = (String[])entrée.getValue();for (int j = 0;j < valeurs.length;j++) writer.print(valeurs[j] + " ");writer.println(); } } }

testServletRequestReq.java

Page 13: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié13

1.1 LES SERVLETTES1.1 LES SERVLETTES

Interface ServletRequest – caractéristiques de la requêteInterface ServletRequest – caractéristiques de la requête

<HTML> <BODY><FORM ACTION="http://192.168.1.102:9000/cours11/ServletRequestReq"METHOD=POST>Nom <INPUT NAME="nom"> <P>Prénom <INPUT NAME="prenom"> <P><INPUT TYPE=SUBMIT VALUE="Envoi"><INPUT TYPE=RESETVALUE="Remise à zéro"></FORM></BODY> </HTML>}

testServletRequestReq.html

français null 28 application/x-www-form-urlencoded prenom:Claude nom:Montacié

Page 14: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié14

1.1 LES SERVLETTES1.1 LES SERVLETTES

Interface HttpServletRequestInterface HttpServletRequest

Authentification String getAuthType() Méthode d’authentificationString getRemoteUser() Nom du client (après authentification)

RequêteString getMethod() Type de méthode associé (GET, POST, PUT)long getDateHeader(String name) Date associée à un champ d’entêteString getHeader(String name) Valeur associée à un champ d’entêteEnumeration getHeaderNames() Liste des champs d’entête String getQueryString() Partie interrogation de la requête (?….) Chemins d’adressageString getRequestURI() String getPathInfo() String getContextPath() String getPathTranslated() String getServletPath()

Gestion de la persistanceLecture des cookies associés à la requête  Cookie[] getCookies() cookies associés à la requêteboolean isRequestedSessionIdFromCookie() Lecture des paramètres de la session couranteHttpSession getSession() HttpSession getSession(boolean  cr)         String getRequestedSessionId()

Page 15: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié15

1.1 LES SERVLETTES1.1 LES SERVLETTES

Persistance de la connexion Persistance de la connexion

// Recherche d'un cookie d'attribut NomString Valeur = null;Cookie[] cookies = request.getCookies();for(int i=0; i < cookies.length; i++) {if (cookies[i].getName().equals("Nom")) Valeur = cookies[i].getValue();}

// ecriture de la reponseresponse.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<html><head>"); out.println("<title>Mon Cookie</title>");

out.println("</head><body>");if (Valeur == null) {out.println("Création du cookie");Cookie unCookie = new Cookie("Nom", "Montacié");response.addCookie( unCookie );}else out.println("Bonjour Monsieur " + Valeur);out.println("</body></html>");

testCookie.java

Page 16: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié16

1.2 JAVA SERVER PAGE1.2 JAVA SERVER PAGE

Principes et syntaxePrincipes et syntaxe 1.2 JAVA SERVER PAGE1.2 JAVA SERVER PAGE

Principes et syntaxePrincipes et syntaxe

Code Java intégré dans une page HTMLTraduction du code par le serveur J2EE en servlet (1er appel)Exécution par le moteur de servletCommunication avec les autres composants (servlets, EJB, …)Avantages / servlet

simplicité d’écriture et de déploiementInconvénients /servlet

visibilité du code Java (.class pour les servlets)perte de la structuration (paquetage)

Syntaxe (extrait)<% code Java %> contient du code Java qui fera partie de la méthode principale de la page JSP

<%= expression %> la valeur de expression sera intégrée dans la page HTML à la place de la balise

<%! … %> : définition d’une variable d’instance (persistance entre deux invocations)

<% … %> : définie une variable locale à la jsp (réinitialisée à chaque invocation)

Objets pré-déclarés (out request response exception session application)

Page 17: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié17

1.2 JAVA SERVER PAGE 1.2 JAVA SERVER PAGE

Interface ServletRequest – caractéristiques de la requêteInterface ServletRequest – caractéristiques de la requête

<% //programme Java affichant l'heure %><%@ page import="java.util.*" %>Calendar calendrier=Calendar.getInstance();int heures=calendrier.get(Calendar.HOUR_OF_DAY);int minutes=calendrier.get(Calendar.MINUTE);int secondes=calendrier.get(Calendar.SECOND); %><% // code HTML %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Page JSP affichant l'heure</title> </head><body><center><h1>Une page JSP générée dynamiquement</h1><h2>Il est <%=heures%>:<%=minutes%>:<%=secondes%></h2> <br><h3>A chaque fois que vous rechargez la page, l'heure change</h3></body></html>

Heure.jsp

Page 18: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié18

1.3 DEPLOIEMENT DE WEB ARCHIVE1.3 DEPLOIEMENT DE WEB ARCHIVE

Règles de constructionRègles de construction

<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"><web-app> <servlet> <servlet-name>testServletRequestNet</servlet-name> <servlet-class>cours11.testServletRequestNet</servlet-class> </servlet> <servlet-mapping> <servlet-name>testServletRequestNet</servlet-name> <url-pattern>/testServletRequestNet</url-pattern> </servlet-mapping></web-app>

web.xml

Archive compressé (jar) d’une arborescenceRépertoire WEB-INF contenant deux répertoires (classes et [sources]) et web.xml

paquetages des .class (classes) et paquetages des .java (sources)fichier de référencement des servlets pour le serveur J2EE (web.xml)

fichiers .html et .jsp

Page 19: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié19

2. SERVICES D’APPLICATION2. SERVICES D’APPLICATION

Processus et composant métierProcessus et composant métier

Processus métier (ou procédure d’entreprise)Algorithme permettant de systématiser une suite de tâches dans le but d’atteindre certains des objectifs d’une entreprise

vente : gestion commerciale, besoins du client, création d’une commandeachat : politique d’achat et de concurrenceveille : stratégique, concurrence, recherche d’informations…

Composant métierComposant logiciel correspondant à l’implémention d’un processus métier

Différentes granularités établissement d’une commande, consolidation d’un ensemble de commandes

Architecture logicielle d’une application répartieComposant d’IHM (service de présentation)

Composant métier (service d’application exécutant un processus métier)Modèle de gestion de donnée (définition et accès fiable aux données métier)

Page 20: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié20

2.1 COMPOSANTS TRANSACTIONNELS2.1 COMPOSANTS TRANSACTIONNELS

Accès fiable aux donnéesAccès fiable aux données

Propriétés ACID Propriétés essentielles d'un sous-système de traitement de transactions d'un système de gestion de base de donnéesTransaction (ensemble de consultations et de modifications d’un base de données)

Atomicité : Validation complète d’une transaction ou annulation de la transactionCohérence : Interdiction et annulation d’une transactions incohérente avec le modèle des donnéesIsolation : Pas d’interférence entre des transactions simultanées

Durabilité : Pas de perte d’une transaction validée

Composants transactionnelsComposants métiers permettant la mise en œuvre de transactions respectant les propriétés ACID.

Page 21: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié21

2.1 COMPOSANTS TRANSACTIONNELS2.1 COMPOSANTS TRANSACTIONNELS

Entity Java Bean (EJB)Entity Java Bean (EJB)

Composants transactionnels de J2EE1998 version 1.0 Lancement de Java Plateform Entreprise Edition (IBM, Sun)2001 version 2.0 Compatibilité Corba2003 version 2.1 Compatibilité Web Services (SOAP) Référence actuelle2006 version 3.0 Simplification de la syntaxe

Typologie des EJBSession Beans Composant implémentant une tâche client

avec état (Stateful) ou sans état (stateless)Entity BeansComposant gérant des données persistantes

Message-Driven Beanscomposant gérant et transportant des messages asynchrones

Page 22: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié22

2.1 COMPOSANTS TRANSACTIONNELS2.1 COMPOSANTS TRANSACTIONNELS

Architecture logicielle des EJBArchitecture logicielle des EJB

Interaction avec un Bean par l’intermédiaire de deux (ou quatres) interfacesRemote (services métiers)

Ensemble de méthodes métiers fournies par le BeanDéfinit le comportement de l’objet distribuéProche d’un objet serveur RMI

RemoteHome (gestion du cycle de vie)

Allocation, destruction d’instances Recherche d’instanceSeul élément du Bean enregistré dans le service de nommage (JNDI)

Local et LocalHome pour les accès de client du même conteneur

Amélioration des performances

Page 23: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié23

2.1 COMPOSANTS TRANSACTIONNELS2.1 COMPOSANTS TRANSACTIONNELS

Création automatique par le plugin JopeCréation automatique par le plugin Jope

public class SessionEJB implements SessionBean {SessionContext ejbContext;public void setSessionContext(SessionContext ctx) {ejbContext = ctx;}public void ejbRemove() {}public void ejbCreate() throws CreateException {}public void ejbPassivate() {}public void ejbActivate() {}/** méthodes métiers */public void method1() {System.out.println("It is method1 !!!");}public void method2(java.lang.String s) { System.out.println("It is method2 with parameter " + s);}}

public interface SessionHome extends EJBHome { MonPremierEJB create() throws CreateException, RemoteException;}

public interface Session extends EJBObject { public void method1() throws RemoteException; public void method2(java.lang.String s) throws RemoteException;}

SessionEJB.javaSessionHome.java Session.java

Page 24: Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.

Masters IIGLI et ILGII – Intranet internet extranet – 2006-2007 – Claude Montacié24

2.2 DEPLOIEMENT D’EJB2.2 DEPLOIEMENT D’EJB

Règles de constructionRègles de construction

Archive compressé (jar) d’une arborescenceRépertoires des paquetages de classesRépertoire META-INF contenant fichiers de description et de référencement

ejb-jar.xml description des ejbX-ejb-jar.xml fichier de référencement dépendant du serveur J2EE

String bName = "SessionHome";try { home = (SessionHome) PortableRemoteObject.narrow(ctx.lookup(bName), MonPremierEJBHome.class); Session bean = home.create(); bean.method1();} catch(Exception e) { e.printStackTrace(); System.exit(2);}

SessionClient.java