• Aucun résultat trouvé

[PPT] Formation J2EE pour tout savoir sur le langage Java Enterprise Edition | Cours j2ee

N/A
N/A
Protected

Academic year: 2021

Partager "[PPT] Formation J2EE pour tout savoir sur le langage Java Enterprise Edition | Cours j2ee"

Copied!
93
0
0

Texte intégral

(1)

Java avancé

Tuyêt Trâm DANG NGOC

Laboratoire PRiSM

Université de Versailles-Saint-Quentin

<dntt@prism.uvsq.fr>

(2)

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

(3)

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

(4)

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.

(5)

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

(6)

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

(7)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

(8)

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

(9)

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.

(10)

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.

(11)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

(12)

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

(13)

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;

(14)

Architecture J2EE

(15)

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,

(16)

Tuyêt Trâm DANG NGOC - Université de Versailles

Architecture 1-tiers

Présentation

Traitement

données

Navigateur

Serveur Web

Système

de

fichiers

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

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’application

S

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

(25)

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,

(26)

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

Mail

(27)

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

(28)

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

(29)

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

(30)

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)

(31)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

API Servlet

import

javax.servlet.*;

(32)

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&eacute; comme :<b>" + adresseDistante + "</b>.") ; out.println(“</body></html>") ;

} }

(33)

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

(34)

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 :

...

/>

(35)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

API JSP

import

javax.servlet.jsp.*;

(36)

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>

(37)

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.

(38)

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é

(39)

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

(40)

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

(41)

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

(42)

Tuyêt Trâm DANG NGOC - Université de Versailles

API EJB

import

javax.ejb.*

;

(43)

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;

}

(44)

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

(45)

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

(46)

Tuyêt Trâm DANG NGOC - Université de Versailles

API JAF

(47)

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

(48)

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

(49)

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

li

en

t

E

co

ut

e

di

st

an

te

(50)

Tuyêt Trâm DANG NGOC - Université de Versailles

API JDBC

(51)

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

(52)

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

(53)

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

(54)

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.

(55)

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

(56)

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

(57)

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 + "

!

" ;}

}

(58)

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'

") ;

}

(59)

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 + "

.

") ;

}

(60)

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

(61)

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

(62)

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.*

;

(63)

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

(64)

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

(65)

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

(66)

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

(67)

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

(68)

Tuyêt Trâm DANG NGOC - Université de Versailles

API JMS

(69)

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

(70)

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

(71)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

API JTA

import

javax.transaction

;

(72)

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

}

(73)

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

(74)

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.*

;

(75)

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

(76)

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

(77)

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.*

;

(78)

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

(79)

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

(80)

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

(81)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

(82)

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

;

(83)

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

(84)

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

(85)

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

(86)

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

(87)

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

(88)

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/

(89)

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

(90)

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

(91)

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 graphiques

fichier 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

(92)

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

(93)

Tuyêt Trâm DANG NGOC - Université de Versailles mercredi 16 juin 2021

Architecture sécurisée (JCA)

Service de

cryptographie

Interface et classe de

certificat

Classe et interface de

gestion de clef

Références

Documents relatifs

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

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

Pour cr´ eer une table Oracle en SQL, il existe l’instruction CREATE TABLE dans laquelle sont pr´ ecis´ es pour chaque colonne de la table : son intitul´ e, son type de donn´ ee et

De même dans une gestion de bibliothèque, plusieurs livres ont le même auteur, une base de données permet d'éviter de répéter toutes les informations sur l'auteur pour chaque

Il faut remarquer que les donn´ees sont accessibles directement, alors que les syst`emes de banques de donn´ees ant´erieurs ne fournissaient qu’un acc`es `a un ensemble plus ou

Le chapitre 4 est entièrement consacré au langage SQL (Structured Query Language) qui peut être considéré comme le langage d’accès normalisé aux bases de données relationnelles..

This paper has presented an exception management model for algorithmic skele- ton, in particular for the Java Skandium Library which supports nestable par- allelism patterns.. The

By using a Hidden Markov Model representation of the editing process, we demonstrate the possibility of easily reproducing elements of style extracted from real movies..