Projet gestion d'objets dupliqués



Documents pareils
RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Remote Method Invocation (RMI)

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Héritage presque multiple en Java (1/2)

Chapitre 2. Classes et objets

Projet de Veille Technologique

RMI le langage Java XII-1 JMF

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Introduction à la programmation concurrente

TP1 : Initiation à Java et Eclipse

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Java Naming and Directory Interface

Remote Method Invocation en Java (RMI)

Synchro et Threads Java TM

Le Network File System de Sun (NFS)

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

Auto-évaluation Programmation en Java

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Le passage à l échelle de serveur J2EE : le cas des EJB

Threads. Threads. USTL routier 1

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

EXA1415 : Annotations

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

WEA Un Gérant d'objets Persistants pour des environnements distribués

Gestion distribuée (par sockets) de banque en Java

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Implémentation des SGBD

DNS ( DOMAIN NAME SYSTEM)

INITIATION AU LANGAGE JAVA

Module BDR Master d Informatique (SAR)

Bases de données et sites WEB Licence d informatique LI345

Conception de serveurs d'applications ouverts

Cours 6 : Tubes anonymes et nommés

Introduction : les processus. Introduction : les threads. Plan

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

LOG4430 : Architecture et conception avancée

Calcul Parallèle. Cours 5 - JAVA RMI

Dis papa, c est quoi un bus logiciel réparti?

Traduction des Langages : Le Compilateur Micro Java

Architecture d un service de partage de données modifiables sur une infrastructure pair-à-pair

Intergiciel - concepts de base

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

JOnAS Day 5.1. Clustering

Développement Logiciel

Web Tier : déploiement de servlets

Java DataBaseConnectivity


Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

SYSTÈME DE GESTION DE FICHIERS

Les transactions 1/46. I même en cas de panne logicielle ou matérielle. I Concept de transaction. I Gestion de la concurrence : les solutions

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Généralités sur le Langage Java et éléments syntaxiques.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Application web de gestion de comptes en banques

Protocole d accès général

SYSTÈME DE GESTION DE FICHIERS SGF - DISQUE

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Cours Bases de données 2ème année IUT

Exercices INF5171 : série #3 (Automne 2012)

Un ordonnanceur stupide

4. Groupement d objets

Introduction aux Systèmes et aux Réseaux

Présentation Alfresco

Certificat Big Data - Master MAthématiques

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Systèmes et algorithmes répartis

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Problèmes liés à la concurrence

Intergiciels pour la répartition CORBA : Common Object Request Broker. Patrice Torguet torguet@irit.fr Université Paul Sabatier

TD2 Programmation concurrentielle

Gestion des transactions et accès concurrents dans les bases de données relationnelles

Cours de Systèmes d Exploitation

Proxy et reverse proxy. Serveurs mandataires et relais inverses

CORBA. (Common Request Broker Architecture)

Corrigés des premiers exercices sur les classes

Cours de Base de Données Cours n.12

Environnements de développement (intégrés)

JavaServer Pages (JSP)

Conception des systèmes répartis

Windows Internet Name Service (WINS)

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

2 Chapitre 1 Introduction

Mise en place Active Directory / DHCP / DNS

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

Chapitre 10. Les interfaces Comparable et Comparator 1

LES NOUVEAUTES DE COST AND PROFITABILITY MANAGEMENT 8.1

Programmation par composants (1/3) Programmation par composants (2/3)

Chapitre VI- La validation de la composition.

OS Réseaux et Programmation Système - C5

Principes. 2A-SI 3 Prog. réseau et systèmes distribués 3. 3 Programmation en CORBA. Programmation en Corba. Stéphane Vialle

La carte à puce. Jean-Philippe Babau

.NET remoting. Plan. Principes de.net Remoting

Projet de programmation (IK3) : TP n 1 Correction

Remote Method Invocation Les classes implémentant Serializable

Cours 1: Java et les objets

Transcription:

Projet gestion d'objets dupliqués Daniel Hagimont Daniel.Hagimont@enseeiht.fr 1

Projet Service de gestion d'objets dupliqués Mise en cohérence lors de la prise d'un verrou sur un objet Pas de verrous imbriqués Protocole à invalidation (write-invalidate) N lecteurs, 1 écrivain 2

Architecture SharedObject Application ServerObject Server 3

Verrous non retirables + cache Un client obtient un verrou en lecture ou écriture : il le conserve jusqu'à ce qu'il décide explicitement de le relâcher Verrou lecture/écriture : soit un écrivain seul, soit plusieurs lecteurs sans écrivain Verrou en cache : quand un client relâche un verrou : Il n'informe pas le serveur Il pourra (éventuellement) reprendre le verrou sans demander au serveur 4

Principe Quand un client demande un verrou qu'il n'a pas en cache : il le demande au serveur Le serveur sait quel(s) client(s) a(ont) le verrou et dans quel mode (lecture ou écriture) Le serveur peut réclamer les verrous auprès des clients (callback) Le serveur ne préempte pas les verrous d'un client : c'est le client qui choisit quand il relâche le verrou Quand le serveur sait que le verrou est libre, il peut l'attribuer au demandeur 5

SharedObject SharedObject : descripteur d objet une référence à un objet partagé pointe sur un SharedObject champ obj pointe sur l objet effectif contient un id unique par rapport au serveur primitives de verrouillage : lock_read(), () et unlock() utilisation (SharedObject S) : S.lock_read(); S.obj.meth(); // avec casting adéquat... S.unlock(); 6

SharedObject SharedObject : descripteur d objet Un attribut lock indique l état du verrouillage de l objet sur le site : NL : no local lock RLC : read lock cached (not taken) WLC : write lock cached (not taken) RLT : read lock taken WLT : write lock taken RLT_WLC : read lock taken and write lock cached Si besoin d interagir avec le serveur, on utilise les fonctions de la couche Méthodes statiques Appelées depuis SharedObject 7

Couche Méthodes statiques Appelées depuis SharedObject Appels locaux static Object lock_read (int id) : demande d un verrou en lecture au serveur, en lui passant l identifiant unique de l objet (le SharedObject devait être en NL). Retourne l état de l objet. static Object (int id) : demande d'un verrou en écriture au serveur, en lui passant l identifiant unique de l objet (le SharedObject devait être en NL ou RLC). Retourne l état de l objet si le SharedObject était en NL. Redirigent les appels vers le serveur Ajoute une référence au client pour rappel 8

Le serveur Reçoit les appels des clients (couche ) Appels a distance (RMI) public Object lock_read(int id, _itf c); public Object (int id, _itf c); Redirige chaque appel vers le ServerObject associé 9

ServerObject Reçoit les appels du serveur Appels locaux public Object lock_read(_itf c); public Object (_itf c); 10

ServerObject Mémorise l état de l objet partagé Id de l objet Mode de verrouillage (read/write) Le ou les sites clients (pour les rappeler ) Il peut rappeler un site client (interface _itf) 11

Reçoit les rappels du serveur Appels à distance (RMI) void invalidate_reader(int id) Object invalidate_writer(int id) Object reduce_lock(int id) Redirige chaque appel vers le SharedObject associé 12

SharedObject Reçoit les appels du client Appels locaux void invalidate_reader() Object invalidate_writer() Object reduce_lock() 13

Service de nommage Appelable à travers la couche Méthodes statiques static void init() : initialise la couche cliente, à appeler au début de l application. static SharedObject create (Object o) : permet de créer un objet partagé (en fait un descripteur) initialisé avec l objet o. Le descripteur de l objet partagé est retourné. A la création, l objet n'est pas verrouillé. static SharedObject lookup (String n) : consulte le serveur de nom et retourne l objet partagé enregistré. static void register (String n, SharedObject so) : enregistre un objet partagé dans le serveur de noms. Doit être implanté coté serveur pour être partagé 14

Vue globale lock_read invalidate_reader invalidate_writer reduce_lock Serveur 15

Cas de figure 1 Etat avant Etat après lock_read RLC RLT RL RL Serveur 16

Cas de figure 2 lock_read NL RLT lock_read NL Serveur RL 17

Cas de figure 3 lock_read NL RLT RLT lock_read RL RL Serveur 18

Cas de figure 4 lock_read NL RLT WLC RLC lock_read reduce_lock WL Serveur RL 19

Cas de figure 5 lock_read WLC RLT_WLC WL Serveur WL 20

Cas de figure 6 lock_read NL RLT RLT_WLC RLT lock_read reduce_lock WL Serveur RL 21

Cas de figure 7 NL WLT RLC NL invalidate_reader RL Serveur WL 22

Cas de figure 8 NL WLT WLC NL invalidate_writer WL Serveur WL 23

Cas de figure 9 RLC WLT RLC NL invalidate_reader RL Serveur WL 24

Cas de figure 10 RLC WLT RLT NL invalidate_reader Blocage jusqu'à unlock RL Serveur WL 25

Cas de figure 11 RLC NL invalidate_reader RL Serveur 26

lock_read Point de vue serveur Pour un objet partagé lock_read No Lock lock_read Read Locked Write Locked 27

Point de vue client Pour un objet partagé reduce_lock invalidate_reader NL lock_read RLT unlock lock_read RLC reduce_lock invalidate_writer unlock WLT WLC RLT_WLC lock_read unlock Appel par le code utilisateur Appel par le serveur (callback) 28

Gestion des attentes de verrous Quand le serveur réclame un verrou au client (invalidate_reader/invalidate_writer/reduce _lock) Si le verrou est tenu. Il faut attendre Dans le client : Méthodes synchronized public void wait() : attente notification sur l objet public void notify() : notification sur l objet Un unlock appelle notify() Une réclamation (dans SharedObject) appelle wait() si le verrou est tenu 29

Projet gestion d objets dupliqués Une application de test (Irc) Irc Irc Irc Sentence s.lock_read() ((Sentence)(s.obj)).read(); s.unlock() s.() ((Sentence)(s.obj)).write(); s.unlock() 30

Travail à réaliser Etape 1 Implanter le service à objets dupliqués Utilisation explicite des SharedObject Plusieurs applications peuvent accéder au service de façon concurrente : synchronisation Pas stockage de référence à des SharedObject dans les SharedObject Respecter strictement les interfaces externes!!! Pas de packages 31

Travail à réaliser Etape 1 Couche : les méthodes statiques, service de nommage, redirection vers le serveur Objet réparti pour l'interface de rappel : redirection vers le SharedObject concerné Serveur Objet réparti : redirection vers le ServerObject concerné Serveur de nom SharedObject et ServerObject : protocole de cohérence 32

Travail à réaliser Etape 2 Génération de stub pour fournir la transparence d'accès aux objets Stub généré à partir d'une interface Java Interface d'introspection de Java Un stub fournit La même interface que l'objet qu'il représente Les primitives de verrouillage Sentence_itf s = (Sentence_itf).lookup ("sentence"); s.lock_read(); s.read(); s.unlock(); 33

Travail à réaliser Etape 2 Sentence_itf hérite de SharedObject_itf Sentence n'implémente pas Sentence_itf Sentence_stub hérite de SharedObject Sentence_stub implémente Sentence_itf Sentence_itf s = (Sentence_itf).lookup ("sentence"); s.lock_read(); s.read(); s.unlock(); 34

Travail à réaliser Etape 2 public static SharedObject lookup(string name); public static void register(string name, SharedObject_itf so); public static SharedObject create(object o); On peut même faire un système d'annotations : public interface Sentence_itf { @write public void write(string text); @read public String read(); } Sentence_itf s = (Sentence_itf).lookup(...) ; s.read(); 35

Travail à réaliser Etape 3 Prendre en compte le stockage de référence à des SharedObject dans les SharedObject Spécialiser les primitives de sérialisation Sérialisation d'un stub Ne pas copier l'objet référencé Désérialisation d'un stub Installer le stub sur la machine de façon cohérente (sans doublons) 36

Evaluation Suivi de l'avancement régulier de votre projet Evaluation finale Démonstration Utilisation de nos programmes de test (respectez les interfaces : pour l'étape 1, Irc.java doit compiler et fonctionner sans le moindre changement) 37