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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
•Java 1.1.1 , 1.1.2, 1.1.3, 1.1.8
•Java 1.2.2
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Threads
Un thread -appelé
parfois processus
léger - est un
unique flux de
contrôle
séquentiel d’un
programme.
On peut utiliser
les threads afin
d’isoler des
tâches.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
1. on crée le thread – new;
2. on le démarre – start;
3. le thread s’exécute alors, et reste vivant jusqu’à la fin de son code
exécution, ou jusqu’à ce que ses méthodes stop ou destroy soient
invoquées ;
4. durant son exécution, le processus peux être bloqué ou exécutable.
Vie et mort d'un thread
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Inactivité d'un thread
Un thread est bloqué (Not Runnable), dans les cas suivants :
1. sa méthode sleep a été invoquée ;
2. le thread a appelé la méthode wait afin d’attendre la réalisation d’un
certain évènement ;
3. le thread est en attente d’une entrée/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 l’avertir
du changement de la condition – notify ou notifyAll ;
3. si un thread est bloqué en attente d’une entrée/sortie alors il faut
attendre que cette entrée/sortie se libère.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Comment créer un thread ?
class MonThread extends Thread
{
// constructeur
MonThread (...)
{
[...]
}
// methode ’run’ a surcharger
public void run()
{
[...]
}
}
class MonThread implements Runnable
{
// constructeur
MonThread (...)
{
[...]
}
// methode ’run’ a implementer
public void run()
{
[...]
}
}
Par dérivation de la classe Thread Par implémentation de l'interface Runnable
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Communication sur IP
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Adresses IP / adresses DNS
Une adresse IP référence de
manière logique et unique
sur l’Internet, l’interface
d’une machine.
Des mécanismes de
résolution d’adresse
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Ports
Le mécanisme de
port est utilisé afin
de pouvoir
permettre de gérer
plusieurs services
simultanés depuis
une seule interface
réseau.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Classes utilisées pour la communication
Les classes orientées communication se trouvent
dans le paquetage java.net.
Les programmes Java peuvent utiliser TCP ou UDP
afin de communiquer sur l’Internet.
classe de manipulation d’adresses InetAddress
Les classes utilises spcifiquement pour TCP :
URL,URLConnection, Socket , ServerSocket ;
Les classes utilises spécifiquement pour UDP :
DatagramPacket , DatagramSocket ,
MulticastSocket.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
URL
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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)
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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);
Architecture J2EE
Cours CNAM, le 26 novembre 2003
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Architecture 1-tiers
Présentation
Traitement
données
Navigateur
Serveur Web
Système
de
fichiers
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Architecture 2-tiers
Présentation
Traitement
données
Navigateur
Serveur Web
Base de
données
Base de
données
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Container
Contrat Container
Descripteur
de déploiement
Composant
d’application
Services
déclaratifs
API services du container
Autres
services
container
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
fournis par le container et
qui sont généralement
requis par toutes les
applications du container
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,
ramasse-miette, etc.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Composants J2EE
Outils
Applet
JavaBeans
JavaIDL, RMI-IIOP JAAS JDBC JNDI JAXP
EJB JSP Servlet JTA/JTS
JavaMail
JMS
Connecteurs
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
JAXP 1.1 : gestion de documents XML
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Cycle de vie d’une servlet
Code
Servlet
Serveur
Chargement
Code
Servlet
Serveur
Déchargement
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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)
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API Servlet
import javax.servlet.*;
import javax.servlet.http.*;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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>") ;
}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Directives
Balise de déclaration <%! ... %>
Balise d’affichage <%= ... %>
Balise de scriplet <% ... %>
Balise de directive <%@ ... %>
Balise d’action <jsp : ... />
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JSP
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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>
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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)
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API EJB
import javax.ejb.* ;
import javax.ejb.spi.* ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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;
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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(){…}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JAF
import javax.activation.* ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
natif
côté
client
Ecoute
distante
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JDBC
import java.sql.*;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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 () ;
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
skeleton à l’aide de rmic
Couche de référence distante
Couche transport RMI
TCP/IP
Interface
RMI
Stub RMI
Squelette
RMI
client
RMI
serveur
RMI
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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.
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Architecture CORBA
Portable Object Adapter
(POA)
Object Request Broker
(ORB )
Client
reférence
objet objet
Serveur
ORB ORB
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API CORBA, RMI
import javax.rmi.* ;
import javax.rmi.CORBA ;
import org.omg.CORBA.* ; // RMI-IIOP, IDL
import org.omg.CosNaming.* ; // RMI-IIOP, IDL
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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 + " !" ;}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
// 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'") ;
}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
// 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 + ".") ;
}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
RMI
CosNaming
CORBA
Autres services
(DNS, NDS,
NIS…)
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JNDI
import javax.naming.* ;
import javax.naming.directiry.* ;
import javax.naming.event.* ;
import javax.naming.ldap.* ;
import javax.naming.spi.* ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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());
}
}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Client1 Client2
file
d’attente
Client1
thème
Envoie
message
Client2
Publie
message
Consomme
Acquitte
Souscrit
Délivre
Client3
Souscrit
Délivre
message
message
message
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JMS
import javax.jms.* ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JTA
import javax.transaction ;
import javax.transaction.xa ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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());
}
}
[...]
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
API JavaMail
import javax.mail.* ;
import javax.mail.event.* ;
import javax.mail.internet.* ;
import javax.mail.search.* ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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;
}
}
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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";
};
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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";
};
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
XML – SAX -DOM
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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 ;
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
JAX-RPC : JAVA API for XML-based RPC
appels à des procédures à distance avec XML
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
applications J2EE et vérifier leur compatibilité
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Exemple d’application en entreprise
Client
Navigateur
Compsants
graphiques
fichier HTML
Requête HTTP
Serveur
Web
Servlet
JSP
EJB
Bean Session
Bean
Entité
Bean Session
Bean
Entité
Base de données
relationnelles
Mainframe
JDBC
Serveur
d’applications
Serveurs
de
donnes
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
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
Tuyêt Trâm DANG NGOC - Université de Versailles dimanche 26 janvier 2025
Architecture sécurisée (JCA)
Service de
cryptographie
Interface et classe de
certificat
Classe et interface de
gestion de clef

rferfergergergergergergergergergergergerger

  • 1.
    Java avancé Tuyêt TrâmDANG NGOC Laboratoire PRiSM Université de Versailles-Saint-Quentin <[email protected]> Cours CNAM, le 26 novembre 2003
  • 2.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 •Java 1.1.1 , 1.1.2, 1.1.3, 1.1.8 •Java 1.2.2
  • 3.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Threads Un thread -appelé parfois processus léger - est un unique flux de contrôle séquentiel d’un programme. On peut utiliser les threads afin d’isoler des tâches.
  • 4.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 1. on crée le thread – new; 2. on le démarre – start; 3. le thread s’exécute alors, et reste vivant jusqu’à la fin de son code exécution, ou jusqu’à ce que ses méthodes stop ou destroy soient invoquées ; 4. durant son exécution, le processus peux être bloqué ou exécutable. Vie et mort d'un thread
  • 5.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Inactivité d'un thread Un thread est bloqué (Not Runnable), dans les cas suivants : 1. sa méthode sleep a été invoquée ; 2. le thread a appelé la méthode wait afin d’attendre la réalisation d’un certain évènement ; 3. le thread est en attente d’une entrée/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 l’avertir du changement de la condition – notify ou notifyAll ; 3. si un thread est bloqué en attente d’une entrée/sortie alors il faut attendre que cette entrée/sortie se libère.
  • 6.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Comment créer un thread ? class MonThread extends Thread { // constructeur MonThread (...) { [...] } // methode ’run’ a surcharger public void run() { [...] } } class MonThread implements Runnable { // constructeur MonThread (...) { [...] } // methode ’run’ a implementer public void run() { [...] } } Par dérivation de la classe Thread Par implémentation de l'interface Runnable
  • 7.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Communication sur IP
  • 8.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Adresses IP / adresses DNS Une adresse IP référence de manière logique et unique sur l’Internet, l’interface d’une machine. Des mécanismes de résolution d’adresse 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
  • 9.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Ports Le mécanisme de port est utilisé afin de pouvoir permettre de gérer plusieurs services simultanés depuis une seule interface réseau.
  • 10.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Classes utilisées pour la communication Les classes orientées communication se trouvent dans le paquetage java.net. Les programmes Java peuvent utiliser TCP ou UDP afin de communiquer sur l’Internet. classe de manipulation d’adresses InetAddress Les classes utilises spcifiquement pour TCP : URL,URLConnection, Socket , ServerSocket ; Les classes utilises spécifiquement pour UDP : DatagramPacket , DatagramSocket , MulticastSocket.
  • 11.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 URL
  • 12.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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)
  • 13.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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);
  • 14.
    Architecture J2EE Cours CNAM,le 26 novembre 2003
  • 15.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 16.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Architecture 1-tiers Présentation Traitement données Navigateur Serveur Web Système de fichiers
  • 17.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Architecture 2-tiers Présentation Traitement données Navigateur Serveur Web Base de données Base de données
  • 18.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 19.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 20.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 21.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 22.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 23.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Container Contrat Container Descripteur de déploiement Composant d’application Services déclaratifs API services du container Autres services container 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 fournis par le container et qui sont généralement requis par toutes les applications du container 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, ramasse-miette, etc.
  • 24.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 25.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 26.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Composants J2EE Outils Applet JavaBeans JavaIDL, RMI-IIOP JAAS JDBC JNDI JAXP EJB JSP Servlet JTA/JTS JavaMail JMS Connecteurs 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
  • 27.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 JAXP 1.1 : gestion de documents XML
  • 28.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 29.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Cycle de vie d’une servlet Code Servlet Serveur Chargement Code Servlet Serveur Déchargement 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
  • 30.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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)
  • 31.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API Servlet import javax.servlet.*; import javax.servlet.http.*;
  • 32.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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>") ; } }
  • 33.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 34.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Directives Balise de déclaration <%! ... %> Balise d’affichage <%= ... %> Balise de scriplet <% ... %> Balise de directive <%@ ... %> Balise d’action <jsp : ... />
  • 35.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JSP import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*;
  • 36.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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>
  • 37.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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.
  • 38.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 39.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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.
  • 40.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 41.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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)
  • 42.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API EJB import javax.ejb.* ; import javax.ejb.spi.* ;
  • 43.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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; }
  • 44.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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(){…} }
  • 45.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 46.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JAF import javax.activation.* ;
  • 47.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 48.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 49.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 natif côté client Ecoute distante
  • 50.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JDBC import java.sql.*;
  • 51.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 () ; }
  • 52.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 53.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 skeleton à l’aide de rmic Couche de référence distante Couche transport RMI TCP/IP Interface RMI Stub RMI Squelette RMI client RMI serveur RMI
  • 54.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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.
  • 55.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Architecture CORBA Portable Object Adapter (POA) Object Request Broker (ORB ) Client reférence objet objet Serveur ORB ORB
  • 56.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API CORBA, RMI import javax.rmi.* ; import javax.rmi.CORBA ; import org.omg.CORBA.* ; // RMI-IIOP, IDL import org.omg.CosNaming.* ; // RMI-IIOP, IDL
  • 57.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 + " !" ;} }
  • 58.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 // 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'") ; } }
  • 59.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 // 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 + ".") ; } }
  • 60.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 61.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 RMI CosNaming CORBA Autres services (DNS, NDS, NIS…)
  • 62.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JNDI import javax.naming.* ; import javax.naming.directiry.* ; import javax.naming.event.* ; import javax.naming.ldap.* ; import javax.naming.spi.* ;
  • 63.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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()); } } }
  • 64.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 65.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 66.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Client1 Client2 file d’attente Client1 thème Envoie message Client2 Publie message Consomme Acquitte Souscrit Délivre Client3 Souscrit Délivre message message message
  • 67.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 68.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JMS import javax.jms.* ;
  • 69.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 70.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 71.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JTA import javax.transaction ; import javax.transaction.xa ;
  • 72.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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()); } } [...]
  • 73.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 74.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 API JavaMail import javax.mail.* ; import javax.mail.event.* ; import javax.mail.internet.* ; import javax.mail.search.* ;
  • 75.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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; } }
  • 76.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 77.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 78.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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"; };
  • 79.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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"; };
  • 80.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 81.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 XML – SAX -DOM
  • 82.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 ;
  • 83.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 JAX-RPC : JAVA API for XML-based RPC appels à des procédures à distance avec XML
  • 84.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 85.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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 applications J2EE et vérifier leur compatibilité
  • 86.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 87.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 88.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 89.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 90.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 91.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Exemple d’application en entreprise Client Navigateur Compsants graphiques fichier HTML Requête HTTP Serveur Web Servlet JSP EJB Bean Session Bean Entité Bean Session Bean Entité Base de données relationnelles Mainframe JDBC Serveur d’applications Serveurs de donnes
  • 92.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 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
  • 93.
    Tuyêt Trâm DANGNGOC - Université de Versailles dimanche 26 janvier 2025 Architecture sécurisée (JCA) Service de cryptographie Interface et classe de certificat Classe et interface de gestion de clef

Notes de l'éditeur

  • #1 Documents ayant servis pour ces transparents : Documents de références sur http://java.sun.com/* Livre « XML » de Georges Gardarin Documents de Ian Cole Documents de Ming-Hung Cho
  • #7 Une adresse IP référence de manière logique et unique sur l’Internet, l’interface d’une machine. Des mécanismes de résolution d’adresse permettent de convertir les adresses IP en adresses DNS et vice-versa. Le mécanisme de port est utilisé afin de pouvoir permettre de gérer plusieurs services simultanés depuis une seule interface réseau. Une connexion est identifie par un couple de points appels socket permettant l’identification des deux extrémités de la connexion.
  • #14 Documents ayant servis pour ces transparents : Documents de références sur http://java.sun.com/* Livre « XML » de Georges Gardarin Documents de Ian Cole Documents de Ming-Hung Cho
  • #52 API : Application Programming Interface SPI : Service Provider Interface API : Application Programming Interface SPI : Service Provider Interface