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
Java 1.0.2 Java 1.1.1 , 1.1.2, 1.1.3, 1.1.8 Java 1.2.2

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

Comment crer un thread ?


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

Par implmentation de l'interface Runnable


class MonThread implements Runnable { // constructeur MonThread (...) { [...] } // methode run a implementer public void run() { [...] } }
mercredi 29 janvier 2014

Communication sur IP

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

URL

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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)

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


variable)
Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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);
mercredi 29 janvier 2014

Tuyt Trm DANG NGOC - Universit de Versailles

Architecture J2EE

Cours CNAM, le 26 novembre 2003

Plan
Architectures Architectures multi-tiers multi-tiers : architecture : architecture 1, 2, 1,32, 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 mercredi 29 janvier 2014

Architecture 1-tiers
Navigateur

Prsentation Serveur Web Traitement donnes Systme de fichiers


Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

Architecture 2-tiers
Navigateur

Prsentation Serveur Web Traitement

donnes Base de donnes


Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

Base de donnes

Architecture 3-tiers

+Dimensionnement +Maintenance +Fiabilit +Disponibilit +Extensibilit +Gestion du


dveloppement

Navigateur

Prsentation Traitement

Serveur Web Serveur dapplications

- complexit
Tuyt Trm DANG NGOC - Universit de Versailles

donnes Base de donnes


mercredi 29 janvier 2014

Base de donnes

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

Services dclaratifs

Composant dapplication Descripteur de dploiement Composant dapplication Descripteur de dploiement Composant dapplication Descripteur de dploiement Composant dapplication Descripteur de dploiement

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

API services du container

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

Tuyt Trm DANG NGOC - Universit de Versailles

Services additionnels fournis par le container et qui sont gnralement requis par toutes les mercredi 29 applications janvier 2014 du container

Intgration J2EE

Container J2EE Web Base de donnes


JDBC

Rpertoire
LDAP

Pages JSP
IIOP-RMI

HTTP

Navigateur

Servlets

Container J2EE EJB


Enterprise Bean Enterprise Bean

JCA

ERP
Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

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. etc JMS, JAAS, JAXP, JavaMail, JNDI, Outils de dveloppement et dintgration Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

Composants J2EE
Transaction JavaBeans Outils Applet JavaBeans EJB JSP Servlet Web

Messagerie

Guide de programmation
Mail

BluePrint Connecteurs XML JTA/JTS JMS JavaMail

Container J2EE

Java 2 SDK Edition standard


JavaIDL, RMI-IIOP Scurit JAAS JDBC JNDI JAXP

CORBA Tuyt Trm DANG NGOC - Universit de Versailles

Base de Nommage donnes mercredi 29 janvier 2014& Rpertoire

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

Cycle de vie dune servlet


init() : initialisation de la servlet Chargement Code Serveur chargement du code. Servlet Souvent effectu lors de la premire requte cliente (doGet, doPost) Allocation dun pool de threads Serveur Client doGet () : Traitement des requtes Traitement HTTP GET Code des requtes doPut () :Traitement des requtes Servlet clientes Client HTTP PUT par thread doPost () :Traitement des requtes HTTP POST Code Serveur destroy () : destruction de la servlet Servlet par le serveur Dchargement
Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

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

Servlet

Requte

Service( req,rep)

Rponse

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

API Servlet

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

API JSP

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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> Tuyt Trm DANG NGOC - Universit de Versailles </html> mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

API EJB

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

API JAF

import javax.activation.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

SGBD Interface serveur SGBD

Java Application JDBC API JDBC Type 4

SGBD Interface serveur SGBD

Interface client SGBD

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

API JDBC

import java.sql.*;

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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


mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

Client
refrence objet

Serveur
objet

ORB

ORB

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

// 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

mercredi 29 janvier 2014

// 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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

Systme Systme dede fichiers fichiers

CosNaming CORBA

Services LDAP

Services RMI

Autres services (DNS, NDS, NIS)

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

message message Client1 Envoie file dattente Consomme Client2 Acquitte

Souscrit

message thme Client1 Publie

Dlivre message
Souscrit

Client2

Tuyt Trm DANG NGOC - Universit de Versailles

Dlivre message
mercredi 29 janvier 2014

Client3

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 mercredi 29 janvier 2014

API JMS

import javax.jms.* ;

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

API JTA

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

API JavaMail

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

Programmation JavaMail
import javax.mail.*; import javax.mail.internet.*; import java.util.*; 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; } }

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

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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"; }; Java.policy <Principal field> := Principal Principal_class "principal_name"

import javax.security.* ;
Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

XML SAX -DOM

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014 XML

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 dveloppement dintgration Outils de etet dintgration Produits existants Conclusion
Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

mercredi 29 janvier 2014

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 mercredi 29 janvier 2014

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

Message derreur gnration de page derreur JSP

Insertion

SGBD

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

Exemple dapplication en entreprise


Serveur Web Serveur dapplications
Client
Navigateur
Compsants graphiques

Requte HTTP

Servlet JSP EJB


Bean Session

fichier HTML

Bean Session Bean Entit

Bean Entit

JDBC Base de donnes relationnelles


Tuyt Trm DANG NGOC - Universit de Versailles mercredi 29 janvier 2014

Serveurs de donnes

Mainframe

Exemple dapplication en entreprise


rcuprer classes recuprer classes Servlet de classes Listes de classes prsentation liste de classes JSP EJB Classes rcuprer classes

EIS renvoie classes pas de notifica tions

renvoie classes voir notifica tions

JMS

Tuyt Trm DANG NGOC - Universit de Versailles

mercredi 29 janvier 2014

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

mercredi 29 janvier 2014