Cours d'Informatique
par Jacques LAFORGUE
Home
NFA 031
Présentation
Calendrier
Cours
Exemples
Exercices
Outils
Projets
Examens
NFA 032
Présentation
Calendrier
Cours
Exemples
Exercices
Projets
Examens
NFP 121
Présentation
Calendrier
Cours
Exemples
Exercices
Projets
Examens
NSY 102
Présentation
Calendrier Jour
Calendrier Soir
Cours
Exemples
Exercices
Examens
NSY 205
Présentation
Calendrier
Cours
Exemples
Exercices
Examens
Exemple11_FactoryDevise
Retour
Télécharger
Exemple d'un facory simple de création et stockage des devises monétaires.
Chaque devise est un stub géré par le factory
README.txt
Le Serveur exécute un OD qui est un factory de devises monétaires. Les devises peuvent être créées à distance. Les devises sont utilisées à distance. Les devises sont des stubs et ne sont pas enregistrées dans un annuaire. C'est le factory qui stocke les stubs. 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 utilise le factory distant pour : // - creer deux nouvelles devises par defaut // - permet de créer une nouvelle devise et la tester // 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]; // Connexion au factory de devise FactoryDeviseInt fact = (FactoryDeviseInt)Naming.lookup("rmi://"+hostServeur+":9100/DEVISES"); // Création à distance de deux devises par défaut fact.creerDevise("FRANCS","EURO",1.0/6.56); fact.creerDevise("FRANCS","DOLLARS",0.98); // Programme de test de creation de devise et // d'utilisation des devises // while (true) { double val,resultat; DataInputStream in = new DataInputStream(System.in); System.out.println("Creer un devise (o,n) ?"); String rep = in.readLine(); if (rep.equals("o")) { System.out.print("Nom1 : "); String nomd1 = in.readLine(); System.out.print("Nom2 : "); String nomd2 = in.readLine(); System.out.print("Taux : "); double taux = Double.parseDouble(in.readLine()); fact.creerDevise(nomd1,nomd2,taux); } System.out.println("Conversion de "); String nom1 = in.readLine(); System.out.println("vers "); String nom2 = in.readLine(); DeviseInt devise = fact.getDevise(nom1,nom2); System.out.print(nom1+" : "); System.out.flush(); val = Double.parseDouble(in.readLine()); resultat = devise.convertir1(val); System.out.println(nom2+" : "+resultat); } } }
Devise.java
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 { 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
/* ============================================== FIC : DeviseInt.java ROL : Interface d'une devise AUT : JL DAT : 05/01/02 COM : ============================================== */ 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; }
FactoryDevise.java
// FactoryDevise.java // Le factory de devise est un OD qui permet de créer a distance // une nouvelle devise qui est aussi un OD // Il permet aussi d'obtenir le stub de n'importe quelle devise. // import java.awt.*; import java.io.*; import java.net.*; import java.util.*; /* Les packages de RMI */ import java.rmi.*; import java.rmi.server.*; public class FactoryDevise extends UnicastRemoteObject implements FactoryDeviseInt { // Stockage des OD qui sont des devises indexées par les noms de change // private Hashtable<String,Devise> devises; // Constructeur public FactoryDevise() throws RemoteException { super(9101); devises = new Hashtable<String,Devise>(); } // Creation distante d'une devise public void creerDevise(String nom1, String nom2,double taux) throws RemoteException { System.out.println("Creation d'une devise: "+nom1+" "+nom2); Devise devise = new Devise(nom1,nom2,taux); devises.put(nom1+"_"+nom2,devise); } // Retourne le stub d'une devise pour le client public DeviseInt getDevise(String nom1, String nom2) throws RemoteException { try{ Devise devise = devises.get(nom1+"_"+nom2); Remote stub = UnicastRemoteObject.toStub((Remote)devise); return((DeviseInt)stub); }catch(NoSuchObjectException ex){return null;} } }
FactoryDeviseInt.java
// FactoryDeviseInt.java // L'interface du factory qui definit ses services import java.rmi.*; public interface FactoryDeviseInt extends Remote { public void creerDevise(String nom1, String nom2,double taux) throws RemoteException; public DeviseInt getDevise(String nom1, String nom2) throws RemoteException; }
Serveur.java
// Serveur.java // Le serveur cree l'annuaire, cree le factory et l'enregistre dans l'annuaire // 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 du factory de devise // Naming.rebind("rmi://localhost:9100/DEVISES", new FactoryDevise()); } }
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
Présentation
Calendrier
Cours
Exemples
Exercices
Outils
Projets
Examens
Présentation
Calendrier
Cours
Exemples
Exercices
Projets
Examens
Présentation
Calendrier
Cours
Exemples
Exercices
Projets
Examens
Présentation
Calendrier Jour
Calendrier Soir
Cours
Exemples
Exercices
Examens
Présentation
Calendrier
Cours
Exemples
Exercices
Examens
Cours d'Informatique
par Jacques LAFORGUE
Home
NFA 031
Présentation
Calendrier
Cours
Exemples
Exercices
Outils
Projets
Examens
NFA 032
Présentation
Calendrier
Cours
Exemples
Exercices
Projets
Examens
NFP 121
Présentation
Calendrier
Cours
Exemples
Exercices
Projets
Examens
NSY 102
Présentation
Calendrier Jour
Calendrier Soir
Cours
Exemples
Exercices
Examens
NSY 205
Présentation
Calendrier
Cours
Exemples
Exercices
Examens