TD3: Add code skeleton for the hostel reservations though RMI.
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 16 Mar 2018 15:22:09 +0000 (16:22 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Fri, 16 Mar 2018 15:22:09 +0000 (16:22 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
TD3/hotel/ChaineHotels.java [new file with mode: 0644]
TD3/hotel/ChaineHotelsClientRMI.java [new file with mode: 0644]
TD3/hotel/ChaineHotelsInterface.java [new file with mode: 0644]
TD3/hotel/ChaineHotelsServeurRMI.java [new file with mode: 0644]
TD3/hotel/ExceptionChambresIndispo.java [new file with mode: 0644]
TD3/hotel/ExceptionNumReservation.java [new file with mode: 0644]
TD3/hotel/Infos.java [new file with mode: 0644]
TD3/hotel/Readme.txt [new file with mode: 0644]
TD3/hotel/security.policy [new file with mode: 0644]

diff --git a/TD3/hotel/ChaineHotels.java b/TD3/hotel/ChaineHotels.java
new file mode 100644 (file)
index 0000000..990cfb7
--- /dev/null
@@ -0,0 +1,52 @@
+package hotel;
+
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.HashMap;
+
+
+/**
+ * Applications reparties
+ * TP - Exercice 
+ * Chaine d'hotels
+ * 
+ * Classe d'un futur objet serveur (servant) de l'application chaine d'hotels
+ * 
+ * @author Toto
+ * @version 1.0
+ */
+public class ChaineHotels { //TODO completer la declaration de la classe
+
+       //TODO completer la declaration de chaque methode
+
+       private static final long serialVersionUID = -2066714609302506667L;
+       
+       HashMap<Integer, Infos> lesReservations = null;
+       Integer numLibre;
+       
+       public ChaineHotels() {
+               this.lesReservations = new HashMap<Integer, Infos>();
+               this.numLibre = 0;
+       }
+
+       public void annuler(int numReservation) {
+               if(this.lesReservations.containsKey(new Integer(numReservation))==false) 
+                       throw new ExceptionNumReservation();
+               else this.lesReservations.remove(new Integer(numReservation));
+       }
+
+       public Infos lister(int numReservation) {
+               if(this.lesReservations.containsKey(new Integer(numReservation))==false) 
+                       throw new ExceptionNumReservation();
+               else return this.lesReservations.get(new Integer(numReservation));
+       }
+
+       public int reserver(String nomClient, String nomHotel, String date, int nbchambres) {
+               //il faudrait verifier que les chambres sont disponibles...
+               Infos infos = new Infos(nomClient, nomHotel, date, nbchambres);
+               this.numLibre++;
+               if(this.lesReservations.put(new Integer(this.numLibre), infos) == null) return 0;
+               else return this.lesReservations.size();
+       }
+       
+}
diff --git a/TD3/hotel/ChaineHotelsClientRMI.java b/TD3/hotel/ChaineHotelsClientRMI.java
new file mode 100644 (file)
index 0000000..d6b3235
--- /dev/null
@@ -0,0 +1,78 @@
+package hotel;
+
+import java.io.IOException;
+import java.rmi.Naming;
+import java.rmi.NotBoundException;
+import java.rmi.RMISecurityManager;
+
+
+/**
+ * Applications reparties
+ * TP - Exercice
+ * Chaine d'hotels
+ * 
+ * Programme client RMI
+ * 
+ * @author Toto
+ * @version 1.0
+ */
+public class ChaineHotelsClientRMI {
+
+
+       /**
+        * Nom par defaut de la machine ou tourne le registre RMI
+        */
+       private static String DEFAULT_HOST = "localhost";
+
+       /**
+        * Port par defaut du registre RMI distant
+        */
+       private static int DEFAULT_REGISTRY_PORT = 1099;
+
+
+       /**
+        * Programme principal (les arguments sont optionnels)
+        * @param args[0] Nom du serveur
+        * @param args[1] Port du serveur
+        */
+       public static void main(String[] args) {
+               String server = null;
+               int port = -1;
+
+               if(args.length != 2) {
+                       System.out.println("Usage: java ChaineHotelsClientRMI NomServeur PortServeur");
+                       System.out.println("Utilisation du nom de serveur et du port par defaut ("+DEFAULT_HOST+":"+DEFAULT_REGISTRY_PORT+")");
+                       server = DEFAULT_HOST;
+                       port = DEFAULT_REGISTRY_PORT;
+               }
+               else {
+                       try {
+                               server = args[0];
+                               port = Integer.parseInt(args[1]);
+                       }
+                       catch(NumberFormatException nfe) {
+                               nfe.printStackTrace();
+                               System.exit(1);
+                       }
+               }
+
+               try {
+
+                       /********************/
+                       //TODO
+                       /********************/
+
+               } catch (ExceptionChambresIndispo ec) {
+                       System.err.println("Erreur : "+ec);
+               } catch (ExceptionNumReservation en) {
+                       System.err.println("Erreur : "+en);
+               } catch (IOException ioe) { 
+                       System.err.println("Erreur : "+ioe);
+                       ioe.printStackTrace();
+               } catch (NotBoundException nbe) {
+                       System.err.println("Erreur : "+nbe);
+                       nbe.printStackTrace();
+               }
+       }
+
+}
diff --git a/TD3/hotel/ChaineHotelsInterface.java b/TD3/hotel/ChaineHotelsInterface.java
new file mode 100644 (file)
index 0000000..d4c4af0
--- /dev/null
@@ -0,0 +1,21 @@
+package hotel;\r
+\r
+import java.rmi.Remote;\r
+import java.rmi.RemoteException;\r
+\r
+\r
+/**\r
+ * Applications reparties\r
+ * TP - Exercice\r
+ * Chaine d'hotels\r
+ * \r
+ * Interface de la chaine d'hotel\r
+ * \r
+ * @author Toto\r
+ * @version 1.0\r
+ */\r
+public interface ChaineHotelsInterface { //TODO completer la declaration\r
+\r
+       //TODO completer l'interface\r
+\r
+}\r
diff --git a/TD3/hotel/ChaineHotelsServeurRMI.java b/TD3/hotel/ChaineHotelsServeurRMI.java
new file mode 100644 (file)
index 0000000..eb93ba3
--- /dev/null
@@ -0,0 +1,69 @@
+package hotel;
+
+import java.net.MalformedURLException;
+import java.rmi.Naming;
+import java.rmi.RMISecurityManager;
+import java.rmi.RemoteException;
+
+/**
+ * Applications reparties
+ * TP - Exercice
+ * Chaine d'hotels
+ * 
+ * Programme serveur RMI
+ * 
+ * @author Toto
+ * @version 1.0
+ */
+public class ChaineHotelsServeurRMI {
+
+
+       private static int DEFAULT_REGISTRY_PORT = 1099;
+
+
+       /**
+        * Constructeur par defaut
+        */
+       public ChaineHotelsServeurRMI() {
+       }
+
+
+       /**
+        * Programme principal
+        * args[0] Port du registre rmi
+        */
+       public static void main(String[] args) {
+               ChaineHotels hotels;
+               int port = -1;
+
+               if(args.length != 1) {
+                       System.out.println("Usage: java ChaineHotelServeurRMI Port");
+                       System.out.println("Utilisation du port par defaut ("+DEFAULT_REGISTRY_PORT+")");
+                       port = DEFAULT_REGISTRY_PORT;
+               }
+               else { 
+                       try {
+                               port = Integer.parseInt(args[0]);
+                       }
+                       catch(NumberFormatException nfe) {
+                               nfe.printStackTrace();
+                               System.exit(1);
+                       }
+               }
+               
+               try {
+                       /*************************/
+                       //TODO
+                       /*************************/
+               }
+               catch (RemoteException e) {
+                       System.err.println("Serveur : erreur\n"+e.getMessage());
+                       e.printStackTrace();
+               } 
+               catch (MalformedURLException e) {
+                       System.err.println("Serveur : erreur\n"+e.getMessage());
+                       e.printStackTrace();
+               }
+       }
+
+}
diff --git a/TD3/hotel/ExceptionChambresIndispo.java b/TD3/hotel/ExceptionChambresIndispo.java
new file mode 100644 (file)
index 0000000..0cf161e
--- /dev/null
@@ -0,0 +1,28 @@
+package hotel;\r
+\r
+/**\r
+ * Applications reparties\r
+ * TP - Exercice\r
+ * Chaine d'hotels\r
+ * \r
+ * Exception liee a la non disponibilite\r
+ * \r
+ * @author Toto\r
+ * @version 1.0\r
+ */\r
+public class ExceptionChambresIndispo extends Exception {\r
+\r
+       private static final long serialVersionUID = 5269715160970930660L;\r
+\r
+       String message;\r
+       \r
+       public ExceptionChambresIndispo() {\r
+               super();\r
+               message = "Erreur: chambre(s) indisponible(s)";\r
+       }\r
+       \r
+       public String toString() {\r
+               return message;\r
+       }\r
+       \r
+}\r
diff --git a/TD3/hotel/ExceptionNumReservation.java b/TD3/hotel/ExceptionNumReservation.java
new file mode 100644 (file)
index 0000000..cb8dbde
--- /dev/null
@@ -0,0 +1,28 @@
+package hotel;\r
+\r
+/**\r
+ * Applications reparties\r
+ * TP - Exercice \r
+ * Chaine d'hotels\r
+ * \r
+ * Exception liee a un numero de reservation inexistant\r
+ * \r
+ * @author Toto\r
+ * @version 1.0\r
+ */\r
+public class ExceptionNumReservation extends Exception {\r
+\r
+       private static final long serialVersionUID = -6656122783469441587L;\r
+\r
+       String message;\r
+       \r
+       public ExceptionNumReservation() {\r
+               super();\r
+               message = "Erreur: numero de reservation incorrect";\r
+       }\r
+       \r
+       public String toString() {\r
+               return message;\r
+       }\r
+       \r
+}\r
diff --git a/TD3/hotel/Infos.java b/TD3/hotel/Infos.java
new file mode 100644 (file)
index 0000000..3c881c0
--- /dev/null
@@ -0,0 +1,77 @@
+package hotel;\r
+\r
+import java.io.Serializable;\r
+\r
+\r
+/**\r
+ * Applications reparties\r
+ * TP - Exercice \r
+ * Chaine d'hotels\r
+ * \r
+ * Classe regroupant les informations d'une reservation\r
+ * \r
+ * @author Toto\r
+ * @version 1.0\r
+ */\r
+public class Infos implements Serializable {\r
+\r
+       private static final long serialVersionUID = -6199402168457446943L;\r
+\r
+       private String nomClient;\r
+       private String nomHotel;\r
+       private String date;\r
+       private int nbchambres;\r
+       \r
+       public Infos() {\r
+               this.nomClient = "";\r
+               this.nomHotel = "";\r
+               this.date = "";\r
+               this.nbchambres = 0;\r
+       }\r
+       \r
+       public Infos(String client, String hotel, String date, int nb) {\r
+               this.nomClient = client;\r
+               this.nomHotel = hotel;\r
+               this.date = date;\r
+               this.nbchambres = nb;\r
+       }\r
+               \r
+       public String getNomClient() {\r
+               return this.nomClient;\r
+       }\r
+       \r
+       public void setNomClient(String nom) {\r
+               this.nomClient = nom;\r
+       }\r
+       \r
+       public String getNomHotel() {\r
+               return this.nomHotel;\r
+       }\r
+       \r
+       public void setNomHotel(String nom) {\r
+               this.nomHotel = nom;\r
+       }\r
+       \r
+       public String getDate() {\r
+               return this.date;\r
+       }\r
+       \r
+       public void setDate(String d) {\r
+               this.date = d;\r
+       }\r
+       \r
+       public int getNbChambres() {\r
+               return this.nbchambres;\r
+       }\r
+       \r
+       public void setNbChambres(int nb) {\r
+               this.nbchambres = nb;\r
+       }\r
+       \r
+       public String toString() {\r
+               String str = "";\r
+               str = str + this.nomClient + " " + this.nomHotel + " " + this.date + " " + this.nbchambres;\r
+               return str;\r
+       }\r
+       \r
+}\r
diff --git a/TD3/hotel/Readme.txt b/TD3/hotel/Readme.txt
new file mode 100644 (file)
index 0000000..5a52233
--- /dev/null
@@ -0,0 +1,47 @@
+\r
+\r
+# 1) Completer les classes :\r
+# ChaineHotelsInterface, ChaineHotels, ChaineHotelsServeurRMI, ChaineHotelsClientRMI\r
+\r
+\r
+\r
+\r
+# 2) Pour la compilation:\r
+\r
+#Se placer dans le dossier CONTENANT le dossier "hotel"\r
+\r
+#compilation :\r
+javac hotel/*.java\r
+\r
+#Generation des souches :\r
+rmic hotel.ChaineHotels\r
+\r
+#Creation d'un fichier texte "security.policy" contenant la politique de sécurité retenue\r
+# (ici on autorise tout... dangereux !)\r
+\r
+\r
+\r
+\r
+# 3) Execution de l'application :\r
+\r
+#On suppose que l’élève e00000 a place le dossier "hotel" dans un dossier "SR"\r
+\r
+#On suppose que le serveur tourne sur la machine 134.192.30.6\r
+# et le registre utilise le port par défaut 1099 (le registre rmi tourne aussi sur la machine 134.192.30.6)\r
+\r
+\r
+#Sur la machine "serveur" :\r
+\r
+#Lancement du registre rmi :\r
+rmiregistry\r
+\r
+#Se placer dans le dossier "SR"\r
+\r
+#Lancement du programme serveur :\r
+java -cp . -Djava.security.policy=/filer/eleves/e00000/SR/hotel/security.policy -Djava.rmi.server.codebase=file:/filer/eleves/e00000/SR/  hotel.ChaineHotelsServeurRMI\r
+\r
+\r
+#Sur la machine "client" :\r
+\r
+#Lancement du programme client :\r
+java -cp . -Djava.security.policy=/filer/eleves/e00000/SR/hotel/security.policy -Djava.rmi.server.codebase=file:/filer/eleves/e00000/SR/  hotel.ChaineHotelsClientRMI 134.192.30.6 1099\r
diff --git a/TD3/hotel/security.policy b/TD3/hotel/security.policy
new file mode 100644 (file)
index 0000000..3264aac
--- /dev/null
@@ -0,0 +1,23 @@
+//\r
+// For more information see:\r
+//    http://java.sun.com/docs/books/tutorial/rmi/running.html\r
+//    http://java.sun.com/j2se/1.5.0/docs/guide/security/PolicyFiles.html\r
+// \r
+\r
+grant {\r
+       permission java.security.AllPermission;\r
+       \r
+       // Other options:\r
+       // permission java.net.SocketPermission "127.0.0.1:1024-", "accept, connect, listen, resolve";\r
+       // permission java.net.SocketPermission "localhost:1024-", "accept, connect, listen, resolve";\r
+       \r
+       // From http://java.sun.com/docs/books/tutorial/rmi/running.html\r
+       // Copyright 1995-2005 Sun Microsystems, Inc. Reprinted with permission \r
+       \r
+       // permission java.net.SocketPermission "*:1024-65535", "connect,accept";\r
+    // permission java.net.SocketPermission "*:80", "connect";\r
+       \r
+       // permission java.net.SocketPermission "*:1024-65535", "connect,accept";\r
+    // permission java.io.FilePermission "c:\\home\\ann\\public_html\\classes\\-", "read";\r
+    // permission java.io.FilePermission "c:\\home\\jones\\public_html\\classes\\-", "read";\r
+};\r