IPST-CNAM Applications Distribuées cycle C Lundi 19 Juin 2000 Avec document Durée : 2 heures Enseignant : Mr LAFORGUE EXERCICES 1. Ecrire la classe VectorParcours qui hérite de la classe Java prédéfinie Vector. Cette classe implémente les traitements suivant : public void initParcours() initialisation du traitement de parcours public Object first() retourne le premier élément de la liste public Object next() retourne l'élément suivant public Object nextDifferent() retourne le prochain élément différent (on suppose que la liste est triée). Pour réaliser ce traitement vous devez utiliser une interface Java que vous écrivez. 2. Questions de cours : Quelles différences essentielles, il y a-t-il entre une architecture Serveur/Client 2 points (classique) et une architecture Serveur/Client 3 points ? A quoi sert le principe de "Serialisation" dans une architecture distribuée ? Dans quel autre activité ce principe est-t-il utilisé ? Faites le schéma général d'architecture d'objets distribuée (RMI, CORBA, …) dans lequel vous devez placer les éléments suivants : Client, Serveur, Skeleton, Stub, ORB. Donnez le rôle de chacun de ces éléments. PROBLEME1 En utilisant le protocole RMI de JAVA , nous nous proposons de réaliser un serveur de numéros de téléphone, et un client. Le serveur charge un fichier texte contenant le nom, le prénom et le numéro grâce à la primitive prédéfinie suivante public Vector chargerNuméros(String NomFichier) qui retourne un vector Java contenant des objets appartenant à la classe Contact. (Le contact est défini par le nom, prénom et numéro). Le serveur doit réaliser le service suivant : accéder à un contact en fonction du nom et/ou du prénom Le client s'exécute dans une fenêtre système (entrées/sorties standards) et appelle le service du Serveur. Les paramètres de lancement du serveur: java Serveur <machine> <port> Les paramètres de lancement du client : java Client <machine> <port> Les classes que vous devez écrire sont Contact, Client, Serveur et l'interface ServeurImp. 1 Dans votre codage vous pouvez omettre les renvois d'exception (throws ....) et les lignes d' import. Un serveur RMI doit hériter de la classe UnicastRemoteObject. L'interface des services doit hériter de la classe Remote. Les méthodes Java RMI sont : static public void Naming.rebind(String adresseURL, UnicastRemoteObject serv); + Si vous devez utiliser une méthode Java dont vous ne vous rappelez pas la syntaxe avec précision, vous pouvez l'inventer à condition que vous précisez son rôle et le rôle de ses paramétres. Eléments de langage JAVA : package <p> import java.io.*; import java.lang.*; import java.net.*; import java.util.*; import java.rmi.*; import java.rmi.server.UnicastRemoteObject; import java.rmi.server.ServerNotActiveException; import java.rmi.RMISecurityManager; public class Serveur extends UnicastRemoteObject implements ServeurImp Vector: addElement(Object) Object elementAt() size() String: int compareTo(String) new public static void main(String args[]) public interface <i> Naming.rebind(String) ServeurImp services; services = (ServeurImp)Naming.lookup(String) DataInputStream datain=new DataInputStream(System.in); System.out.print(String); String datain.readLine();