Vous êtes sur la page 1sur 93

Java avanc

Tuyt Trm DANG NGOC


Laboratoire PRiSM Universit de Versailles-Saint-Quentin
<dntt@prism.uvsq.fr>
Cours CNAM, le 26 novembre 2003

Evolution de Java
Personal Java 1.0 / 1.1 / 1.2
Java2 SDK SE 1.3.0, 1.3.1, 1.4.0
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

OAK

JDK1.0

JDK 1.1

Java2 SDK EE 1.2.1

Java2 SDK EE 1.3.0

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

Plateforme Java Java embarqu


Tuyt Trm DANG NGOC - Universit de Versailles

Java2 SDK ME (Micro Edition)

Pour tlphones cellulaires PDA, JINI, JIRO **

Plateforme Java2
Java1.0.2 Java 1.0.2 Java1.1.1 , ,1.1.2, 1.1.3, 1.1.8 Java 1.1.1 1.1.2, 1.1.3, 1.1.8 Java1.2.2 Java 1.2.2

jeudi 16 juin 2011

Threads
Un thread -appel parfois processus lger - est un unique flux de contrle squentiel dun programme. On peut utiliser les threads afin disoler des tches.
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Vie et mort d'un thread

1. on cre le thread new; 2. on le dmarre start; 3. le thread sexcute alors, et reste vivant jusqu la fin de son code excution, ou jusqu ce que ses mthodes stop ou destroy soient invoques ; 4. durant son excution, le processus peux tre bloqu ou excutable.
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Inactivit d'un thread


Un thread est bloqu (Not Runnable), dans les cas suivants : 1. sa mthode sleep a t invoque ; 2. le thread a appel la mthode wait afin dattendre la ralisation dun certain vnement ; 3. le thread est en attente dune entre/sortie. Suivant la cause de bloquage du thread, sa remise en activit peut-tre : 1. si un thread a t mis en sommeil, alors, le nombre de millisecondes demandes devra tre coul ; 2. si un thread attend une condition, alors, un autre objet doit lavertir du changement de la condition notify ou notifyAll ; 3. si un thread est bloqu en attente dune entre/sortie alors il faut attendre que cette entre/sortie se libre.
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Comment crer un thread ?


Par drivation de la classe Thread Par drivation de la classe Thread
class MonThread extends Thread class MonThread extends Thread {{ // constructeur // constructeur MonThread (...) MonThread (...) {{ [...] [...] }} // methode run a surcharger // methode run a surcharger public void run() public void run() {{ [...] [...] }} }}
Tuyt Trm DANG NGOC - Universit de Versailles

Par implmentation de l'interface Runnable Par implmentation de l'interface Runnable


class MonThread implements Runnable class MonThread implements Runnable {{ // constructeur // constructeur MonThread (...) MonThread (...) {{ [...] [...] }} // methode run a implementer // methode run a implementer public void run() public void run() {{ [...] [...] }} }}
jeudi 16 juin 2011

Communication sur IP

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Adresses IP / adresses DNS


Une adresse IP rfrence de manire logique et unique sur lInternet, linterface dune machine. Des mcanismes de rsolution dadresse permettent de convertir les adresses IP en adresses DNS et vice-versa.

Adresse IP Adresse DNS 216.239.59.99 www.google.fr 192.93.0.1 ns1.nic.fr


Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Ports
Le mcanisme de port est utilis afin de pouvoir permettre de grer plusieurs services simultans depuis une seule interface rseau.

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Classes utilises pour la communication


Les classes orientes communication se trouvent dans le paquetage java.net. Les programmes Java peuvent utiliser TCP ou UDP afin de communiquer sur lInternet. classe de manipulation dadresses InetAddress Les classes utilises spcifiquement pour TCP : URL,URLConnection, Socket , ServerSocket ; Les classes utilises spcifiquement pour UDP : DatagramPacket , DatagramSocket , MulticastSocket.
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

URL

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Beans Coding Convention (1/2)


Convention pour les commentaires Convention de nommage
class et interface (pas d'underscore, majuscule au dbut de chaque mot) mthode (minuscule au dbut, majuscule au dbut de chaque mot) variable (d'instance prfix par 'i', de classe par 'c', de paramtre par 'a', temporaire
sans, constante tout en capitale)

paquetage (tout en minuscule, dans le rpertoire associ)

Convention d'accs aux variables


rcuprer la valeur d'une variable d'instance (get suivi du nom de la
variable) variable)

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

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Beans Coding Convention (2/2)

Convention de constructeurs (avoir un constructeur par dfaut) Convention d'initialisation (utiliser les conventions de variables et les set) Convention d'importation (ne pas utiliser '*') Srialisation (doit implmenter l'interface Serializable) Convention d'vnement
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);
jeudi 16 juin 2011

Tuyt Trm DANG NGOC - Universit de Versailles

Architecture J2EE

Cours CNAM, le 26 novembre 2003

Plan Architectures multi-tiers : architecture 1, 2, 3Architectures multi-tiers : architecture 1, 2, 3-tiers tiers J2EE : architecture gnrale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de dveloppement et dintgration Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Architecture 1-tiers
Navigateur Prsentation Traitement donnes Systme de fichiers
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Serveur Web

Architecture 2-tiers
Navigateur Prsentation Serveur Web Traitement

donnes Base de donnes


Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Base de donnes

Architecture 3-tiers

+Dimensionnement +Maintenance +Fiabilit +Disponibilit +Extensibilit Gestion du +dveloppement - complexit


Tuyt Trm DANG NGOC - Universit de Versailles

Navigateur Prsentation Traitement Serveur Web Serveur dapplications Base de donnes

donnes Base de donnes


jeudi 16 juin 2011

Plan Architectures multi-tiers : architecture 1, 2, 3tiers J2EE::architecture gnrale J2EE architecture gnrale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de dveloppement et dintgration Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Quest ce que la plateforme J2EE ?


Environnement Java
langage objet simple portable robuste indpendant de larchitecture (code virtuel)

Pour serveurs dapplications rparties


ensemble de services ensemble de protocoles de communication

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Container J2EE Container J2EE : Environnement dexcution Java 2 permettant dhberger des composants applicatifs et de contrler leur excution. Il existe deux types de container :
Container J2EE Web : utiliss pour hberger des servlets ou des pages JSP Container J2EE EJB : supportant lexcution des composants EJB

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Interfaces de container
Un container offre des interfaces constituant le contrat de composant. Il gre :
des API de services : accs SGBD, annuaires, gestionnaire de transactions... des API de communication : protocole Internet, envois de messages ou de mail, accs des objets distants...

Composants dapplication :
Servlets, JSP, EJB.

Descripteurs de dploiement :
Fichier XML dcrivant le composant dapplication Inclut des informations additionnelles requises par le container pour grer les composants dapplication
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Container
Contrat Container
Un ensemble dAPI spcifis par le containair, que les applications doivent tendre ou implmenter

Autres services container

Compo Compo sant sant dapplic dapplic ation ation Descripteur Descripteur de dploiement de dploiement Compo Compo sant sant dapplic dapplic ation ation Descripteur Descripteur de dploiement de dploiement

Services dclaratifs

Compo Compo sant sant dapplic dapplic ation ation Descripteur Descripteur de dploiement de dploiement

Compo Compo sant sant dapplic dapplic ation ation Descripteur Descripteur de dploiement de dploiement

Dautres services relatifs la vie du composant : attente de ressources, ramasse-miette, etc.

API services du container

Tuyt Trm DANG NGOC - Universit de Versailles

Services additionnels fournis par le container et qui sont gnralement requis par toutes les applications du container jeudi 16 juin 2011

Services que le container interpose sur les applications, bass sur le descripteur de dploiement donn pour chaque composant dapplication

Intgration J2EE

Base de donnes

Rpertoi re
LDAP

Container J2EE Web Container J2EE Web Pag HTTP es Servlets JSP
IIOP-RMI

Navigate ur

JDBC

Container J2EE EJB Container J2EE EJB


Enterprise Bean Enterprise Bean Enterprise Bean Enterprise Bean
Tuyt Trm DANG NGOC - Universit de Versailles

JCA

ERP
jeudi 16 juin 2011

Plan Architectures multi-tiers : architecture 1, 2, 3tiers J2EE : architecture gnrale Composants J2EE : Servlets, JSP, EJB, JMS, Composants J2EE : Servlets, JSP, EJB, JAAS, JAXP, JavaMail, JNDI, etc. JMS, JAAS, JAXP, JavaMail, JNDI, etc Outils de dveloppement et dintgration Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Composants J2EE
Transaction JavaBeans Outils Web

Messagerie

Guide de programmation Mail

BluePrint

Applet JavaBeans

JMS Container J2EE Java 2 SDK Edition standard JavaIDL, RMI-IIOP JAAS JDBC

JavaMail

JNDI

JAXP XML

CORBA Tuyt Trm DANG NGOC - Universit de Versailles

Scurit

Base de Nommage donnes jeudi 16 juin 2011 & Rpertoire

Connecteurs

EJB

JSP Servlet

JTA/JTS

API pour J2EE


Java Servlet 2.3 : services web JSP 1.2 : prsentation des pages web EJB 2.0 : les beans JAF 1.0 : intgration des JavaBeans JDBC 2.0 : accs aux bases de donnes RMI-IIOP, RMI-JRMP, CORBA : accs et excution distants JNDI 1.2 : gestion de noms et dannuaire 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 scurit, authentification et droits daccs JAXP 1.1 : gestion de documents XML
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Java Servlet
programmation ct serveur permet dtendre les fonctionnalit du serveurs web gre le protocole HTTP construire des applications Web plus performantes que les CGI accde toutes les API des classes Java ax sur la gnration du contenu
les programmeurs ne se soucient pas de la prsentation

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Cycle de vie dune servlet


Cod init() : initialisation de la servlet Chargement e Serveur chargement du code. Serv Souvent effectu lors de la premire let requte cliente (doGet, doPost) Allocation dun pool de threads Serveur Client doGet () : Traitement des requtes Cod Traitement HTTP GET e des requtes doPut () :Traitement des requtes Serv clientes Client HTTP PUT let par thread doPost () :Traitement des requtes Cod HTTP POST e Serveur destroy () : destruction de la servlet Serv par le serveur let Dchargement
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

GET /home.html HTTP/1.0 User-Agent: Mozilla/4.0 Accept: image/gif, image/jpeg, text/*, */*

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

<head>

HTTP 1.0

Requte

Servlet Service( req,rep)

Rponse

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API Servlet

import javax.servlet.*; import javax.servlet.http.*;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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 { // Rcupre le flux dcriture pour la rponse PrintWriter out = reponse.getWriter () ; // Prpare la rponse reponse.setContentType ("text/html"); // Rcupre ladresse 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>") ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Server Page (JSP)


Sparation entre la prsentation et le contenu des pages web Encapsul dans des pages HTML Cration de contenu dynamique Situ ct serveur Ax sur la prsentation des donnes
Les webmasters ne se soucient pas de la programmation

Semblable HTML ou XML


bas sur des balises

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Directives
Balise de dclaration Balise daffichage Balise de scriplet Balise de directive Balise daction <%! ... %> <%= ... %> <% ... %> <%@ ... %> <jsp : ... />

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JSP

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

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Programmation JSP
<html> <!-- Copyright (c) 1999 The Apache Software Foundation. All rights reserved.--> <body bgcolor="white"> <! fixer les paramtres de la page <%@ page language = JAVA session = false %> <! dclarer une variable caractre <% 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> anne <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>

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Enterprise Java Beans (EJB)


Modle client/serveur distribu Code excut sur le serveur
proche des donnes 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 dun fichier XML. Les classes Java suivent un certains nombre de rgles et fournissent des callbacks comme dfinis dans lenvironnement J2EE et les spcifications EJB.
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Container EJB
Un container EJB est un environnement dexcution pour un composant EJB. Un EJB sexcute sur un container EJB. Un container EJB sexcute par un serveur dapplications et prend la responsabilit des problmes au niveau systme Le container EJB gre le cycle de vie de lEJB. Le container EJB fournit aussi un nombre de services additionnels Gestion de la persistance Transactions Scurit Cadre de travail pour Business Logic Dimensionnement Portabilit Gestion des erreurs
Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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.

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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 limite

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Structure EJB
Interface home
fournit un moyen pour le client EJB de rcuprer une instance dun EJB

Interface distante
expose les mthodes que le client EJB peut utiliser

Code EJB
implmente linterface distante et linterface EJB appropri (SessionBean ou EntityBean par exemple)

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API EJB

import javax.ejb.* ; import javax.ejb.spi.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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; }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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(){} }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

JavaBeans Activation Framework (JAF) Les services dactivation sont des composants fondamentaux utiliss pour activer automatiquement des objets en mmoire ltat dormant suivant une requte cliente JAF est un cadre de travail pour construire des applications qui peuvent activer automatiquement des objets pouvant manipuler des donnes reues dans un flux dentre
Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JAF

import javax.activation.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Data Base Connectivity (JDBC) JDBC permet aux applications daccder des SGBD relationnels et de manipuler des donnes provenant de ces bases API Java Calqu sur ODBC de Microsoft Implmente le standard CLI de lX/OPEN

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Pilotes JDBC
Type 1 : Pont JDBC-ODBC fournit un accs JDBC API par lintermdiaire dun ou plusieurs pilotes ODBC. Type 2 : A native-API partly Java technology-enabled driver convertit les appels JDBC en un applet sur lAPI 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 indpendant 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
Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

indpendant du constructeur
Java Application SGBD Interface serveur SGBD

dpendant du constructeur
Java Application JDBC API JDBC Type 2 Interface SGBD Client SGBD Interface serveur SGBD

natif ct client

JDBC API JDBC Type 1 Client natif ODBC Interface SGBD Client

Ecoute distante

Java Application JDBC API JDBC Type 3

Ecouteur SGBD Interface client SGBD

SGBD Interface serveur SGBD

Java Application JDBC API JDBC Type 4

SGBD Interface serveur SGBD

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JDBC

import java.sql.*;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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 dune 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 () ; }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

RMI-IIOP, RMI-JRMP, CORBA


RMI et CORBA sont des architectures complexes permettant dinvoquer un objet distant gr par une autre machine virtuelle comme sil tait local.
CORBA : gnrique langage objets RMI : spcifique Java

GIOP RMI IIOP TCP/IP

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Remote method Invocation (RMI)


Objet distant localis par lAPI JNDI Registre associe au nom objet une rfrence stub reprsente linterface sur le client. Agit comme proxy de lobjet distant squelette (skeleton) sur le serveur pour recevoir les messages et invoquer lobjet serveur Gnration de stub et skeleton laide de rmic
Tuyt Trm DANG NGOC - Universit de Versailles

client RMI Interface RMI Stub RMI

serveur RMI Squelette RMI

Couche de rfrence distante Couche transport RMI TCP/IP


jeudi 16 juin 2011

Common Object Request Broker Architecture

(CORBA)
GIOP (General Inter-ORB Protocol) : Le protocole de plus haut-niveau de communication CORBA qui convertit des messages crs par les stubs en format transport-message capable de communiquer entre les implmentations ORB (Object Request Broker). IIOP (Internet Inter-ORB Protocol) : Le protocole de plus bas niveau utilis par CORBA ;cest une couche transport dcrivant comment les messages GIOP sont transmis au dssus de TCP/IP.

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Architecture CORBA
Portable Object Adapter (POA) Object Request Broker (ORB )

Client

refre refre nce nce objet objet

Serveur
ob ob jet jet

ORB

ORB

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API CORBA, RMI

import javax.rmi.* ; import javax.rmi.CORBA ; import org.omg.CORBA.* ; // RMI-IIOP, IDL import org.omg.CosNaming.* ; // RMI-IIOP, IDL

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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 + " !" ;} }
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

// Enregistre lobjet 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'") ; } }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

// 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 + ".") ; } }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Naming and Directory Interface (JNDI)


JNDI permet daccder de nombreux services de noms et dannuaire. En utilisant JNDI, un objet Java peut stocker et rcuprer des objets de nimporte quel type JNDI fournit des mthodes pour effectuer nimporte quelle opration standard sur un annuaire : associer des attributs un objet ou chercher un objet par ses attributs. JNDI permet aux applications Java de bnficier de toutes les informations dannuaires 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

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Architecture JNDI
Application Java API JNDI Gestionnaire de nommages et dannuaire JNDI SPI
SPI Systme de fichiers Systme Systme de Systme dede fichiers fichiers fichiers SPI nommage CORBA CosNaming CosNaming CORBA CORBA SPI LDAP SPI RMI Autres SPI

Services Services LDAP LDAP

Services Services RMI RMI

Autres services Autres services (DNS, NDS, (DNS, NDS, NIS) NIS)

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JNDI

import javax.naming.* ; import javax.naming.directiry.* ; import javax.naming.event.* ; import javax.naming.ldap.* ; import javax.naming.spi.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Programmation
import javax.naming.InitialContext; import javax.rmi.PortableRemoteObject; class ClientDe { // Cre une instance EJB d sur le serveur EJB et appelle ensuite la mthode lancer () // et enfin affiche le rsultat 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 () ; // Cre un objet De depuis linterface EnsCalculateur System.out.println (de.lancer (0.2, 1000, vert)); } catch (Exception e) { System.out.println(e.toString()); } } }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Message Service (JMS)


JMS dfini un mcanisme standard permettant aux composants denvoyer et de recevoir des messages de faon asynchrone Fournit un service flexible et sr pour lchange asynchrone de donnes et dvnements commerciaux critiques travers une entreprise LAPI JMS y ajoute une API commune et un cadre de travail permettant le dveloppement de messages portables bass en Java

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Synchrone
envoy une fois, non garanti datteindre le serveur perdu si non reu

Asynchrone
Envoy jusqu acquittement Mise en file dattente jusqu ce que le message soit reu

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

message message Client 1 Envoie file dattente Consomme Acquitte Client 2

Souscrit Dlivre message thme Souscrit Dlivre message

Client 2

message Client 1 Publie

Client 3

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Cas dutilisation de JMS


Systme faiblement coupl
Sans connexion Supprime les dpendances entre le client et la plateforme serveur (langage de programmation, version)

Publication souscription
Envoie, reoit des information avec un ou plusieurs clients non identifis

Intgration avec dautres systmes de messageries


IBM MQ-Series Microsoft Message Queue
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

API JMS

import javax.jms.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Transaction Support/API (JTS/JTA)


JTA et JTS permettent aux applications J2EE daffranchir le dveloppeur de composant de la gestion des transactions Les dveloppeurs peuvent dfinir les proprits transactionnelles des composants JavaBeans pendant la conception et le dploiement laide dtats dclaratifs dans le descripteur de dploiement. Le serveur dapplications prend la responsabilit de la gestion des transactions

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Exemple de droulement 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

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JTA

import javax.transaction ; import javax.transaction.xa ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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()); } } [...] Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

JavaMail
JavaMail 1.2 dfinit un ensemble dinterface 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 : rcupration du courrier sur serveur distant IMAP : gestion de botes aux lettres distantes MIME : standard de codage du contenu de courrier permettant notamment lattachement de documents de tout format et lutilisation de langues diffrentes
Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JavaMail

import javax.mail.* ; import javax.mail.event.* ; import javax.mail.internet.* ; import javax.mail.search.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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) }; msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject(msgSubject);

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(); } return "Email envoy " + emailto; } }

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Java Authentification and Authorization Service (JAAS)


Authentification : dterminer qui excute le code Java (application, applet, bean, servlet) Autorisation : vrifier si celui qui excute le programme a les permissions ncessaires pour le faire Modules dauthentification disponibles
JNDI UNIX Windows NT Kerberos KeyStore

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

API JAAS
import javax.security.auth ; import javax.security.auth.callback ; import javax.security.auth.login ; import javax.security.auth.spi ;

import javax.security.* ;

grant <signer(s) field>, <codeBase URL> <Principal field(s)> { permission perm_class_name "target_name", "action"; ... permission perm_class_name "target_name", "action"; };

Java.policy <Principal field> := Principal Principal_class "principal_name"

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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"; }; Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

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"; permission java.io.FilePermission "foo.txt", "read"; }; Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Java API for XML Processing (JAXP) SAX : gestion de flux dvnements XML DOM : structure de document XML en mmoire sous forme darbre XSLT : prsentation de documents XML daprs des feuilles de style XSL

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

XML SAX -DOM

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

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 ;
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

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 dobjets Java et vice versa

JAXM : Java API for XML Messenging


permet lchange de messages XML avec des plateformes distantes en synchrone ou asynchrone

JAXR : Java API for XML Registries


interface daccs aux annuaires de services applicatifs

JAX-RPC : JAVA API for XML-based RPC


Tuyt Trm DANG NGOC - Universit de Versailles

appels des procdures distance avec XML jeudi 16 juin 2011

Plan Architectures multi-tiers : architecture 1, 2, 3tiers J2EE : architecture gnrale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de dveloppement etet dintgration Outils de dveloppement dintgration Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

J2EE SDK
J2EE SDK est une dfinition oprationnelle de la plateforme J2EE Fait par Sun Microsystem pour les dmonstrations, les prototypes et les applications non-commerciales Contient :
J2EE Application Server Serveur Web Base de donnes relationnelles API J2EE un kit de dveloppement et de dploiement

But : permettre aux dveloppeurs dexcuter leurs applications J2EE et vrifier leur compatibilit
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Dploiement 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 complte

Descripteurs de dploiement
XML
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Plan Architectures multi-tiers : architecture 1, 2, 3tiers J2EE : architecture gnrale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de dveloppement et dintgration Produits existants Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

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
Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011

Plan Architectures multi-tiers : architecture 1, 2, 3tiers J2EE : architecture gnrale Composants J2EE : Servlets, JSP, EJB, JMS, JAAS, JAXP, JavaMail, JNDI, etc. Outils de dveloppement et dintgration Produits existants Conclusion Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Exemple dapplication en entreprise


soumission dune fiche de renseignement Vrification des donnes Servlet de fiches Construction de la requte dinsertion JDBC

insertion de la fiche

gnration de page derreur JSP


Tuyt Trm DANG NGOC - Universit de Versailles

Message derreur

Insertion

SGBD

jeudi 16 juin 2011

Exemple dapplication en entreprise


Serveur Web Serveur dapplications
Client
Navigateur
Compsants Compsants graphiques graphiques

Requte HTTP

fichier HTML

Serv Serv let let JSP JSP EJB


Bean Bean Session Session Bean Bean Session Session Bean Bean Entit Bean Entit Bean Entit Entit

JDBC Base de donnes relationnelles


Tuyt Trm DANG NGOC - Universit de Versailles jeudi 16 juin 2011

Serveurs de donnes

Mainframe

Exemple dapplication en entreprise


rcuprer classes Servlet de classes Listes de classes prsentation liste de classes JSP
Tuyt Trm DANG NGOC - Universit de Versailles

recuprer classes

rcuprer classes EJB Classes EIS renvoie classes pas de notifica tions

renvoie classes voir notifica tions

JMS

jeudi 16 juin 2011

Architecture scurise (JCA)


Service de cryptographie Interface et classe de certificat Classe et interface de gestion de clef

Tuyt Trm DANG NGOC - Universit de Versailles

jeudi 16 juin 2011