ExempleCh03_02_DeviseRetourTélécharger Exemple de création d'OD qui sont des devises monétaires Chaque devise est un objet distribué dont le nom est la concaténation des deux noms de monnaie. Le client uilise les devises à travers leurs méthodes distantes. README.txt Le Serveur exécute deux OD qui sont des devises monetaires. Chaque devise a le nom des monnaies. Pour compiler : ------------- javac *.java Pour executer : --------------- Pour executer le serveur java Serveur Dans une autre fenêtre de commande: java Client <vide ou adresse IP du serveur> Client.java // Client.java // Le client demande la saisie des montants monetaires et les convertit // en utilisant les méthodes distantes des objets distribues // import java.awt.*; import java.io.*; import java.net.*; /* Les packages de RMI */ import java.rmi.*; import java.rmi.server.*; public class Client { public static void main(String args[]) throws RemoteException,IOException,NotBoundException { // Adresse Ip ou nom de domaine du serveur String hostServeur="localhost"; if (args.length==1) hostServeur=args[0]; // Connexions aux deux devises créées sur le serveur DeviseInt francs_euro = (DeviseInt)Naming.lookup("rmi://"+hostServeur+":9100/FRANCS_EURO"); DeviseInt francs_dollars = (DeviseInt)Naming.lookup("rmi://"+hostServeur+":9100/FRANCS_DOLLARS"); // Programme de test d'utilisation des deux devises while (true) { double val,resultat; DataInputStream in = new DataInputStream(System.in); System.out.println("Conversion francs en euro"); System.out.print("Francs: "); System.out.flush(); val = Double.parseDouble(in.readLine()); resultat = francs_euro.convertir1(val); System.out.println("Euro: "+resultat); System.out.println("Conversion euro en frans"); System.out.print("Euro: "); System.out.flush(); val = Double.parseDouble(in.readLine()); resultat = francs_euro.convertir2(val); System.out.println("Franc: "+resultat); System.out.println("Conversion francs en dollars"); System.out.print("Francs: "); System.out.flush(); val = Double.parseDouble(in.readLine()); resultat = francs_dollars.convertir1(val); System.out.println("Dollars: "+resultat); System.out.println("Conversion dollars en francs"); System.out.print("Dollars: "); System.out.flush(); val = Double.parseDouble(in.readLine()); resultat = francs_dollars.convertir2(val); System.out.println("Franc: "+resultat); } } } Devise.java // Devise.java // Classe de definition d'un objet distribue de Devise dont le role est d'offrir // les services de conversion monetaire par deux méthodes distantes (dans les 2 sens) // Une devise est caracterisee par deux noms de monnaie et un taux de conversion. // import java.awt.*; import java.io.*; import java.net.*; /* Les packages de RMI */ import java.rmi.*; import java.rmi.server.*; public class Devise extends UnicastRemoteObject implements DeviseInt { private String nom1; private String nom2; private double taux; public Devise(String n1,String n2,double t) throws RemoteException { super(9101); nom1=n1; nom2=n2; taux=t; } public void setTaux(double t) { taux=t; } public double convertir1(double val) throws RemoteException { System.out.println("Appel de convertir 1"); return(val*taux); } public double convertir2(double val) throws RemoteException { return(val/taux); } public String getNom1() throws RemoteException { return(nom1); } public String getNom2() throws RemoteException { return(nom2); } } DeviseInt.java // DeviseInt.java // Interface de l'objet distribue Devise // L'interface permet de convertir dans les deux sens les monnaies et // permet de connaitre les noms des monnaies de la devise // import java.rmi.*; public interface DeviseInt extends Remote { public double convertir1(double val) throws RemoteException; public double convertir2(double val) throws RemoteException; public String getNom1() throws RemoteException; public String getNom2() throws RemoteException; } Serveur.java // Serveur.java // Le serveur cree deux objets distribues de devise : FRANCS/EURO et FRANCS/DOLLARS // Il permet aussi de changer dynamiquement le taux de la devise FRANCS/DOLLARS // import java.io.*; import java.awt.*; import java.net.*; /* Les packages de RMI */ import java.rmi.*; import java.rmi.server.*; import java.rmi.registry.*; public class Serveur { public static void main(String args[]) throws RemoteException,ServerNotActiveException,MalformedURLException, IOException { // Creation de l'annuaire s'il n'existe pas déjà try{ LocateRegistry.createRegistry(9100); } catch(Exception ex){}; // Creation de deux objets distribués // 1 pour chaque conversion de monnaie // Devise devise1 = new Devise("FRANCS","EURO",1.0/6.56); Naming.rebind("rmi://localhost:9100/FRANCS_EURO",devise1); Devise devise2 = new Devise("FRANCS","DOLLARS",0.98); Naming.rebind("rmi://localhost:9100/FRANCS_DOLLARS",devise2); System.out.println("Services enregistres pour le serveur"); /* On permet d'intervenir sur le serveur */ while (true) { DataInputStream in = new DataInputStream(System.in); System.out.print("Nouveau taux pour francs-dollars: "); System.out.flush(); double t = Double.parseDouble(in.readLine()); devise2.setTaux(t); } } } compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin *.java pause runClient.bat cd bin java Client pause runServeur.bat cd bin java Serveur pause