Exercice d application en Java RMI

Documents pareils
RMI le langage Java XII-1 JMF

Remote Method Invocation (RMI)

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

Remote Method Invocation Les classes implémentant Serializable

Remote Method Invocation en Java (RMI)

Calcul Parallèle. Cours 5 - JAVA RMI

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Synchro et Threads Java TM

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Corrigé des exercices sur les références

Programmation réseau avec Java. 3/7 RMI, un peu de sécurité et CORBA

Programme Compte bancaire (code)

Programmation répartie RPC & RMI

Conception de serveurs d'applications ouverts

Programmer en JAVA. par Tama

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Intergiciel - concepts de base

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

Modèle client-serveur Plan. Modèle client-serveur. Modèle client-serveur définition. Modèle client-serveur communication par messages.

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation Objet Java Correction

Premiers Pas en Programmation Objet : les Classes et les Objets

Auto-évaluation Programmation en Java

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Programmation par les Objets en Java

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Création d une application JEE

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Corrigés des premiers exercices sur les classes

Une introduction à Java

Java Licence Professionnelle CISII,

Manuel d implémentation des Web Services Sous Axis1 et Axis2/Tomcat/linux. Par Pr Bouabid EL OUAHIDI

Package Java.util Classe générique

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation Par Objets

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

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Développement, déploiement et sécurisation d'applications JEE

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

TP1 : Initiation à Java et Eclipse

Utiliser Java sans BlueJ

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

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

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

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

Java DataBaseConnectivity

PROGRAMMATION PAR OBJETS

Introduction au langage Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Projet de programmation (IK3) : TP n 1 Correction

ACTIVITÉ DE PROGRAMMATION

OpenPaaS Le réseau social d'entreprise

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

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

Un ordonnanceur stupide

TD/TP PAC - Programmation n 3

Tp 1 correction. Structures de données (IF2)

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

TP, première séquence d exercices.

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Plan du cours. Historique du langage Nouveautés de Java 7

Java Licence professionnelle CISII,

Java 1.5 : principales nouveautés

Threads. Threads. USTL routier 1

Exercices sur les interfaces

INITIATION AU LANGAGE JAVA

Objets et Programmation. origine des langages orientés-objet

Systeme d'exploitation

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Cours 1: Java et les objets

Développement Logiciel

Chapitre VI- La validation de la composition.

Flux de données Lecture/Ecriture Fichiers

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Traitement de données

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TD3: tableaux avancées, première classe et chaînes

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

TP1. Outils Java Eléments de correction

Langage à objets : JAVA (1)

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Applet pour visualiser les variables «automate» notifiées

Initiation à JAVA et à la programmation objet.

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

La JVM. La machine virtuelle Java. La JVM. La JVM

Introduction : les processus. Introduction : les threads. Plan

Interfaces graphiques avec l API Swing

La base de données XML exist. A. Belaïd

7 Développement d une application de MapReduce

Projet gestion d'objets dupliqués

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Chapitre I Notions de base et outils de travail

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Transcription:

1 Exercice d application en Java RMI Nous disposons d un service qui offre des opérations de gestion de son compte courant. Voici le code des méthodes offertes par ce service : void debiter(double montant) void crediter(double montant) double lire_solde() 1. On souhaite rendre chacune de ces méthodes accessibles à distance de manière à ce qu elles définissent l interface entre le client et le serveur. Ecrire cette interface. 2. Déduire la classe qui matérialise le service qui offre les opérations debiter(), crediter() et lire_solde(). 3. Compléter le fichier suivant : Serveur.java pour permettre l enregistrement du service auprès de RMI Registry. import java.rmi.server.*; public class Serveur public static void main(string[] args) try System.out.println("Serveur : Construction de l implémentation"); Compte cpt= new Compte(15.50); System.out.println("Objet Compte enregistré dans RMIregistry"); // a completer System.out.println("Attente des invocations des clients "); catch (Exception e) System.out.println("Erreur de liaison de l'objet Compte");

2 // fin du main // fin de la classe 4. Générer tous les fichiers nécessaires au lancement du Serveur. 5. Lancer la suite de commandes ayant pour finalité le lancement du serveur. 6. Compléter le programme du client Client.java qui doit être lancé à partir d un autre répertoire ou d une autre machine. import java.io.*; class Client public static void main (String [] argv) throws IOException if(argv.length!= 2) System.out.println("Usage : java Client <nombre> <operation>"); System.exit(1); // operation = 1: credit, 2: dedit System.setSecurityManager(new RMISecurityManager()); double valeur = Double.parseDouble(argv[0]); int operation = Integer.parseInt(argv[1]); try // a completer : CompteInterface cpt = if (operation==1) cpt.crediter(valeur); if (operation ==2) cpt.debiter(valeur); System.out.println ("Votre solde courant = " + cpt.lire_solde() + " euros"); catch (Exception e) System.out.println("Erreur d'acces a un objet distant");

3 1. La structure de la classe interface CompteInterface est la suivante. Tous les champs en gras sont obligatoires. import java.rmi.remote; import java.rmi.remoteexception; public interface CompteInterface extends java.rmi.remote ; void debiter(double montant) throws java.rmi.remoteexception; void crediter(double montant) throws java.rmi.remoteexception; double lire_solde() throws java.rmi.remoteexception; 2. La structure de la classe d implémentation Compte est la suivante. Tous les champs en gras sont obligatoires. import java.rmi.server.*; public class Compte extends UnicastRemoteObject implements CompteInterface private double solde; public Compte(double s) throws java.rmi.remoteexception super(); solde=s; public void crediter(double montant) throws java.rmi.remoteexception solde=solde+montant; public void debiter(double montant) throws java.rmi.remoteexception solde=solde-montant; public double lire_solde() throws java.rmi.remoteexception return solde; 3. La classe Serveur est la suivante :

4 import java.rmi.server.*; public class Serveur public static void main(string[] args) try System.out.println("Serveur : Construction de l implémentation"); Compte cpt= new Compte(15.50); System.out.println("Objet Compte enregistré dans RMIregistry"); Naming.rebind("rmi://machine.cnam.fr:1099/CompteCourant", cpt); System.out.println("Attente des invocations des clients "); catch (Exception e) System.out.println("Erreur de liaison de l'objet Compte"); // fin du main // fin de la classe 4. Si le service de noms doit être activé sur un port différent de 1099, par exemple 2001, alors il faudra que l objet Compte soit enregistré sur le serveur rmiregistry lancé sur le numéro de port 2001. Comme l enregistrement est fait par le serveur d objets, on doit modifier la ligne suivante de la classe Serveur : Naming.rebind("rmi://machine.cnam.fr:1099/CompteCourant", cpt); Par la ligne suivante : Naming.rebind("rmi://machine.cnam.fr:2001/CompteCourant", cpt); D abord compiler les programmes Java (l interface, l objet et le serveur). Machine_serveur> javac *.java On obtient des fichiers.class Machine_serveur> ls CompteInterface.java Compte.java Serveur.java CompteInterface.class Compte.class Serveur.class fichier.policy Générer le stub associé à l objet Compte: Machine_serveur> rmic v1.2 Compte Machine_serveur> ls CompteInterface.java Compte.java Serveur.java fichier.policy CompteInterface.class Compte.class Serveur.class Compte_Stub.class

5 2001& Lancer le service de noms (rmiregistry) qui va accueillir les références des objets distribués. Mais pour cela, il doit utiliser une politique de sécurité définie dans un fichier, par exemple fichier.policy. Machine_serveur>more fichier.policy grant permission java.security.allpermission; ; Machine_serveur> A la lecture de fichier.policy, on déduit que rmiregistry accepte une requête de n importe quel programme client, sans restriction sur les numéros de port. L activation du service de noms nécessite de spécifier le fichier de sécurité utilisé. Sous Unix/Linux : Machine_serveur>rmiregistry -J-Djava.security.policy=fichier.policy Sous Windows : Machine_serveur>start rmiregistry -J-Djava.security.policy=fichier.policy 2001& Une fois le service de noms lancé, on peut lancer le serveur d objets qui va créer l objet distribué et qui va l enregistrer auprès de rmiregistry afin que tout programme client qui demande la référence à cet objet puisse l obtenir en la demandant au service de noms. Machine_serveur>java Serveur & Compte enregistré dans RMIregistry Attente des invocations des clients 6. Voici un exemple de programme client : import java.io.*; class Client public static void main (String [] argv) throws IOException if(argv.length!= 2) System.out.println("Usage : java Client <nombre> <operation>"); System.exit(1); // operation = 1: credit, 2: dedit System.setSecurityManager(new RMISecurityManager()); double valeur = Double.parseDouble(argv[0]); int operation = Integer.parseInt(argv[1]); try CompteInterface cpt= (CompteInterface) Naming.lookup ("rmi://machine_serveur.cnam.fr:1099/comptecourant");

6 if (operation==1) cpt.crediter(valeur); if (operation ==2) cpt.debiter(valeur); System.out.println ("Votre solde courant = " + cpt.lire_solde() + " euros"); catch (Exception e) System.out.println("Erreur d'acces a un objet distant"); Le répertoire du programme client doit contenir les interfaces distantes utilisées par le client ainsi que le stub de l objet distant, qui est le représentant local de cet objet. MachineClient>ls Client.java CompteInterface.class Compte_Stub.class fichier.policy MachineClient>javac Client.java Ensuite lancer l exécution du client en spécifiant la même politique de sécurité que celle du registre rmi. MachineClient>java -Djava.security.policy=fichier.policy Client 11.50 1 MachineClient> Votre solde courant = 4 euros Remarque : Pour les différents tests en local, remplacer les noms des machines du serveur et du client par «localhost».