• Aucun résultat trouvé

Cours Java architectures multi-tiers en environnement J2EE – Cours et formation gratuit

N/A
N/A
Protected

Academic year: 2022

Partager "Cours Java architectures multi-tiers en environnement J2EE – Cours et formation gratuit"

Copied!
84
0
0

Texte intégral

(1)

Java avancé

Tuyêt Trâm DANG NGOC

Laboratoire PRiSM

Université de Versailles-Saint-Quentin

<dntt@prism.uvsq.fr>

Cours CNAM, le 26 novembre 2003

(2)

Evolution de Java

OAK JDK1.0 JDK 1.1 Java2 SDK

EE 1.2.1

Java2 SDK EE 1.3.0

Plateforme Java

Plateforme Java2 Personal Java 1.0 / 1.1 / 1.2

Java embarqué

Java2 SDK SE 1.3.0, 1.3.1, 1.4.0

Java2 SDK ME (Micro Edition)

FDT, I/O, Collection et Outils, Applet + Thread, AWT + Swing, TCP/ IP + UDP / IP, RMI, New I/O, Expression rationnelle, Image I/O, Java2D, Java3D, JAI, JMF, Son, JCE, JSSE, JAAS

JSP + Servlet + JavaBeans, EJB, RMI-IIOP and CORBA, JNDI, JMS, JDBC, XML

Pour téléphones cellulaires PDA, JINI, JIRO **

•Java 1.0.2

(3)

Architecture J2EE

Cours CNAM, le 26 novembre 2003

(4)

Plan

 Architectures multi-tiers : architecture 1, 2, 3- tiers

 J2EE : architecture générale

 Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc.

 Outils de développement et d’intégration

 Produits existants

 Conclusion

Architectures multi-tiers : architecture 1,

2, 3-tiers

(5)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Architecture 1-tiers

Présentation Traitement

données Navigateur

Serveur Web

Système de

fichiers

(6)

Architecture 2-tiers

Présentation Traitement

données Navigateur

Serveur Web

Base de données

Base de

données

(7)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Architecture 3-tiers

+ Dimensionnement

+ Maintenance

+ Fiabilité

+ Disponibilité

+ Extensibilité

+ Gestion du

développement

- complexité

Présentation Traitement

données Navigateur

Serveur Web

Base de données

Base de données Serveur

d’applications

(8)

Plan

 Architectures multi-tiers : architecture 1, 2, 3- tiers

 J2EE : architecture générale

 Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc.

 Outils de développement et d’intégration

 Produits existants

 Conclusion

J2EE : architecture générale

(9)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Qu’est ce que la plateforme J2EE ?

 Environnement Java

 langage objet

 simple

 portable

 robuste

 indépendant de l’architecture (code virtuel)

 Pour serveurs d’applications réparties

 ensemble de services

 ensemble de protocoles de communication

(10)

Container J2EE

 Container J2EE : Environnement d’exécution Java 2 permettant d’héberger des composants applicatifs et de contrôler leur exécution. Il existe deux types de container :

 Container J2EE Web : utilisés pour héberger des servlets ou des pages JSP

 Container J2EE EJB : supportant l’exécution des

composants EJB

(11)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Interfaces de container

 Un container offre des interfaces constituant le contrat de composant. Il gère :

 des API de services : accès SGBD, annuaires, gestionnaire de transactions...

 des API de communication : protocole Internet, envois de messages ou de mail, accès à des objets distants...

 Composants d’application :

 Servlets, JSP, EJB.

 Descripteurs de déploiement :

 Fichier XML décrivant le composant d’application

 Inclut des informations additionnelles requises par le

container pour gérer les composants d’application

(12)

Container

Contrat Container

Descripteur de déploiement

Composant d’application

S er vi ce s d éc la ra tif s

API services du container

A u tr es s er vi ce s co n ta in er

Descripteur de déploiement

Composant d’application

Descripteur de déploiement

Composant d’application Descripteur

de déploiement Composant d’application

Un ensemble d’API

spécifiés par le containair, que les applications doivent étendre ou implémenter

Services additionnels

Services que le container interpose sur les

applications, basés sur le descripteur de déploiement donné pour chaque

composant d’application D’autres services

relatifs à la vie du composant : attente de ressources,

(13)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Container J2EE Web

Intégration J2EE

HTTP

JDBC

Container J2EE EJB

Enterprise Bean Enterprise Bean

IIOP-RMI LDAP

ERP JCA

Base de

données Répertoire

Pages

JSP Servlets

Navigateur

(14)

Plan

 Architectures multi-tiers : architecture 1, 2, 3- tiers

 J2EE : architecture générale

 Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc.

 Outils de développement et d’intégration

 Produits existants

 Conclusion

Composants J2EE : Servlets, JSP, EJB,

JMS, JAAS, JAXP, JavaMail, JNDI, etc

(15)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Composants J2EE

Outils

A pp let Ja va B ea ns

JavaIDL, RMI-IIOP JAAS JDBC JNDI JAXP

EJB JSP Servlet JTA/JTS

JavaMail JMS

C on ne ct eu rs

Container J2EE

BluePrint

Java 2 SDK – Edition standard

JavaBeans Web

Transaction

Messagerie Guide de

programmation

Mail

CORBA Sécurité Base de données

Nommage

& Répertoire XML

(16)

API pour J2EE

 Java Servlet 2.3 : services web

 JSP 1.2 : présentation des pages web

 EJB 2.0 : les beans

 JAF 1.0 : intégration des JavaBeans

 JDBC 2.0 : accès aux bases de données

 RMI-IIOP, RMI-JRMP, CORBA : accès et exécution distants

 JNDI 1.2 : gestion de noms et d’annuaire

 JMS 1.0 : gestion de messages

 JTA/JTS 1.0 : gestion de transactions

 JavaMail 1.2 : gestion du courrier électronique

 JAAS 1.0 : gestion de la sécurité, authentification et droits d’accès

(17)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Java Servlet

 programmation côté serveur

 permet d’étendre les fonctionnalité du serveurs web

 gère le protocole HTTP

 construire des applications Web plus performantes que les CGI

 accède à toutes les API des classes Java

 axé sur la génération du contenu

 les programmeurs ne se soucient pas de la présentation

(18)

Cycle de vie d’une servlet

Code

Servlet Serveur Chargement

Code

Servlet Serveur Code Servlet Serveur Client

Client

Traitement des requêtes clientes

par thread

•init() : initialisation de la servlet chargement du code.

Souvent effectué lors de la première requête cliente (doGet, doPost)

Allocation d’un pool de threads

•doGet () : Traitement des requêtes HTTP GET

•doPut () :Traitement des requêtes HTTP PUT

•doPost () :Traitement des requêtes HTTP POST

•destroy () : destruction de la servlet

par le serveur

(19)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

HTTP 1.0

Requête Réponse

HTTP/1.0 200 OK Mime-version: 1.0 Content-type: text/html

<html>

<head>

GET /home.html HTTP/1.0

User-Agent: Mozilla/4.0 Accept: image/gif, image/jpeg, text/*, */*

Servlet

Service( req,rep)

(20)

API Servlet

 import javax.servlet.*;

 import javax.servlet.http.*;

(21)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Programmation des Servlets

import javax.servlet.http.*;

import javax.servlet.*;

import java.io.*;

public class Hello extends HttpServlet

{ public void doGet (HttpServletRequest requete, HttpServletResponse reponse) throws ServletException, IOException

{

// Récupère le flux d’écriture pour la réponse PrintWriter out = reponse.getWriter () ; // Prépare la réponse

reponse.setContentType ("text/html");

// Récupère l’adresse IP du client

String adresseDistante = requete.getRemoteAddr () ; // Imprime la page HTML

out.println("<html>") ;

out.println("<title>Bienvenue !</title> <body>") out.println("<h1>Bonjour !</h1>") ;

out.println("Votre adresse IP est identifi&eacute; comme :<b>" + adresseDistante + "</b>.") ; out.println(“</body></html>") ;

}

}

(22)

Java Server Page (JSP)

 Séparation entre la présentation et le contenu des pages web

 Encapsulé dans des pages HTML

 Création de contenu dynamique

 Situé côté serveur

 Axé sur la présentation des données

 Les webmasters ne se soucient pas de la programmation

 Semblable à HTML ou XML

 basé sur des balises

(23)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

 Directives

 Balise de déclaration <%! ... %>

 Balise d’affichage <%= ... %>

 Balise de scriplet <% ... %>

 Balise de directive <%@ ... %>

 Balise d’action <jsp : ... />

(24)

API JSP

 import javax.servlet.jsp.*;

 import javax.servlet.jsp.tagext.*;

(25)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Programmation JSP

<html>

<!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved.-->

<body bgcolor="white">

<!– fixer les paramètres de la page 

<%@ page language = “JAVA” session = “false” %>

<!– déclarer une variable caractère 

<% char c = 0 ; %>

<!– scriptlet code Java 

<%

for (int i =0 ; i < 26 ; i++) { c = (char) (‘a’) + i ;

%>

<!– afficher c 

<%= c %>

<% } %>

<jsp:useBean id='clock' scope='page' class='dates.JspCalendar' type="dates.JspCalendar" />

<font size=4>

<ul>

<li> Jour du mois <jsp:getProperty name="clock" property="dayOfMonth"/> </li>

<li> année <jsp:getProperty name="clock" property="year"/> </li>

<li> mois <jsp:getProperty name="clock" property="month"/> </li>

<li> temps <jsp:getProperty name="clock" property="time"/> </li>

</ul>

</font>

</body>

</html>

(26)

Java Beans Coding Convention (1/2)

 Convention pour les commentaires

 Convention de nommage

 class et interface (pas d'underscore, majuscule au début de chaque mot)

 méthode (minuscule au début, majuscule au début de chaque mot)

 variable (d'instance préfixé par 'i', de classe par 'c', de paramêtre par 'a', temporaire sans, constante tout en capitale)

 paquetage (tout en minuscule, dans le répertoire associé)

 Convention d'accès aux variables

 récupérer la valeur d'une variable d'instance (get suivi du nom de la variable)

 positionner la valeur d'une variable d'instance (set suivi du nom de la

variable)

(27)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Java Beans Coding Convention (2/2)

 Convention de constructeurs (avoir un constructeur par défaut)

 Convention d'initialisation (utiliser les conventions de variables et les set)

 Convention d'importation (ne pas utiliser '*')

 Sérialisation (doit implémenter l'interface Serializable)

 Convention d'évènement

 Event handling methods:

void <eventOcurrenceMethodName>(<EventStateObjectType> evt);

 Event handling methods with arbitrary argument list:

void <eventOcurrenceMethodName>(<ArbitraryParameterList>);

 Multicast event delivery:

public void add<ListenerType>(<ListenerType> listener);

public void remove<ListenerType>(<ListenerType> listener);

 Unicast event delivery:

public void add<ListenerType>(<ListenerType> listener) throws java.util.TooManyListenersException;

public void remove<ListenerType>(<ListenerType> listener);

(28)

Enterprise Java Beans (EJB)

 Modèle client/serveur distribué

 Code exécuté sur le serveur

 proche des données

 serveur souvent plus puissant que le client

 Code localisé sur le serveur

 changer le code du serveur ne change pas le code du client

 Un EJB est juste une collection de classes Java et d’un fichier XML. Les classes Java suivent un certains

nombre de règles et fournissent des callbacks comme définis dans l’environnement J2EE et les

spécifications EJB.

(29)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Container EJB

 Un container EJB est un environnement d’exécution pour un composant EJB.

 Un EJB s’exécute sur un container EJB.

 Un container EJB s’exécute par un serveur d’applications et prend la responsabilité des problèmes au niveau système

 Le container EJB gère le cycle de vie de l’EJB.

 Le container EJB fournit aussi un nombre de services additionnels

 Gestion de la persistance

 Transactions

 Sécurité

 Cadre de travail pour Business Logic

 Dimensionnement

 Portabilité

 Gestion des erreurs

(30)

Beans entité

 Un bean entité est un objet persistant

 Un bean entité peut avoir plusieurs clients

 Bean Managed Persistance (BMP) : le container EJB est responsable de la persistance du bean.

 Container Manager Persistance (CMP) : le bean est

responsable de sa propre persistance.

(31)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Beans session

 Un bean session pour chaque client

 Il y a deux types de beans session

 sans état

 pas d ’état entre les invocations

 rapide et efficace

 avec état

 maintient les états entre les invocations

 persistance limitée

(32)

Structure EJB

 Interface home

 fournit un moyen pour le client EJB de récupérer une instance d’un EJB

 Interface distante

 expose les méthodes que le client EJB peut utiliser

 Code EJB

 implémente l’interface distante et l’interface EJB approprié

(SessionBean ou EntityBean par exemple)

(33)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API EJB

 import javax.ejb.* ;

 import javax.ejb.spi.* ;

(34)

Programmation EJB

import java.rmi.RemoteException;

import javax.ejb.CreateException;

import javax.ejb.EJBHome;

public interface HomeDe extends EJBHome

{ De create() throws RemoteException, CreateException;

}

import javax.ejb.EJBObject;

import java.rmi.RemoteException;

public interface De extends EJBObject {

public int lancer() throws RemoteException;

}

(35)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

import java.rmi.RemoteException ; import javax.ejb.SessionBean ; import javax.ejb.SessionContext ;

public class DeEJB implements SessionBean {

public DeEJB() {…}

public void ejbCreate() {…}

public void ejbRemove() {…}

public void ejbActivate(){…}

public void ejbPassivate() {…}

public void setSessionContext (SessionContext sc) {…}

public int lancer(){…}

}

(36)

JavaBeans Activation Framework (JAF)

 Les services d’activation sont des composants fondamentaux utilisés pour activer

automatiquement des objets en mémoire à l’état dormant suivant une requête cliente

 JAF est un cadre de travail pour construire des applications qui peuvent activer

automatiquement des objets pouvant

manipuler des données reçues dans un flux

d’entrée

(37)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API JAF

 import javax.activation.* ;

(38)

Java Data Base Connectivity (JDBC)

 JDBC permet aux applications d’accéder à des SGBD relationnels et de manipuler des données provenant de ces bases

 API Java

 Calqué sur ODBC de Microsoft

 Implémente le standard CLI de l’X/OPEN

(39)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Pilotes JDBC

 Type 1 : Pont JDBC-ODBC fournit un accès JDBC API par l’intermédiaire d’un ou plusieurs pilotes ODBC.

 Type 2 : A native-API partly Java technology-enabled driver convertit les appels JDBC en un applet sur l’API client

(Oracle, Sybase, Informix, DB2, et autres SGBD)

 Type 3 : A net-protocol fully Java technology-enabled driver convertit les appels JDBC en un protocole indépendant traduit ensuite en protocole du SGBD par un serveur

 Type 4 : A native-protocol fully Java technology-enabled driver convertit les appels JDBC directement dans le

protocoles de communication utilisé par le SGBD

(40)

Java Application JDBC API

JDBC Type 1 Client natif ODBC Interface SGBD Client

SGBD Interface

serveur SGBD

Java Application JDBC API

JDBC Type 2 Interface SGBD Client

SGBD Interface

serveur SGBD

Java Application JDBC API

JDBC Type 4

SGBD Interface

serveur SGBD Java Application

JDBC API JDBC Type 3

SGBD Interface

serveur SGBD Ecouteur SGBD

Interface client SGBD

indépendant du constructeur dépendant du constructeur

na ti f cô té c li en t ut e di st an te

(41)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API JDBC

 import java.sql.*;

(42)

Programmation JDBC

private void executer (String driver, String chaine_connexion, String login, String password) {

// On charge le driver Class.forName (driver) ;

// on se connecte

conn = DriverManager.getConnection (chaine_connexion, login, password) ;

// on initialise le curseur

stmt = conn.createStatement () ;

// execution d’une chaine SQL sur le SGBD String SQL = "SELECT * from essai" ;

ResultSet rs = stmt.executeQuery (SQL) ;

ResultSetMetaData rsetdata = rs.getMetaData() ;

System.out.println (rsetdata.getColumnName(1) + "\t" + rsetdata.getColumnName(2)) ; while (rs.next ())

{

// On recupere le premier champ qui est une chaine puis le deuxieme System.out.println (rs.getString (1) + "\t" + rs.getInt (2)) ;

}

stmt.close () ; conn.close () ;

(43)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

RMI-IIOP, RMI-JRMP, CORBA

 RMI et CORBA sont des architectures complexes permettant d’invoquer un objet distant géré par une autre machine virtuelle comme s’il était local .

 CORBA : générique langage objets

 RMI : spécifique à Java

GIOP

IIOP

TCP/IP

RMI

(44)

Remote method Invocation (RMI)

 Objet distant localisé par l’API JNDI

 Registre associe au nom objet une référence

 stub représente

l’interface sur le client.

Agit comme proxy de l’objet distant

 squelette (skeleton) sur le serveur pour recevoir les messages et invoquer

l’objet serveur

 Génération de stub et

Couche de référence distante Couche transport RMI

TCP/IP Interface RMI

Stub RMI

Squelette RMI

client RMI

serveur

RMI

(45)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Common Object Request Broker Architecture

(CORBA)

 GIOP (General Inter-ORB Protocol) : Le protocole de plus haut-niveau de communication CORBA qui

convertit des messages créés par les stubs en format transport-message capable de communiquer entre les implémentations ORB (Object Request Broker).

 IIOP (Internet Inter-ORB Protocol) : Le protocole de

plus bas niveau utilisé par CORBA ;c’est une couche

transport décrivant comment les messages GIOP sont

transmis au dssus de TCP/IP.

(46)

Architecture CORBA

 Portable Object Adapter (POA)

 Object Request Broker (ORB )

Client

reférence

objet objet

Serveur

ORB ORB

(47)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API CORBA, RMI

 import javax.rmi.* ;

 import javax.rmi.CORBA ;

 import org.omg.CORBA.* ; // RMI-IIOP, IDL

 import org.omg.CosNaming.* ; // RMI-IIOP, IDL

(48)

Programmation RMI

// Fichier Bonjour.java : Interface du service 'Bonjour' import java.rmi.Remote ;

import java.rmi.RemoteException ; public interface Bonjour extends Remote {

String disBonjour (String nom) throws RemoteException ; }

// Fichier 'BonjourImpl.java': implementation de l'interface 'Bonjour‘ definie dans 'Bonjour.java'.

import java.rmi.RemoteException ;

import java.rmi.server.UnicastRemoteObject ;

public class BonjourImpl extends UnicastRemoteObject implements Bonjour {

public BonjourImpl () throws RemoteException { super () ;}

public String disBonjour (String nom)

{ return "Bonjour " + nom + " !" ;}

(49)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

// Enregistre l’objet Bonjour dans le registry du serveur local import java.rmi.Naming ;

import java.rmi.RMISecurityManager ;

public class ServiceBonjour {

public static void main (String args[]) throws Exception

{

BonjourImpl obj = new BonjourImpl () ;

Naming.rebind ("rmi://localhost/ObjetBonjour", obj) ; System.out.println ("Enregistre sous le nom 'ObjetBonjour'") ; }

}

(50)

// Fichier 'BonjourCLient.java' : contacte le registry a l'URL donne et recupere la reference de l'objet.

import java.rmi.Naming ;

import java.rmi.RemoteException ; public class BonjourClient

{

public static void main (String argv []) throws Exception

{

String message = null ; Bonjour obj = null ;

obj = (Bonjour) Naming.lookup ("rmi://gibet.prism.uvsq.fr/ObjetBonjour") ; message = obj.disBonjour (argv [0]) ;

System.out.println ("Le serveur a dit : '" + message + ".") ; }

}

(51)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Java Naming and Directory Interface (JNDI)

 JNDI permet d’accéder à de nombreux services de noms et d’annuaire.

 En utilisant JNDI, un objet Java peut stocker et récupérer des objets de n’importe quel type

 JNDI fournit des méthodes pour effectuer n’importe quelle opération standard sur un annuaire : associer des attributs à un objet ou chercher un objet par ses attributs.

 JNDI permet aux applications Java de bénéficier de toutes les informations d’annuaires comme LDAP, NDS, DNS et NIS (YP) et permet à Java de cohabiter avec des applications existantes.

 Enregistrement dynamique de services et de clients

 Traitement point à point

(52)

Système de fichiers

Architecture JNDI

Application Java API JNDI

Gestionnaire de nommages et d’annuaire JNDI SPI

SPI Système de fichiers

SPI nommage

CORBA SPI LDAP SPI RMI Autres SPI

Système de

fichiers Services

LDAP

Services CosNaming RMI

CORBA

Autres services

(DNS, NDS,

NIS…)

(53)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API JNDI

 import javax.naming.* ;

 import javax.naming.directiry.* ;

 import javax.naming.event.* ;

 import javax.naming.ldap.* ;

 import javax.naming.spi.* ;

(54)

Programmation

import javax.naming.InitialContext;

import javax.rmi.PortableRemoteObject;

class ClientDe {

// Crée une instance EJB “dé” sur le serveur EJB et appelle ensuite la méthode lancer () // et enfin affiche le résultat du lancé de dé

public static void main (String[] args) {

try {

InitialContext jndiContext = new InitialContext ();

ref = jndiContext.lookup (“jeux/De");

DeHome home= (EnsDe) PortableRemoteObject.narrow (ref, DeHome.class);

De de = home.create () ; // Crée un objet De depuis l’interface EnsCalculateur System.out.println (de.lancer (0.2, 1000, “vert”));

}

catch (Exception e) {

System.out.println(e.toString());

}

(55)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Java Message Service (JMS)

 JMS défini un mécanisme standard permettant aux composants d’envoyer et de recevoir des messages de façon asynchrone

 Fournit un service flexible et sûr pour l’échange

asynchrone de données et d’évènements commerciaux critiques à travers une entreprise

 L’API JMS y ajoute une API commune et un cadre de travail permettant le développement de messages

portables basés en Java

(56)

 Synchrone

 envoyé une fois, non garanti d’atteindre le serveur

 perdu si non reçu

 Asynchrone

 Envoyé jusqu’à acquittement

 Mise en file d’attente jusqu’à ce que le message

soit reçu

(57)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Client1 file Client2

d’attente

Client1 thème

Envoie message

Client2

Publie message

Consomme Acquitte

Souscrit Délivre

Client3 Souscrit

Délivre message

message

message

(58)

Cas d’utilisation de JMS

 Système faiblement couplé

 Sans connexion

 Supprime les dépendances entre le client et la plateforme serveur (langage de programmation, version)

 Publication souscription

 Envoie, reçoit des information avec un ou plusieurs clients non identifiés

 Intégration avec d’autres systèmes de messageries

 IBM MQ-Series

 Microsoft Message Queue

(59)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API JMS

 import javax.jms.* ;

(60)

Java Transaction Support/API (JTS/JTA)

 JTA et JTS permettent aux applications J2EE

d’affranchir le développeur de composant de la gestion des transactions

 Les développeurs peuvent définir les propriétés

transactionnelles des composants JavaBeans pendant la conception et le déploiement à l’aide d’états

déclaratifs dans le descripteur de déploiement.

 Le serveur d’applications prend la responsabilité de la

gestion des transactions

(61)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Exemple de déroulement de transaction

begin transaction ...

update table-a ...

if (condition-x) commit

transaction

else if (condition-y) update table-b commit

transaction else

rollback transaction begin transaction update table-c

commit transaction

(62)

API JTA

 import javax.transaction ;

 import javax.transaction.xa ;

(63)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Programmation JTA

import javax.transaction.UserTransaction ; [...]

public void withdrawCash(double amount) {

UserTransaction ut = context.getUserTransaction();

try {

ut.begin(); updateChecking(amount);

machineBalance -= amount; insertMachine(machineBalance);

ut.commit();

}

catch (Exception ex) {

try {

ut.rollback();

}

catch (SystemException syex) {

throw new EJBException ("Rollback failed: " + syex.getMessage());

}

throw new EJBException ("Transaction failed: " + ex.getMessage());

} } [...]

(64)

JavaMail

 JavaMail 1.2 définit un ensemble d’interface de classe permettant de construire des applications sur les

technologies de courrier électronique

 Gestion des standards de courrier

 SMTP : protocole de transport de courrier électronique

 POP : récupération du courrier sur serveur distant

 IMAP : gestion de boîtes aux lettres distantes

 MIME : standard de codage du contenu de courrier

permettant notamment l’attachement de documents de tout

format et l’utilisation de langues différentes

(65)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API JavaMail

 import javax.mail.* ;

 import javax.mail.event.* ;

 import javax.mail.internet.* ;

 import javax.mail.search.* ;

(66)

Programmation JavaMail

import javax.mail.*;

import javax.mail.internet.*;

import java.util.*;

public class SendEmail {

public String SendMessage(String emailto, String emailfrom, String smtphost, String emailmultipart, String msgSubject, String msgText)

{

String msgText2 = "multipart message";

boolean sendmultipart = Boolean.valueOf(emailmultipart).booleanValue();

// set the host

Properties props = new Properties();

props.put("mail.smtp.host", smtphost);

// create some properties and get the default Session

Session session = Session.getDefaultInstance(props, null);

try {

// create a message

Message msg = new MimeMessage(session);

// set the from

InternetAddress from = new InternetAddress(emailfrom);

msg.setFrom(from);

InternetAddress[] address = {

new InternetAddress(emailto)

if(!sendmultipart) {

// send a plain text message

msg.setContent(msgText, "text/plain");

} else {

// send a multipart message// create and fill the first message part

MimeBodyPart mbp1 = new MimeBodyPart();

mbp1.setContent(msgText, "text/plain");

// create and fill the second message part MimeBodyPart mbp2 = new MimeBodyPart();

mbp2.setContent(msgText2, "text/plain");

// create the Multipart and its parts to it Multipart mp = new MimeMultipart();

mp.addBodyPart(mbp1);

mp.addBodyPart(mbp2);

// add the Multipart to the message msg.setContent(mp);

}

Transport.send(msg);

}

catch(MessagingException mex) {

mex.printStackTrace();

}

(67)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Java Authentification and Authorization Service (JAAS)

 Authentification : déterminer qui exécute le code Java (application, applet, bean, servlet)

 Autorisation : vérifier si celui qui exécute le

programme a les permissions nécessaires pour le faire

 Modules d’authentification disponibles

 JNDI

 UNIX

 Windows NT

 Kerberos

 KeyStore

(68)

API JAAS

 import javax.security.auth ;

 import javax.security.auth.callback ;

 import javax.security.auth.login ;

 import javax.security.auth.spi ;

grant <signer(s) field>, <codeBase URL> <Principal field(s)

> {

permission perm_class_name "target_name", "action";

... permission perm_class_name "target_name", "action";

};

<Principal field> := Principal Principal_class "principal_name"

 import javax.security.* ;

Java.policy

(69)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Programmation JAAS (authentification)

import java.io.IOException;

import javax.security.auth.*;

import javax.security.auth.callback.*;

import javax.security.auth.login.*;

import javax.security.auth.spi.*;

public class SampleLoginModule implements LoginModule {

public boolean abort () {

// Method to abort the authentication process (phase 2).

}

public boolean commit() {

// Method to commit the authentication process (phase 2).

}

public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { // Initialize this LoginModule.

}

public boolean login() {

// Method to authenticate a Subject (phase 1).

}

public boolean logout() {

// Method which logs out a Subject.

}

}

grant codebase "file:SampleLoginModule.jar" {

permission javax.security.auth.AuthPermission "modifyPrincipals";

};

(70)

Programmation JAAS (autorisation)

import java.io.File;

import java.security.PrivilegedAction;

public class SampleAction implements PrivilegedAction { public Object run() {

System.out.println("\nYour java.home property value is: " + System.getProperty ("java.home"));

System.out.println("\nYour user.home property value is: " + System.getProperty ("user.home"));

File f = new File("foo.txt");

System.out.print("\nfoo.txt does ");

if (!f.exists())

System.out.print("not ");

System.out.println("exist in the current working directory.");

return null; } }

grant codebase "file:./SampleAction.jar", Principal sample.principal.SamplePrincipal "testUser" {

}

permission java.util.PropertyPermission "java.home", "read";

permission java.util.PropertyPermission "user.home", "read";

(71)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Java API for XML Processing (JAXP)

 SAX : gestion de flux d’événements XML

 DOM : structure de document XML en mémoire sous forme d’arbre

 XSLT : présentation de documents XML

d’après des feuilles de style XSL

(72)

XML – SAX -DOM

(73)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

API XML

 import javax.xml.parsers ;

 import javax.xml.transform ;

 import javax.xml.transform.dom ;

 import javax.xml.transform.sax ;

 import javax.xml.transform.stream ;

 import org.xml.sax ;

 import org.xml.sax.ext ;

 import org.xml.sax.helpers ;

 import org.w3c.dom ;

 import org.w3c.dom.html ;

 import org.w3c.dom.range ;

 import org.w3c.dom.traversal ;

(74)

Java pour XML

 JAXP : Java API for XML Parsing

 assure interface avec analyseur de documents produisant des formats DOM ou SAX

 JAXB : Java Architecture for XML Binding

 permet de construire des documents XML à partir d’objets Java et vice versa

 JAXM : Java API for XML Messenging

 permet l’échange de messages XML avec des plateformes distantes en synchrone ou asynchrone

 JAXR : Java API for XML Registries

 interface d’accès aux annuaires de services applicatifs

(75)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Plan

 Architectures multi-tiers : architecture 1, 2, 3- tiers

 J2EE : architecture générale

 Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc.

 Outils de développement et d’intégration

 Produits existants

 Conclusion

Outils de développement et d’intégration

(76)

J2EE SDK

 J2EE SDK est une définition opérationnelle de la plateforme J2EE

 Fait par Sun Microsystem pour les démonstrations, les prototypes et les applications non-commerciales

 Contient :

 J2EE Application Server

 Serveur Web

 Base de données relationnelles

 API J2EE

 un kit de développement et de déploiement

 But : permettre aux développeurs d’exécuter leurs

(77)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Déploiement J2EE

 JAR – Java ARchive

 Fichier classe Java

 EJB

 WAR - Web ARchive

 Servlets

 JSP

 EAR - Enterprise ARchive

 Contient des JARs et WARs pour former une application complète

 Descripteurs de déploiement

 XML

(78)

Plan

 Architectures multi-tiers : architecture 1, 2, 3- tiers

 J2EE : architecture générale

 Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc.

 Outils de développement et d’intégration

 Produits existants

 Conclusion

Produits existants

(79)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Serveurs J2EE

 Apache Tomcat, http://jakarta.apache.org/

 BEA WebLogic, http://www.bea.com/

 IBM WebSphere

 Sun iPlanet Application Server http://java.sun.com/

 Oracle Application Server http://www.oracle.com

 Caucho Resin, http://www.caucho.com/

 Allaire JRun, http://www.allaire.com/

 Orion, http://www.orionserver.com/

 SilverStream Application Server

(80)

Plan

 Architectures multi-tiers : architecture 1, 2, 3- tiers

 J2EE : architecture générale

 Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc.

 Outils de développement et d’intégration

 Produits existants

 Conclusion

Conclusion

(81)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Exemple d’application en entreprise

Servlet de fiches

JDBC

JSP SGBD

soumission d’une fiche

de renseignement

insertion de la fiche

génération de page d’erreur

Message

d’erreur Insertion

Vérification des données

Construction de

la requête d’insertion

(82)

Exemple d’application en entreprise

Client

Navigateur

Compsants graphiques

fichier HTML Requête HTTP

S er ve ur W eb

Servlet JSP EJB

Bean Session

Bean Entité Bean Session

Bean Entité

Base de données Mainframe JDBC

S er ve ur d’ ap pli cat io ns S er ve ur s de d on ne

(83)

Tuyêt Trâm DANG NGOC - Université de Versailles jeudi 4 novembre 2004

Exemple d’application en entreprise

recupérer classes

Servlet de classes

EJB Classes

JSP JMS

récupérer classes

présentation liste de classes

Listes de classes

EIS

voir

notifica tions

pas de notifica tions

récupérer classes

renvoie classes renvoie

classes

(84)

Architecture sécurisée (JCA)

 Service de cryptographie

 Interface et classe de certificat

 Classe et interface de

gestion de clef

Références

Documents relatifs

Pour calculer la valeur d’une fonction f d´efinie par une expression pour une valeur donn´ee de l’ensemble de d´efinition A, il faut remplacer dans l’expression la variable par

En consid´erant que la liste la plus simple est la liste vide (not´ee [ ]), qui ne contient aucun ´el´ement, on peut donner une d´efinition r´ecursive aux listes

Nous donnons l’´etat de la machine apr`es ex´ecution de chacune des instructions du programme, autrement dit, l’´etat des entr´ees, l’´etat des sorties, et de la m´emoire

Dans ce cas l’exception n’est pas rattrap´ee dans le corps et comme elle n’est ni dans la cat´egorie Error ni dans la cat´egorie RuntimeException, on la d´eclare comme

Q1 Cr´eer une classe ex2.CustomSlider qui permet de choisir un entier `a l’aide d’une classe JSlider et affiche la valeur dans un JTextField, comme illustr´e ci-dessous. Q2 On

Le JDK 1.5 intègre de nouvelles fonctionnalités, c’est donc pour cela que la version J2EE 5 les utilisera afin d’avoir une plateforme bien plus abordable que la précédente

JTA/JTS (Java Transaction API/Java Transaction Services) est un API définissant des interfaces standard avec un gestionnaire de transactions. JCA (J2EE Connector Architecture) est

 Avec J2EE, Sun essaie de faire de Java un langage à part entière, mais surtout une plate-forme viable de développement dans le cadre de l ’entreprise..  J2EE n’est pas