Vous êtes sur la page 1sur 94

Java 2

Programmation Java Avancée

29/11/2020 S.CHOUGDALI 1
Plan de cours
Plan du module

Chapitre 1: Accès aux bases de données via JDBC.

Chapitre 2: Les Entrées / Sorties

Chapitre 2: Les Threads.

Chapitre 3: Les sockets.

Chapitre 4: RMI.

29/11/2020 S.CHOUGDALI 2
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Les outils nécessaires pour développer une application Java:

• IDE : Eclipse

• Java Devlopment Kit: JDK 1.7.0

• Un serveur de données : WampServer ou EasyPHP

29/11/2020 S.CHOUGDALI 3
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Téléchargement et utilisation de Eclipse.

1- A partir du site web http://www.eclipse.org/downloads/ télécharger Eclipse IDE


for Java EE Devlopers version Windows, soit 32 bits ou 64 bits selon la
configuration que vous disposez.

2- Décompresser le fichier téléchargé, et pour que le dossier soit accessible,


sauvegarde le sur votre bureau avec le nom Eclipse.

29/11/2020 S.CHOUGDALI 4
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Téléchargement de JDK 1.7.0.

1- A partir du site http://www.oracle.com/technetwork/java/javase/downloads/index.html


télécharger le kit de développement JDK 1.7.0

2- Placer le JDK 1.7.0 dans un dossier sur C (nommer le dossier outils JEE ).

29/11/2020 S.CHOUGDALI 5
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Configuration de Eclipse :

1- Pour ajouter le JDK ouvrir Eclipse puis choisir Window + Preferences.

2- Aller au Java + Installed JREs + Add.

29/11/2020 S.CHOUGDALI 6
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Configuration de Eclipse :

3- Choisir standard VM + Next + Directory puis définir le chemin du dossier où se


trouve votre JDK et continue à cliquer sur Next jusqu’à la fin.

4- Sélectionner le JDK (Cocher le JDK que vous voulez utilisé si vous avez plusieurs
JDK).
29/11/2020 S.CHOUGDALI 7
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Configuration de Eclipse :
5- Ajouter le chemin de dossier bin de JDK au path.

29/11/2020 S.CHOUGDALI 8
Chapitre 0: Plan de cours
Environnement de travail

Installation et configuration de l’environnement de travail.

Télécharger et installer le server de données WampServer ou EasyPHP :

1- A partir du site http://www.wampserver.com/ ou http://www.easyphp.org/ télécharger


WampServer ou EasyPHP selon la configuration de votre machine.

2- Suivre la procédure d’installation du serveur.

29/11/2020 S.CHOUGDALI 9
Plan de cours

Chapitre1:
Accès aux bases de données via
JDBC

29/11/2020 S.CHOUGDALI 10
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Introduction aux JDBC (Java Data Base Connectivity)

• JDBC est une bibliothèque de classes Java à pour rôle de faire communiquer
une application Java avec SGBD via le réseau en utilisant le protocole TCP/IP

• JDBC = Pilotes

• JDBC a été conçu aussi pour exécuter les requêtes SQL.

• L’application JDBC est indépendante au SGBD utilisé.

NB:

• Chaque SGBD possèdes ces propres pilotes JDBC.

• Il existe un pilote particulier - JdbcOdbcDriver - qui permet à une


application de communiquer avec n’importe quel SGBD via les pilotes
ODBC (Open Data Base Connectivity).

29/11/2020 S.CHOUGDALI 11
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Introduction aux JDBC (Java Data Base Connectivity)

Application JAVA

JDBC: Oracle JDBC: MySQL JDBC: SQL Server JDBC: ODBC

Oracle MySQL SQL Server

Excel Access

29/11/2020 S.CHOUGDALI 12
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

1- Charger le pilote JDBC:

• Utiliser la méthode forName () de la classe Class, en précisant le nom de la


classe pilote.

Exemple :

- Charger le pilote JDBC pour MySQL:

- Charger le pilote JdbcOdbcDriver :

29/11/2020 S.CHOUGDALI 13
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

2- Créer une connexion:

• Pour créer une connexion il faut utiliser la méthode statique getConnection() de la


classe DriverManager.

Exemple:

• Créer une connexion avec SGBD MySQL qui utilise le pilote com.mysql.jdbc.Driver :

• Créer une connexion qui utilise le pilote sun.jdbc.odbc.JdbcOdbcDriver :

Le nom de la source de données

29/11/2020 S.CHOUGDALI 14
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

3- Exécuter une requête SQL:

Première façon

• Créer l’objet Statement:

• Pour exécuter une requête de type select : utiliser la méthode executeQuery() de


l’objet Statement, le résultat de la requête sera stocker dans l’objet ResultSet.

• Pour exécuter une requête de type insert, update et delete: utiliser la méthode
executeUpdate () de l’objet Statement, le résultat de la requête est toujours stocker
dans l’objet ResultSet .

29/11/2020 S.CHOUGDALI 15
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

3- Exécuter une requête SQL:

Deuxième façon

• Créer l’objet PreparedStatement en utilisant la méthode prepareStatement () de


l’objet Connexion:

• Passer les arguments de la sélection via la méthode setString() de l’objet


PreparedStatement:

29/11/2020 S.CHOUGDALI 16
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

3- Exécuter une requête SQL:

Deuxième façon

• Pour exécuter une requête de type select : utiliser la méthode executeQuery() de


l’objet Statement, le résultat de la requête sera stocker dans l’objet ResultSet.

• Pour exécuter une requête de type insert, update et delete: utiliser la méthode
executeUpdate () de l’objet Statement, le résultat de la requête est toujours stocker
dans l’objet ResultSet .

29/11/2020 S.CHOUGDALI 17
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

4- Récupérer les données d’un objet ResultSet:

• Pour parcourir l’objet ResultSet on utilise sa méthode next() qui permet de passer
d’une ligne à l’autre. Si la ligne existe, la méthode next() retourne true si non elle
retourne false.

• Pour récupérer la valeur d’une colonne de la ligne courante de l’objet ResultSet, on


utilise les méthodes getInt(colonne), getString(colonne), getDouble(colonne),
getDate(colonne), …. Avec colonne représente le numéro ou le nom de la colonne de
la ligne courante.

Exemple:

29/11/2020 S.CHOUGDALI 18
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Démarche à suivre pour créer une application JDBC:

5- Utilisations de l’objet ResultSetMetaData:

• Dans le cas où on connait pas la structure d’un ResultSet, on utilise l’objet


ResultSetMetaData pour connaitre le nombre de colonnes du ResultSet, le nom, le
type et la taille de chaque colonne.

• Pour afficher, par exemple, le nom, le type, et la taille de toutes les colonnes d’un
ResultSet rs, on peut écrire le code suivant:

29/11/2020 S.CHOUGDALI 19
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

Conclusion: les buts de JDBC.

Une application JDBC permet:

• La communication avec les SGBD et par la suite l’exécution des différents requêtes
SQL.

• Le mapping objet – relationnel : consiste à faire une correspondance avec un


enregistrement d’une table de la base de données à un objet d’une classe
correspondante..

NB:

• Chaque table de la base de données est représentée dans l’application java par une
classe, appelée classe persistante

• Une classe persistante est une classe dont l’état de ses objet sont stocker dans une
unité de sauvegarde comme une table de la base de données.

29/11/2020 S.CHOUGDALI 20
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

TP: Gestion des notes:

On veut développer une application java qui gère les notes des étudiants. Chaque
étudiant est défini par un code unique auto incrémente, un nom, un prénom, adresse et
numéro de téléphone. Il peut suivre une ou plusieurs matière. Chaque matière est
définie par un code unique alphanumérique, une désignation et un volume horaire.
Notre application doit être capable à répondre sur les requêtes suivantes:

• Ajouter un étudiant,

• Ajouter une matière,

• Ajouter une note d’un étudiant pour une matière données,

• Consulter un étudiant sachant son code, une matière sachant son code, touts les
étudiants, toutes les matières, et les notes d’un étudiant sachant son code.

• Supprimer un étudiant sachant son code.

• Calculer la moyenne d’un étudiant sachant son code.

29/11/2020 S.CHOUGDALI 21
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

TP1: Gestion des notes

Travail demandé:

• Étude conceptuelle

1. Établir un MCD et un MLD. (15 min)

2. Donner le diagramme de classes. (15 min)

• Implémentation (1h30)

1. Créer une base de données DBScolarite et par la suite les tables de la base de
données.

2. Créer l’ensemble des classes persistantes et les méthodes de gestion de la base de


données. (Couche DAO).

3. Créer les méthodes de métier et une application Java pour tester notre application
(Couche métier).

29/11/2020 S.CHOUGDALI 22
Chapitre 1: Plan
Accèsdeaux
cours
bases de données via JDBC

TP1: Gestion des notes

Travail demandé:

4. Développer une application Swing qui permet le saisie d’un code étudiant et
l’Affichage des informations sur cette étudiant après avoir cliquer su un button.

29/11/2020 S.CHOUGDALI 23
Plan de cours

Chapitre2:
Les Entrées / Sorties
En Java

29/11/2020 S.CHOUGDALI 24
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Introduction aux Entrées / Sorties en Java

Programme Ficher

Streams
Clavier
d’entrée

Streams Imprimante
Un autre Programme de sortie

Streams
Moniteur
De sortie

Streams Modem3G
D’entrée

29/11/2020 S.CHOUGDALI 25
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Introduction aux Entrées / Sorties en Java

• En Java, les moyens de communication sont représentés par des objets


particuliers appelés (en anglais) stream. Ce mot, qui signifie courant, ou
flot.

• En Java le principe des entrées / sorties est simple, basé sur les
opérations suivantes:

 Ouverture d’un moyen de communication.

 L’écriture ou la lecture des données.

 Fermeture du moyen de communication.

29/11/2020 S.CHOUGDALI 26
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Introduction aux Entrées / Sorties en Java : Streams

• Il existe deux types de Streams:

 Streams de communication: consiste établir une liaison entre le


programme et les périphériques.

 Streams de traitement : consiste à traiter les informations


récupérer par les Streams de communication.

• Pour les deux types il existe des Streams binaires ou des Streams de
caractères.

Exemple:

• FileInputStream, FileOutputStream deux streams binaires de types


streams de communication.
29/11/2020 S.CHOUGDALI 27
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Introduction aux Entrées / Sorties en Java : Streams


Streams

Communication Traitement

Binaires Caractères Binaires Caractères

InputStream OutputStream Reader Writer IS OS Reader Writer

E.B S.B E.C S.C E.B S.B E.C S.C

29/11/2020 S.CHOUGDALI 28
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

La classe File

• La classe File permet de créer une instance de fichier.

• La classe File donne des informations sur un fichier ou un répertoire.

• Il existe plusieurs manières pour la création d’un objet de type File.

29/11/2020 S.CHOUGDALI 29
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Principales méthodes de la classe File


• Récupérer des informations sur le fichier

• Utiliser le fichier

29/11/2020 S.CHOUGDALI 30
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Exemple d’utilisation de la classe File


Ecrire un programme qui affiche le contenu d’un répertoire en affichant si ce
contenu est un répertoire ou un fichier , si le contenu est un fichier le programme
affiche sa capacité physique.

29/11/2020 S.CHOUGDALI 31
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Exemple d’utilisation de la classe File


TP1:

Ecrire une application java qui permet d’afficher le contenu d’un répertoire
y compris le contenu de ses sous répertoires

Correction:

Assister au séance du TP.

29/11/2020 S.CHOUGDALI 32
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Lire et écrire sur un fichier texte

fr:FileReader f1:File
Fichier1.txt
read():int

fw:FileWriter f2:File
Fichier2.txt

write(int c):void

Exemple:

29/11/2020 S.CHOUGDALI 33
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Lire et écrire sur un fichier texte


TP 2:

Soit un fichier muni des informations sur les opérations d’un compte
(operations.txt) chaque operation est définie par: code opération, numéro
de compte, date d’opération, type d’opération, et le montant de l’opération.

Avant d’envoyer un relevée des opérations à un client nous voulons crypter


son contenu dans un autre fichier (operationsCrypt.txt).

Ecrire un programme qui permet le cryptage du fichier operations.txt pour


donner un fichier crypté operationsCrypt.text envoyé par la suite au client.

Correction: assister au séance du TP.

29/11/2020 S.CHOUGDALI 34
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Lire et écrire sur un fichier binaire


fis:FileInputStream f1:File
image1.jpg
read():int

fos:FileOutputStream f2:File

write(int c ):void image2.jpg

29/11/2020 S.CHOUGDALI 35
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Lire et écrire sur un fichier texte ligne par ligne


br:BufferedReader fr:FileReader f1:File
Fichier1.txt
readLine():String read():int

bw:BufferedWriter fw:FileWriter f2:File


Fichier2.txt
write(String s):void
newLine():void write(int c):void

29/11/2020 S.CHOUGDALI 36
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Lire et écrire sur un fichier texte ligne par ligne

TP:

Soit le fichier des notes des étudiants (notes.txt), chaque ligne comporte les
informations d’un étudiant (nom;prenom;moyen), on utilise ; comme
caractère de séparation.

Exemple du fichier:

Écrire un programme en java qui manipule le fichier notes.txt et calcul la


moyenne de la classe.

29/11/2020 S.CHOUGDALI 37
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Compression ZIP: stream de traitement ZipOutputStream


bis:BufferedInputStream fis:FileInputStream f1:File
Fichier.doc
read():int read():int

zos:ZipOutputStream bos:BufferedOutputStream fos:FileOutputStream f2:File


write():void Fichier.zip
setMethod():void
putNextEntry():void write(int c):void read():int

29/11/2020 S.CHOUGDALI 38
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

Décompression ZIP: stream de traitement ZipInputStream


zos:ZipInputStream bis:BufferedInputStream fis:FileInputStream f1:File
Fichier.zip
read():int
getNextEntry()
read():int read():int

bos:BufferedOutputStream fos:FileOutputStream f2:File


Fichier.doc

write(int c):void read():int

29/11/2020 S.CHOUGDALI 39
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

La sérialisation
 La sérialisation est une opération nécessaire pour envoyer un objet sous forme
d’un tableau d’octets sur une sortie quelconque (Fichier, réseau, port série etc..).

 Les applications distribuées utilisent beaucoup ce concept pour échanger les


objets java entre les applications via le réseau.

 Pour sérialiser un objet, on utiliser la méthode writeObject() de la classe


ObjectOutputStream

 Pour pouvoir sérialiser un objet, sa classe doit implémenter l’interface


Serializable

Exemple: sérialisation des objets operation dans un fichier texte:

oos:ObjectOutputStream fos:FileOutputStream f:File


banque.txt
writeObject(Object o):void write(int c)

29/11/2020 S.CHOUGDALI 40
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

La sérialisation

29/11/2020 S.CHOUGDALI 41
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

La désérialisation
 La désérialisation est une opération qui permet de reconstruire l’objet à partir
d’une série d’octets récupérés à partir d’une entrée quelconque.

 Pour dé sérialiser un objet, on utilise la méthode readObject() de la classe


ObjectInputStream.

Exemple de désérialisation des objets de type opérations

ois:ObjectInputStream fis:FileInputStream
f:File
banque.txt
readObject():Object read():int

29/11/2020 S.CHOUGDALI 42
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

La désérialisation

29/11/2020 S.CHOUGDALI 43
Chapitre 2: Plan de cours/ Sorties en Java
Les Entrées

TP:

On reprend le TP traité dans la partie JDBC, et nous voulons garder


l’archive des notes d’un étudiants dont nous avons consulter sa moyenne,

Écrire un programme qui permet la sérialisation des notes d’un étudiant à


chaque fois qu’on a consulté sa moyen via l’interface homme machine
(Swing).

29/11/2020 S.CHOUGDALI 44
Plan de cours

Chapitre3:
Les Threads
En Java

29/11/2020 S.CHOUGDALI 45
Chapitre 3: Plan de cours en Java
Les Threads

Introduction

 Java est un langage multi-threads

 Thread = tâche ou fil

 Le concept Thread permet l’exécution de plusieurs blocs


d’instructions à la fois

 Chaque bloc sera exécuté dans un thread

29/11/2020 S.CHOUGDALI 46
Chapitre 3: Plan de cours en Java
Les Threads

Introduction

App1 App2 App3

Processus1 Processus2 Processus3

Tread1 Tread2 Tread3 Tread1 Tread2 Tread3 Tread1 Tread2 Tread3

OS

CPU
-Registres
-UAL

29/11/2020 S.CHOUGDALI 47
Chapitre 3: Plan de cours en Java
Les Threads

Création d’un thread

• Il existe deux manières pour créer un thread:

 La classe java qui présente le thread hérite de la classe


java.lang.Thread

 La classe java qui présente le thread implémente


l’interface java.lang.Runnable

29/11/2020 S.CHOUGDALI 48
Chapitre 3: Plan de cours en Java
Les Threads

Création d’un thread: héritage de la classe Thread

29/11/2020 S.CHOUGDALI 49
Chapitre 3: Plan de cours en Java
Les Threads

Création d’un thread: héritage de la classe Thread


:Thread :Thread
start(){ } start(){ }
run() {} run() { }

v1:Voiture v2:Voiture
nom="BMW" nom="Clio"
compteur=0 compteur=0
run() {} run() { }

Exécution :
Voiture BMW I=0
Compteur=1
Voiture Clio I=0 Compteur=1
Voiture BMW I=1
Compteur=2
Voiture Clio I=1 Compteur=2
Voiture BMW I=2
Compteur=3
Voiture Clio I=2 Compteur=3
……
29/11/2020 S.CHOUGDALI 50
Chapitre 3: Plan de cours en Java
Les Threads

Création d’un thread: implémente l’interface Runnable

29/11/2020 S.CHOUGDALI 51
Chapitre 3: Plan de cours en Java
Les Threads

Création d’un thread: implémente l’interface Runnable


v1:Voiture v2:Voiture
nom="BMW" nom="Clio"
compteur=0 compteur=0
run() { } run() {}

:Thread
:Thread
:Thread start(){ }
start(){ }
start(){ } run() { }
run() {}
run() {}
Exécution :
Voiture BMW I=0 Compteur=1
Voiture Clio I=0 Compteur=1
Voiture Clio I=0 Compteur=2
Voiture BMW I=1 Compteur=2
Voiture Clio I=1 Compteur=3
Voiture Clio I=1 Compteur=4
…..;

29/11/2020 S.CHOUGDALI 52
Chapitre 3: Plan de cours en Java
Les Threads

Création d’un thread: Comparaison des deux méthodes

Méthode Avantages Inconvénients

Chaque thread a ses On ne peut plus hériter d'une


extends Thread données qui lui sont autre classe.
propres.

L'héritage reste possible. Les attributs de votre classe


En effet, on peut sont partagés pour tous les
implements Runnable implémenter autant threads qui y sont basés. Dans
d'interfaces que l'on certains cas, il peut s'avérer que
souhaite. cela soit un atout.

29/11/2020 S.CHOUGDALI 53
Chapitre 3: Plan de cours en Java
Les Threads

Gestion du cycle de vie d’un thread

29/11/2020 S.CHOUGDALI 54
Chapitre 3: Plan de cours en Java
Les Threads

Gestion du cycle de vie d’un thread


public void start() : cette méthode permet de démarrer un thread. En effet, si
vous invoquez la méthode run (au lieu de start) le code s'exécute bien, mais
aucun nouveau thread n'est lancé dans le système. Inversement, la méthode
start, lance un nouveau thread dans le système dont le code à exécuter démarre
par le run.
public void suspend() : cette méthode permet d'arrêter temporairement un
thread en cours d'exécution.
public void resume() : celle-ci permet de relancer l'exécution d'un thread, au
préalable mis en pause via suspend. Attention, le thread ne reprend pas au
début du run, mais continue bien là où il s'était arrêté.
public void stop() : cette dernière méthode permet de stopper, de manière
définitive, l'exécution du thread. Une autre solution pour stopper un thread
consiste à simplement sortir de la méthode run.

29/11/2020 S.CHOUGDALI 55
Chapitre 3: Plan de cours en Java
Les Threads

Gestion de la priorité d’un thread


• Java permet la gestion de la priorité des threads.
• Un thread ayant une priorité plus haute recevra plus fréquemment le
processeur qu'un autre thread. Il exécutera donc, globalement, plus de code.
• La priorité d'un thread varie entre 0 et 10.
• Attention, il n'est en a aucun cas garanti que le système gère autant de
niveaux de priorités.
• L’accès à des certain niveaux de priorités se fait via des constantes tels que
MIN_PRIORITY (0) - NORM_PRIORITY (5) - MAX_PRIORITY (10).
• Pour spécifier la priorité d’un thread, il faut faire appel à la méthode
setPriority(int p) de la classe Thread
Exemple :
Thread t=new Thread();
t.setPriority(Thread.MAX_PIORITY);
29/11/2020 S.CHOUGDALI 56
Chapitre 3: Plan de cours en Java
Les Threads

Synchronisation des threads et accès aux ressources partagées

• Un processus = plusieurs threads

• La mémoire est propre à un processus, alors les threads de ce processus


partagent l’utilisation de cette mémoire.

• Le partage des données stockés dans la mémoire entre thread est simple, si
l’accès est en lecture seulement.

• Le problème de la gestion d’accès aux ressources partagées est devenu


critique si l’accès se fait pour modifier les données.

Solution: Synchroniser l’accès aux ressources partagées

29/11/2020 S.CHOUGDALI 57
Chapitre 3: Plan de cours en Java
Les Threads

Synchronisation des threads et accès aux ressources partagées

Exemple explicatif:
CPU

t1 t2

RAM 0

Compteur

29/11/2020 S.CHOUGDALI 58
Chapitre 3: Plan de cours en Java
Les Threads

Synchronisation des threads: Notion de verrous

• Java offre un mécanisme de synchronisation : les verrous (locks en anglais).


• Chaque objet Java possède un verrou et seul un thread à la fois peut
verrouiller un objet.
• Si d'autres threads cherchent à verrouiller le même objet, ils seront
endormis jusqu'à que l'objet soit déverrouillé.
• Cela permet de mettre en place ce que l'on appelle une section critique.
• Pour verrouiller un objet par un thread, il faut utiliser le mot clé
synchronized.
• En fait, il y a deux façons de définir une section critique. Soit on synchronise
un ensemble d'instructions sur un objet, soit on synchronise directement
l'exécution d'une méthode pour une classe donnée.

29/11/2020 S.CHOUGDALI 59
Chapitre 3: Plan de cours en Java
Les Threads

Synchronisation des threads: Notion de verrous

• Dans le premier cas, on utilise l'instruction synchronized :


synchronized(object) {
//Instructions de manipulation d'une ressource partagée.
}
• Dans le second cas, on utilise le qualificateur synchronized sur la méthode
considérée:
public synchronized void meth(int p) {
// Le code de la méthode
}

29/11/2020 S.CHOUGDALI 60
Chapitre 3: Plan de cours en Java
Les Threads

Exemple : Synchronisation des threads au moment de l’exécution de l’instruction

29/11/2020 S.CHOUGDALI 61
Chapitre 3: Plan de cours en Java
Les Threads

Exemple : Synchronisation des threads avant l’accès à la méthode run

29/11/2020 S.CHOUGDALI 62
Chapitre 3: Plan de cours en Java
Les Threads

TP:

Ecrire un programme java qui permet le traçage sur un interface graphique


et après le clique sur un button Figures, un ensemble de figures tels que Cercle,
rectangle,….

29/11/2020 S.CHOUGDALI 63
Plan de cours

Chapitre4:
Architectures distribuées
& RMI

29/11/2020 S.CHOUGDALI 64
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Introduction: Architectures distribuées

Machine 1 Machine 2
TCP/IP ou UDP

Application1 Application2

Technologies d’accès :
• Sockets
• RMI (JAVA)
• CORBA (Multi Langages)
• EJB (J2EE)
• Web Services (HTTP+XML+J2EE)

29/11/2020 S.CHOUGDALI 65
Chapitre 4: Plan de coursen Java
Les Sockets

Introduction: Architectures distribuées


SGBD Entreprise 1 Entreprise 2 SGBD

Serveur d’application Serveur d’application

Couche DAO Couche DAO

Couche métier Couche métier

Couche web Couche Service Couche Service Couche web


MiddleWares: MiddleWares :
- RMI - RMI
- CORBA - CORBA
- EJB - EJB
- Web Services TCP/IP - Web Services HTTP
HTTP
UDP

Client HTTP Client HTTP


29/11/2020 S.CHOUGDALI 66
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Introduction: Architectures distribuées

• Une application distribuée est une application dont les classes sont réparties
sur plusieurs machines différentes.

• Les architectures distribuées s’articulent sur l’appel des méthodes d’un


objet qui n’est pas situé sur la machine locale.

• Pour invoquer des méthodes d’un objet à distance, on utilise les Middle
Wares, tels que: RMI, CORBA, EJB, Web Services..

• Middle Wares = des téchnologies de communication et d’accès

29/11/2020 S.CHOUGDALI 67
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Les Middle Wares

• RPC : Remote Procedure Calls

 Langage de programmation C.

 Orienté structure de données et non pas le modèle orienté objet.

 Permet l’envoi des données d’un objet et non pas ces méthodes.

• RMI: Remote Method Invocation

 Langage de programmation Java.

 Permet l’utilisation d’objets déployés sur des JVM distantes.

 Permet d’invoquer les données et les méthodes d’un objet grâce au


concept de la sérialisation.

29/11/2020 S.CHOUGDALI 68
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Les Middle Wares

• CORBA : Common Object Request Broker Architecture

 Multi langages.

 Conçue par l’OMG (Object Management Group), un consortium


regroupant 700 entreprises dont Sun Microsystem.

 L’inconvénients de la technologie CORBA: plus lourd.

• EJB: Entreprise Java Beans

 Langage de programmation Java.

 Permet le dévloppement des composantes distribuées pour les


applications J2EE.

 Derrière EJB il y a RMI


29/11/2020 S.CHOUGDALI 69
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Les Middle Wares

• WS : Web Services

 Multi langages et Multi plateformes.

 Facile à mettre en place.

 Utilise les protocoles HTTP et SOAP.

 Web Service utilise les concepts de HTTP et XML.

NB: Toutes les technologies de création des applications distribuées s’appuient


sur les SOCKETS

29/11/2020 S.CHOUGDALI 70
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Principe des Middle Wares: Serveur (RMI/CORBA/EJB/WS)


Client Distant
InterfaceObjetDistant
Appel d’une méthode distante
méthode1()
méthode2()
InterfaceObjetDistant
implements
methode1()
methode2() od:ObjetDistant
Variables
SKELETON methode1()
RMI CORBA methode2()

EJB WS
TCP/IP RMI CORBA EJB WS
STUB
TCP/IP

Naming Service
Nom de l’objet distant Référence de l’objet distant
OD1 Réf1
OD2 Réf2

29/11/2020 S.CHOUGDALI 71
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Généralités

• A partir de la version 1.1 du JDK le concept RMI est devenu exploitable.

• Le but de RMI est de créer des objets distribués en Java.

• Avec la technologie RMI, les méthodes d’un objet (appelé objet distant)
peuvent être invoquées depuis des JVM différentes (espaces d adressages
distincts).

• RMI utilise le protocole TCP/IP pour communiquer des clients avec le


serveur.

• RMI utilise des mécanismes et des protocoles définis et standardisés tels que
les sockets et RMP (Remote Method Protocol).

• RMI est adapté aux n’importe quelles spécifiques des technologies réseaux.

29/11/2020 S.CHOUGDALI 72
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Architecture
Serveur
Client
1-Créer OD
6- Invoquer la méthode 4- Création d’un
Od:BanqueImpl STUB
Conversion (5)

Conversion (double mt):double


11- res=55
9- res=55 8- Conversion (5) 5- Connexion
:SKELETON :STUB

7- Conversion (5)

10- res=55
3- récupérer la référence de l’OD

Naming Service: IP & Port


Nom de l’objet distant Reference de l’objet distant
2- publier le nom
Nom_OD IP / Numéro de port
et la référence de
l’OD

29/11/2020 S.CHOUGDALI 73
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Architecture

• L’architecture RMI est basé sur deux concepts séparés:

 La définition du comportement d’un objet distant en utilisant une


interface Java.

 L’implementation du comportement d’un objet distant via une classe


java.

NB:

 Les interfaces font le cœur de la technologie RMI.

 Une interface est une classe Java qui contient que des méthodes
abstracts.

 Implémenter une interface, demande la redéfinition de toutes ces


méthodes.
29/11/2020 S.CHOUGDALI 74
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Architecture

• La technologie RMI est fondue sur trois couche:

 Couche 1: Stubs et Skeletons (Souche et Squelette).

 Couche 2: Couche de référencement distante (Remote Reference Layer).

 Couche 3: Couche transport

29/11/2020 S.CHOUGDALI 75
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Couche Stubs et Skeletons

• Un stub est une classe java placée côté client.

• Les stubs transfert les appels des méthodes distantes par le client.

• Le stub est le représentant local de l’objet distant côté client.

• Le stub communique avec l’objet distant via le skeleton.

• Un stub à pour rôles:

 Emballer les arguments de la méthode distante et les envois dans un flux


de données vers le service RMI distant.

 Déballer la valeur ou l’objet de retour de la méthode distante.

29/11/2020 S.CHOUGDALI 76
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Couche Stubs et Skeletons

• Le skeleton aussi est un relai côté serveur.

• Placé sur la machine serveur.

• Le skeleton à pour rôles; de déballer les paramètres de la méthode distante,


les transmet à l’objet local et emballer les valeurs de retours à renvoyer au
client.

• Les stubs et les skeletons sont donc des intermédiaires entre le client et le
serveur qui gèrent le transfert distant des données.

• La génération des stubs et des skeletons se fait par le compilateur rmic du


JDK.

• Depuis la version 2 du java l’appellation skeleton n’est plus utilisée, on dit


stub côté client et stub côté serveur.

29/11/2020 S.CHOUGDALI 77
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Couche de référencement distante (Remote Reference Layer).

• Le service de référencement est assuré par le lancement du programme


rmiregistry côté serveur.

• Le serveur doit enregistrer auprès le service rmiregistry la référence de


chaque objet distant ainsi que son nom.

• Référence = adresse IP + numéro de port + nom objet distant .

• Le client peut avoir la référence de l’objet distant par nom via une
consultations du service rmiregistry.

• Le service rmiregistry est connu aussi sous le nom Naming service.

29/11/2020 S.CHOUGDALI 78
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Couche transport.

• RMI utilise le protocole TCP/IP pour faire connecter les deux JVM.

• Les rôles de la couche transport sont:

 suivre les connexions en cours;

 Écouter et répondre aux invocations;

 construire une table des objets distants disponibles;

 Fournir une stratégie pour la gestion des firewalls.

• La couche physique utilise les classes Socket et ServerSocket.

• Elle peut utiliser aussi le protocole propriétaire R.M.P. (Remote Method


Protocol).

29/11/2020 S.CHOUGDALI 79
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: La démarche.

1. Déclarer une interface qui comporte le comportement des objets distants;

2. Implémentation cette interface et redéfinir les méthodes des objets distants;

3. Générer les stubs et skeletons

4. Créer le serveur RMI

5. Créer le client RMI

6. Déploiement Lancement , cette étape comporte les opérations suivantes:

 Lancer l’annuaire RMIREGISTRY

 Lancer le serveur

 Lancer le client

29/11/2020 S.CHOUGDALI 80
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Pour mieux comprendre le concept de la technologie RMI, nous allons réaliser


une application client-serveur RMI, dans ce cas le serveur offre les services
distants suivants:

 Fournir la valeur d’un montant en devise.

 Fournir la date du serveur.

Appliquer la démarche RMI traitée au cours et développer cette application

29/11/2020 S.CHOUGDALI 81
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape1:
• Création de l’interface qui comporte l’ensemble des services à distants offerts par le
serveur RMI.

 Créer un projet java sous le nom ProjetServeurRMI

 Sur la racine src du projet créer une Interface sous le nom InterfServiceDistant

29/11/2020 S.CHOUGDALI 82
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape2:
• Création d’une classe qui l’ensemble des services à distants offerts par le serveur RMI.

 Sur la racine src du projet créer une classe sous le nom ImplServiceDistant qui
implémente l’interface InterfServiceDistant et qui hérite la classe UnicastRemoteObject

29/11/2020 S.CHOUGDALI 83
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape3:

• Générer le Stub:

Se placer sur le répertoire bin du projet et créer le stub via la commande:


rmic ImplServiceDistant

29/11/2020 S.CHOUGDALI 84
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape4:

• Créer le serveur: Créer une classe java qui comporte la fonction main sous le
nom ServeurRMI
Créer l’objet distant

publier l’objet distant

29/11/2020 S.CHOUGDALI 85
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape5:

• Créer le client : créer un projet java sous le nom PROJ_CLIENT_RMI et copier


dans ce projet l’interface du service distant InterfServiceDistant ainsi le stub
ImplServiceDistant_Stub.class.
Instancier l’objet distant et
récupérer sa référence

29/11/2020 S.CHOUGDALI 86
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape6:
Déployer et tester le service distant:

 Lancer l’annuaire: Se placer dans le dossier bin du ProjetServeurRMI et exécuter la


commande start rmiregistry

 Lancer le serveur: Se placer dans le dossier bin du ProjetServeurRMI et exécuter la


commande start java ServeurRMI

29/11/2020 S.CHOUGDALI 87
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: Atelier encadré

Etape6:

Déployer et tester le service distant:

 Lancer et tester le client: Se placer dans le dossier bin du PROJ_CLIENT_RMI


et exécuter la commande java ClientRMI

29/11/2020 S.CHOUGDALI 88
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI: TP

Voir document word TP_MIAM_RMI

29/11/2020 S.CHOUGDALI 89
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI et JNDI

• JNDI est l'acronyme de Java Naming and Directory Interface.

• JNDI = API qui fournit une interface unique pour utiliser différents services
de nommages ou d'annuaires et définit un outil standard pour permettre
l'accès à ces services.

• Il existe plusieurs types de service de nommage tels que :


 DNS (Domain Name System) : service de nommage utilisé sur internet pour permettre la
correspondance entre un nom de domaine et une adresse IP.

 NIS (Network Information System) : service de nommage réseau développé par Sun
Microsystems

 COS Naming (Common Object Services) : service de nommage utilisé par CORBA pour
stocker et obtenir des références sur des objets CORBA

 RMI Registry : service de nommage utilisé par RMI

29/11/2020 S.CHOUGDALI 90
Chapitre 4: Plan de cours distribuées & RMI
Architecture

RMI et JNDI

• RMI peut utiliser autres services d'annuaire, y compris Java Naming and
Directory Interface (JNDI).

• JNDI inclut le service rmiregistry.

• Chaque machine (serveur) qui héberge des objets distants exécute ce registre.

• JNDI utilise le port 1099 par défaut.

• Un service de nommage permet d'associer un nom unique à un objet et de


faciliter ainsi l'obtention de cet objet.

• Un annuaire = représentation hiérarchique des objets + mécanisme efficace de


recherche.

• JNDI propose donc une abstraction pour permettre l'accès à ces différents
services de manière standard.
29/11/2020 S.CHOUGDALI 91
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Architecture JNDI
Application client Java
API JNDI
SPI JNDI
Pilote Pilote Pilote Pilote Autre
DNS LDAP RMI CORBA Pilote

DNS LDAP RMI CORBA Autre

• Annuaire JNDI = API JNDI + Service Provider Interface (SPI).


• SPI est une couche qui permet de relier d’une façon transparente plusieurs services de nommage
et d’annuaire.
• L’application Java peut bénéficier de l’ensembles des services et d’annuaire via l’API JNDI.
• JNDI a été inclus dans JDK standard depuis sa version 1.3.
• Pour pouvoir utiliser JNDI, il faut avoir les classes JNDI et au moins Une classe SPI.
• La version JDK 1.4 possède 3 SPI: Lightweight Directory Access Protocol (LDAP), COS de
CORBA et rmiregistry de RMI.

29/11/2020 S.CHOUGDALI 92
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Serveur RMI avec JNDI

Sur la racine (src) créer le fichier jndi.properties:

29/11/2020 S.CHOUGDALI 93
Chapitre 4: Plan de cours distribuées & RMI
Architecture

Client RMI avec JNDI sans fichier jndi.properties


import javax.naming.*;
import rmi.IBanque;
public class ClientRMI {
public static void main(String[] args) {
try {
Context ctx=new InitialContext();
ctx.addToEnvironment(Context.INITIAL_CONTEXT_FACTO
RY,
"com.sun.jndi.rmi.registry.RegistryContextFactor
y");
ctx.addToEnvironment("java.naming.provider.url",
"rmi://localhost:1099");
IBanque stub=(IBanque) ctx.lookup("BK");
System.out.println(stub.test("test"));
} catch (Exception e) {
e.printStackTrace();
}}}

29/11/2020 S.CHOUGDALI 94

Vous aimerez peut-être aussi