Salut,
j'ai un soucis de compréhension concernant le RMI et la possibilité de simuler plusieurs clients
Pour résumer j'ai un annuaire (objet distant) et je dois simuler plusieurs clients pouvant ajouter (put) ou retrouver (get) un numéro
je vous présente mon code
interface :
class implementant l'interface
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public interface Directory extends Remote { void put(String nom, String num) throws RemoteException; String get(String nomCherche) throws RemoteException; }
serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class DirectoryImpl extends UnicastRemoteObject implements Directory { HashMap<String, String> annuaire = new HashMap<String, String>(); protected DirectoryImpl() throws RemoteException { super(); } //ajout dans la map public void put(String nom, String num) throws RemoteException { annuaire.put(nom, num); } //methode renvoyant le resultat d'une recherche public String get(String nomCherche) throws RemoteException { String num = annuaire.get(nomCherche); return num; } }
et enfin client
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class ServerImpl { public static void main(String[] args) { try { //creation registre Registry r = LocateRegistry.createRegistry(1099); //instance de la class DirectoryImpl dI = new DirectoryImpl(); //instance enregistré dans le registre r.rebind("directory", dI); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 public class Client1 { public static void main(String[] args) { try { Directory d = ((Directory)Naming.lookup("rmi://localhost/directory")); Directory d2 = ((Directory)Naming.lookup("rmi://localhost/directory")); d.put("Pierre", "0608"); d2.put("Gerrard", "0609"); System.out.println(d2.get("Pierre")); } catch (MalformedURLException | RemoteException | NotBoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Je suppose que ce code ne simule pas du tout plusieurs clients, je me demande comment faire, je suppose qu'il doit y avoir une histoire de thread mais je n'arrive pas à comprendre.
Pour commencer j'aimerai simuler plusieurs clients mais de manière séquentielle, sans concurrence voir déjà si j'arrive a comprendre
Si vous pouvez m'aider
ps : il n'y a pas d'erreur de fonctionnement, tout marche et Pierre est bien trouvé dans le hashMap
Partager