--- /dev/null
+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();
+ }
+
+}
--- /dev/null
+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();
+ }
+ }
+
+}
--- /dev/null
+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
--- /dev/null
+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();
+ }
+ }
+
+}
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+\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
--- /dev/null
+//\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