import java.rmi.*; import java.rmi.server.UnicastRemoteObject; import java.util.HashSet; import java.util.Set; public class CarnetImpl extends UnicastRemoteObject implements Carnet { private Set fiches; private int id; public static void main(String[] args) { try { CarnetImpl carnet = new CarnetImpl(Integer.parseInt(args[0])); Naming.bind("rmi://localhost:4000/Carnet" + args[0], carnet); System.out.println("Le Carnet" + args[0] + " a été publié sur le registre !"); System.out.println(); } catch (Exception e) { e.printStackTrace(); } } public CarnetImpl(int id) throws RemoteException { this.fiches = new HashSet(); this.id = id; } public void Ajouter(SFiche sf) throws RemoteException { fiches.add(sf); System.out.println("La fiche [" + sf + "] a été ajoutée."); System.out.println(); } public RFiche Consulter(String nom, boolean forward) throws RemoteException { for (SFiche sf : fiches) { if (nom.equals(sf.getNom())) { System.out.println("La fiche [" + sf + "] a été consultée." + (!forward ? " (forward)" : "")); System.out.println(); return new RFicheImpl(sf.getNom(), sf.getEmail()); } } if (forward) { try { System.out.println("Demande transmise au Carnet" + (id % 2 + 1)); Carnet carnet = (Carnet) Naming.lookup("//localhost:4000/Carnet" + (id % 2 + 1)); RFiche fiche = carnet.Consulter(nom, false); System.out.println("Fiche [" + fiche.getNom() + " <" + fiche.getEmail() + ">] trouvée sur le Carnet" + (id % 2 + 1)); System.out.println(); return fiche; } catch (NullPointerException e) { System.out.println("Fiche non trouvée sur le Carnet" + (id % 2 + 1)); System.out.println(); return null; } catch (Exception e) { e.printStackTrace(); } } System.out.println("Fiche non trouvée (Carnet" + id + ")"); System.out.println(); return null; } }