Java avancé
Tuyêt Trâm DANG NGOC
Laboratoire PRiSM
Université de Versailles-Saint-Quentin
<dntt@prism.uvsq.fr>
Tuyêt Trâm DANG NGOC - Université de Versailles
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
•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 mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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.
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
Comment créer un thread ?
class MonThread extends Thread
{
// constructeur
MonThread (...)
{
[...]
}
// methode ’run’ a surcharger
public void run()
{
[...]
}
}
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()
{
[...]
}
}
class MonThread implements Runnable
{
// constructeur
MonThread (...)
{
[...]
}
// methode ’run’ a implementer
public void run()
{
[...]
}
}
Par dérivation de la classe Thread
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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;
Architecture J2EE
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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,
Tuyêt Trâm DANG NGOC - Université de Versailles
Architecture 1-tiers
Présentation
Traitement
données
Navigateur
Serveur Web
Système
de
fichiers
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
Container
Contrat Container
Descripteur de déploiementDescripteur de déploiement Composant d’application Composant d’applicationS
er
vic
es
d
éc
la
ra
tif
s
API services du container
A
u
tr
es
s
er
vi
ce
s
co
n
ta
in
er
Descripteur de déploiementDescripteur de déploiement Composant d’application Composant d’application Descripteur de déploiementDescripteur de déploiement Composant d’application Composant d’application Descripteur de déploiementDescripteur de déploiement Composant d’application Composant d’application Un ensemble d’APIspé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
Container J2EE Web
Container J2EE Web
Intégration J2EE
HTTP
JDBC
Container J2EE EJB
Container J2EE EJB
Enterprise Bean
Enterprise Bean
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 mercredi 16 juin 2021
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,
Tuyêt Trâm DANG NGOC - Université de Versailles
Composants J2EE
Outils
A
pp
le
t
Ja
va
B
ea
ns
JavaIDL, RMI-IIOP
JAAS JDBC
JNDI
JAXP
EJB JSP Servlet
JTA/JTS
JavaMail
JMS
C
on
ne
ct
eu
rs
Container J2EE
BluePrint
Java 2 SDK – Edition standard
JavaBeans
Web
Transaction
Messagerie
Guide de
programmation
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
API Servlet
import
javax.servlet.*;
Tuyêt Trâm DANG NGOC - Université de Versailles
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é comme :<b>" + adresseDistante + "</b>.") ; out.println(“</body></html>") ;
} }
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
API JSP
import
javax.servlet.jsp.*;
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
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
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é
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
API EJB
import
javax.ejb.*
;
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
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
API JAF
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
Java Application
JDBC API
JDBC Type 1
Client natif ODBC
Interface SGBD
Client
SGBD
Interface
serveur
SGBD
Java Application
JDBC API
JDBC Type 2
Interface SGBD
Client
SGBD
Interface
serveur
SGBD
Java Application
JDBC API
JDBC Type 4
SGBD
Interface
serveur
SGBD
Java Application
JDBC API
JDBC Type 3
SGBD
Interface
serveur
SGBD
Ecouteur SGBD
Interface
client
SGBD
indépendant du constructeur
dépendant du constructeur
na
ti
f
cô
té
c
li
en
t
E
co
ut
e
di
st
an
te
Tuyêt Trâm DANG NGOC - Université de Versailles
API JDBC
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
Architecture CORBA
Portable Object Adapter
(POA)
Object Request Broker
(ORB )
Client
reférence
objet
reférence
objet
objet
objet
Serveur
Tuyêt Trâm DANG NGOC - Université de Versailles
API CORBA, RMI
import
javax.rmi.*
;
import
javax.rmi.CORBA
;
import
org.omg.CORBA.* ;
// RMI-IIOP, IDL
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
// 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 mercredi 16 juin 2021
// 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
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
Système de
fichiers
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
LDAP
Services
RMI
Services
RMI
CosNaming
CORBA
CosNaming
CORBA
Autres services
(DNS, NDS,
NIS…)
Autres services
(DNS, NDS,
NIS…)
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
Client1
d’attente
file
Client2
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 mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
API JMS
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
API JTA
import
javax.transaction
;
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
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
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 mercredi 16 juin 2021
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
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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.*
;
Tuyêt Trâm DANG NGOC - Université de Versailles
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.
}
}
grantcodebase "file:SampleLoginModule.jar" {
permission javax.security.auth.AuthPermission "modifyPrincipals"; };
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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/
Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021
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
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021
Exemple d’application en entreprise
Client
Client
Navigateur
Navigateur
Compsants graphiques Compsants graphiquesfichier HTML
Requête HTTP
Se
rv
eu
r W
eb
Servlet
Servlet
JSP
JSP
EJB
Bean Session
Bean Session
Bean
Entité
Bean
Entité
Bean Session
Bean Session
Bean
Entité
Bean
Entité
Base de données
relationnelles
Mainframe
JDBC
Se
rv
eu
r
d’
ap
pli
ca
tio
ns
S
er
ve
ur
s
de
d
on
ne
s
Tuyêt Trâm DANG NGOC - Université de Versailles
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 mercredi 16 juin 2021