PROGRAMMATION DISTRIBUÉE TUTORIEL RMI

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimension: px
Commencer à balayer dès la page:

Download "PROGRAMMATION DISTRIBUÉE TUTORIEL RMI"

Transcription

1 PROGRAMMATION DISTRIBUÉE TUTORIEL RMI PUBLIC CONCERNÉ : formation initiale, 2 e année. NOM DE L AUTEUR : V. Thomas DATE 2012/2013 UNIVERSITÉ DE LORRAINE IUT NANCY CHARLEMAGNE 2 ter boulevard Charlemagne CS NANCY cedex Tél : Fax :

2 2

3 Contents 1 Programmation distribuée et RMI Application distribuée Approches pour développer des applications distribuées Programmation Réseau Programmation avec RMI Principes de RMI Notion de référence distante Schéma général du lancement d une application RMI Problèmes auxquels RMI doit répondre Construire une application distribuée avec RMI Schéma de développement d une application distribuée avec RMI Exemple: gestionnaire de tickets Gestion des packages Répertoire source Répertoire bin Scripts Structure générale Définition du service Écriture de l objet serveur Écriture du main du serveur Écriture du main du client Compilation Exécution des applications lancement du rmiregistry Lancement du serveur Lancement du client Mettre en place l application Erreurs fréquemment rencontrées illegal remote method encountered java.security.accesscontrolexception UnmarshalException MalformedURLException Compléments Autre manière de voir RMI Passage de paramètres Codebase Sécurité CallBack

4 L objectif de ce tutoriel est de présenter à l aide d un exemple simple la manière de développer une application distribuée en utilisant RMI. L exemple utilisé sera un distributeur de tickets: un serveur peut fournir un ticket représenté par un numéro aux clients qui s y connectent; à chaque fois qu un ticket est donné, le serveur incrémente ce numéro pour fournir le numéro suivant au prochain client qui se connecte. 1

5 1 Programmation distribuée et RMI 1.1 Application distribuée On parlera d application distribuée, lorsqu une application est décomposée en plusieurs modules séparés s exécutant sur des machines distantes. Ainsi, un jeu multi-joueur est bien une application distribuée dans le sens où chaque joueur possède une application qui communique avec les autres applications (un serveur ou alors les autres applications clients selon une architecture en pair-à-pair). Par simplicité, la suite du tutoriel se concentre sur une application client-serveur mais bien d autres choses sont envisageables. 1.2 Approches pour développer des applications distribuées Deux approches 1 peuvent être envisagées pour développer une application distribuée en JAVA: en utilisant des Socket (cf cours Réseau) en utilisant des solutions de plus haut niveau comme RMI (cf ce cours) Programmation Réseau Une première idée consiste à mettre en place de la communication UDP ou TCP entre les machines clients et la machine serveur. Cela consiste à créer des socket entre la machine client et la machine serveur (sockerserver, accept,...), définir un protocole d échange permettant de représenter une demande sous la forme d une chaîne de caractères (par exemple utiliser les noms des méthodes dans une chaîne de caractère comme méthode getnumero Durand ). créer la demande de la part du client en générant et en envoyant la chaîne correspondant à la requête attendue. récupérer cette chaîne dans la socket du serveur, l interpréter, appeler la bonne méthode sur l objet correspondant, récupérer le résultat et le retransmettre via la socket. Ce type d approche fonctionne parfaitement, mais cela devient assez vite laborieux. Á chaque fois que l on souhaite faire communiquer des objets, il est nécessaire de refaire les mêmes opérations: créer des sockets, définir un protocole à partir des noms de méthodes, faire les écoutes au niveau du serveur, faire le lien entre les chaînes de caractères et les bonnes méthodes de l objet, etc... De le même manière que le processus de sérialisation, on peut facilement imaginer que ce processus est automatisable, c est à dire qu on peut construire des classes qui permettent de gérer cette mécanique de manière automatique en encapsulant dans des classes bien définies ce processus. C est quelque chose de difficile à faire (car il faut pouvoir correctement généraliser ce qui se passe), mais cela est envisageable. 1 parmi d autres, c est bien sûr non exhaustif C est justement l objectif de RMI. 2

6 1.2.2 Programmation avec RMI RMI (acronyme de Remote Method Invocation) est un middleware JAVA destiné à aider la création d applications distribuées. Un middleware est une architecture logicielle qui se charge de fournir les services pour faire interagir différents composants logiciels. Dans notre cas, RMI est un middleware permettant de faire interagir des applications JAVA. RMI propose en effet des classes permettant de faire communiquer des objets distants. Le coeur de RMI est la notion de référence distante qui va être développée dans la partie suivante. 1.3 Principes de RMI Notion de référence distante Dans un programme java classique, les objets sont représentés par des références désignant l emplacement mémoire (dans le tas) au sein duquel on peut trouver le descriptif des attributs de l objet. Chaque application java possède son propre espace d adressage, ce qui fait qu il n est pas possible pour une application Java d utiliser un objet référencé dans une autre application. Cela est d autant plus vrai lorsque les applications sont lancées sur des machines différentes (les espaces de stockage étant alors dans des lieux différents). La notion de référence distante a pour objectif de répondre à ce problème. Une référence distante est un objet capable de communiquer avec un objet distant (situé dans une autre application java et potentiellement sur une autre machine). Pour caricaturer, la référence distante possède en interne l adresse IP de la machine où trouver l objet distant à appeler et le port permettant d accéder à cet objet. De plus, une référence distante implémente une interface qui décrit les méthodes qu il est possible d utiliser sur l objet distant. Seules ces méthodes sont appelables à distance. Dans une application classique, un appel de méthode à un objet consiste simplement à utiliser la référence de l objet sur lequel la méthode doit s appliquer. Dans une application distribuée, le schéma est le même sauf que c est désormais une référence distante qu il faut utiliser pour contacter l objet situé dans un autre espace d adressage Schéma général du lancement d une application RMI Création de l objet serveur La première étape consiste à créer l objet qui va être amené à répondre au service 2 sur la machine serveur. Si on souhaite faire un compteur, il faut créer l objet compteur sur le serveur. C est cet objet qui sera ensuite appelé par le client. Création d une référence distante Le serveur doit ensuite créer une référence distante. Cette référence distante permet aux applications qui la possèdent d effectuer des appels sur l objet serveur. Seules les méthodes de la référence distante seront visibles à distance. 2 autrement dit qui contient le code qui sera exécuté 3

7 Une fois que le serveur a construit une référence distante permettant d appeler des méthodes sur l objet qu il a créé, il va diffuser cette référence (en utilisant un gestionnaire de référence - rmiregistry qui sera décrit plus tard). Récupération de la référence distante gestionnaire de références). Le client récupère cette référence distante (par le Utilisation de la référence distante Grâce à la référence distante, le client peut appeler l objet situé sur le serveur en passant par le réseau. L appel parvient jusqu à la machine serveur qui applique la méthode sur l objet et obtient un résultat. Ce résultat est retourné à l application client par l intermédiaire de la référence distante Problèmes auxquels RMI doit répondre Pour pouvoir effectuer toutes ces opérations, il faut que RMI propose les bases pour 1. définir un service proposé par un serveur et utilisable par un client: pour cela, RMI fournit l interface Remote permettant de définir une interface distante(cf partie 2.2). 2. créer des références distantes à partir des objets sur le serveur qu on souhaite appeler à distance: pour cela, RMI fournit la classe UnicastRemoteObject permettant d exporter un objet en référence distante (cf partie 2.4) 3. permettre à un serveur de diffuser cette référence et à un client de pouvoir télécharger une référence distante: pour cela, RMI fournit un annuaire / gestionnaire de références nommé rmiregistry capable de stocker et de distribuer des références distantes 4. proposer une mécanique transparente pour que le client puisse, de manière simple, faire des demandes à l objet situé sur le serveur grâce à la référence distante: pour cela RMI utilise les références distantes masquées par l interface distante Construire une application distribuée avec RMI Définir le service distant Pour que l objet distant et le proxy puissent répondre aux mêmes méthodes (les méthodes qu on souhaite appeler à distance), il faut que ces deux objets implémentent la même interface : c est l interface distante qui explicite les méthodes qui sont fournies par le serveur (et qu il doit donc implémenter) et qui doivent être reconnues par le proxy (pour que le client puisse faire les appels). La première étape consiste donc à définir le service distant proposé par le serveur. Ce service correspond aux méthodes que les clients pourront appeler sur l objet serveur. Ce service doit être implémente au niveau du serveur pour que le serveur puisse répondre aux sollicitations du client être connu par le client pour savoir quel service est accessible, ou autrement dit, quelle méthode est appelable sur l objet serveur. En RMI, ce service est décrit par une interface JAVA héritant de Remote. L interface distante doit respecter plusieurs contraintes elle doit hériter de Remote toutes ses méthodes doivent lever une RemoteException 3 3 qui peut se déclencher lorsque l objet distant ne répond plus 4

8 Comme l appel passe par le réseau, il est nécessaire que les paramètres de l appel et le type de retour soient serializable 4 Construire un objet serveur Une fois l interface distante déclarée, il faut que le serveur puisse répondre aux sollicitations du client. Le serveur doit donc possèder le code capable de répondre à l interface distante. Pour cela, on construit un objet serveur implémentant l interface distante. Ainsi, les méthodes de cette interface doivent être définies au niveau du serveur. Cela assure que le service soit effectivement implémenté. Construire la référence distante La construction de la référence distante se fait dans le main du serveur grâce à la méthode statique exportobject de la classe UnicastRemoteObject. Cette méthode prend en paramètre un objet implémentant Remote et retourne une référence distante implémentant le service de l objet serveur. Cette construction de référence distante se fait automatiquement en utilisant la réflexivité 5. La classe réelle de l objet retourné est une classe anonyme générée automatiquement par JAVA. La référence distante est donc un objet implémentant l interface distante, mais n est pas du type du serveur. Elle possède les méthodes de l interface distante mais fonctionne différemment: la référence distante ne répond pas directement à la méthode mais transmet l appel à l objet serveur qui se charge de transmettre sa réponse. La construction de la référence distante effectué sur le serveur génère un Thread qui écoute les appels vers l objet serveur, se charge de transmettre la demande à l objet serveur et se charge de récupérer le résultat qu il retransmet à la référence distante à l origine de l appel. Ce Thread correspond à ce qu on appelle le Skeleton. De manière simple, la référence distante se fera passer au niveau du client pour l objet serveur en lui déléguant les méthodes du service distant. Enregistrer et récupérer la référence distante Enfin, le serveur doit communiquer au client la référence distante qu il a créée pour que le client puisse appeler l objet à l origine de la référence. Pour cela, RMI se base sur une application intermédiaire fournie dans java: le rmiregistry. Le rmiregistry est un annuaire chargé de stocker les références distantes. pour lancer un rmiregistry, il suffit de lancer la commande rmiregistry en console (dans le jdk) pour accéder au rmiregistry à partir d une application Java, il suffit d utiliser la classe LocateRegistry et les méthode statiques getregistry ou createregistry. Ces méthodes renvoient un objet de type Registry qui se charge de communiquer avec le rmiregistry pour accéder à la liste des références enregistrées, on utilisera la méthode list() sur un objet Registry 4 Les objets sont sérialisés pour pour pouvoir être transmis à travers le réseau. Ils sont reconstitués sur le serveur si ce sont des paramètres lors de l appel de méthode ou sur le client si l objet correspond à une valeur de retour, il s agit donc d un passage de paramètre par copie entre le client et le serveur 5 La notion de réflexivité fait référence au fait que java peut interroger un objet sur les méthodes et les attributs qu il possède 5

9 pour sauver une référence distante, méthode bind() ou rebind() sur un objet Registry pour récupérer une référence distante, utiliser la méthode lookup() sur un objet Registry Le serveur doit donc accéder au rmiregistry et y enregistrer (grâce à la méthode bind()) la référence distante qu il vient de créer. Le serveur est désormais prêt l objet serveur qui contient le code à exécuter a été créé une référence distante a bien été construite cette référence distante est enregistrée au niveau du rmiregistry Il ne reste plus au client qu à récupérer la référence et à l utiliser pour faire des appels aux méthodes implémentées par l objet serveur. Construction du client Ce main doit Le client est relativement simple et n est composé que d un main. récupérer la référence distante qui a été déposée par le serveur sur le rmiregistry utiliser la référence distante pour faire un appel de méthode sur l objet distant situé sur le serveur 1.4 Schéma de développement d une application distribuée avec RMI Pour mettre en place une application distribuée avec RMI, le schéma est habituellement le suivant 1. Définir le service distant et écrire l interface décrivant les méthodes appelables à distance 2. Écrire un objet serveur implémentant cette interface 3. Écrire le main du serveur créant l objet serveur, générant la référence distante et l enregistrant sur le rmiregistry 4. Écrire le main du client chargé de se connecter sur le rmiregistry du serveur, de récupérer la référence distante et de faire des appels Un schéma équivalent est le suivant 1. Définir l objet serveur chargé de répondre aux appels du client. Il s agit à ce niveau d un objet classique en JAVA 2. En déduire la liste des méthodes appelables à distance et écrire en conséquence l interface distante que devra implémenter ce serveur 3. Écrire le main du serveur créant l objet serveur, générant la référence distante et l enregistrant sur le rmiregistry 4. Écrire le main du client chargé de se connecter sur le rmiregistry du serveur, de récupérer la référence distante et de faire des appels 6

10 2 Exemple: gestionnaire de tickets Afin de mettre en application les éléments présentés dans ce tutoriel, cette partie propose de développer un serveur de tickets. Il s agit simplement d une application permettant de distribuer des tickets différents aux applications client qui le demandent (par exemple pour gérer une file d attente). Pour faire les choses correctement, nous allons en outre utiliser des packages afin de générer deux applications différentes 1. une application serveur chargée de distribuer des tickets 2. une application client qui demandera des tickets à l application serveur 2.1 Gestion des packages Comme le service distant est partagé par le client et le serveur, les deux applications doivent connaître l interface distante. Il faut de plus que cette interface distante soit strictement identique 6. Ainsi, afin d éviter d avoir des versions non cohérentes entre le client et le serveur, le plus simple consiste à mettre toutes les sources dans le même répertoire et à écrire un script compilant simultanément les applications client et serveur dans deux répertoires dédiés. Cela évite les problèmes consistant à compiler le serveur, modifier l interface puis compiler le client (ce qui ne fonctionnera pas puisque l interface distante du client et du serveur ne sont pas les mêmes). Pour simplifier les choses, on propose une structure constituée de plusieurs répertoires décrite ci-dessous Répertoire source Le répertoire source contient toutes les sources du projet (et uniquement les sources). Comme l application utilisera des packages, quelques rappels s avèrent nécessaires. Rappel sur les packages En java, les packages ont pour objectif de regrouper du code. Il s agit habituellement de regrouper du code par fonctionnalité (affichage,...). En java, il y a un lien fort entre structure logique et structure physique. la structure logique désigne l organisation des classes en package. Cette organisation est décidée par le programmeur qui peut vouloir regrouper des classes ensemble pour des raisons diverses (fonctionnalité identique, contraintes d accès,...) la structure physique désigne les fichiers sur le disque et la manière dont ils sont organisés (nom du fichier, répertoire,...) En java, la structure physique est fortement liée à la structure logique: un package correspond forcément à un sous-répertoire de même nom 7. Le classpath est le troisième élément qui se charge de faire le lien entre la structure logique et la structure physique. Il désigne les répertoires de départ à partir desquels, java va chercher 6 A un espace prés car cette vérification est faite par un checksum - à savoir les résultat d un calcul fait sur les octets du bytecode 7 Pour éviter d oublier ces considérations, il est conseillé de penser le véritable nom d une classe comme nomdu- Package.nomClasse 7

11 les packages et donc les sous-répertoires correspondant. Le classpath est modifiable soit en passant une option -cp à la JVM soit en modifiant la variable classpath dans la console avant d exécuter ou de compiler l application 8 Le plus simple consiste à structurer l application en trois pack- Organisation des packages ages un package service contenant le descriptif du service de distribution de ticket (interface distante) un package distributeur contenant le distributeur de ticket (classe implémentée au niveau du serveur) un package client contenant la classe Client demandeuse de ticket Répertoire bin L objectif va consister à produire deux applications une application AppliServeur qui tournera sur le serveur, qui contiendra les packages service et distributeur et qui distribuera des tickets une application AppliClient qui correspondra aux clients, qui contiendra les packages service et client et qui demandera des tickets au serveur Chacune de ces applications aura un sous-repertoire dédié dans le répertoire bin. Ainsi, l application serveur sera dans le sous-repertoire AppliServeur avec les sous-répertoires service et distributeur pour les packages utilisés l application client dans le sous-repertoire AppliClient avec les sous-répertoires service et client pour les packages utilisés Scripts L ensemble des scripts sera situé dans le répertoire parent à bin et src qu on appellera répertoire racine du projet. Ces scripts seront un script de compilation chargé de générer les deux applications client et serveur à partir des mêmes sources un script permettant de lancer le serveur un script permettant de lancer les clients Structure générale Pour résumer, la structure de répertoire sera donc la suivante répertoire racine du projet répertoire src répertoire client (sources package client) répertoire distributeur (sources package distributeur) 8 dans une console DOS cela peut se faire avec la commande set classpath=%classpath%;nouveauchemin pour ajouter nouveauchemin au classpath existant 8

12 répertoire service (sources package service - ref distante) répertoire bin répertoire AppliServeur (contient le bytecode du serveur) répertoire distributeur (class package distributeur) répertoire service (class package service - ref distante) répertoire AppliClient (contient le bytecode du client) répertoire client (class package client) répertoire service (class package service - ref distante) script de compilation scripts de lancement 2.2 Définition du service L étape suivante consiste à définir le service proposé par le serveur et utilisable par le client. Ce service sera défini dans l interface distante héritant de Remote. Nous appellerons cette interface ServiceDistribution. On souhaite que le client puisse demander un ticket et que le serveur puisse lui fournir en retour un numéro de ticket qu il incrémentera à chaque demande. Dans une application classique l objet client appellera l objet serveur grâce à la méthode int donneticket() 9. C est donc cette méthode qui fait le lien entre le client et le serveur et qui devra donc être définie dans l interface distante. De plus, il est nécessaire que (cf partie précédente) l interface distante hérite de l interface Remote pour tirer parti de RMI chaque méthode de l interface distante retourne une exception de type RemoteException qui peut se produire à chaque appel distant 10 Enfin, nous avons fait le choix d inclure cette interface distante dans un package service, cette interface ServiceDistribution doit être déclaré dans le package service et le fichier ServiceDistribution.java doit donc se trouver dans le répertoire src\service. Le fichier ServiceDistribution.java contiendra donc le code suivant import java.rmi.*; //declaration du package d appartenance package service; // etendre interface à remote public interface ServiceDistribution extends Remote { //penser à lever les exceptions RemoteException public int donneticket() throws RemoteException; } 9 sous la forme int num=serveur.donneticket() 10 par exemple, lorsque le serveur ne répond plus 9

13 2.3 Écriture de l objet serveur Maintenant que le service a été décrit, il est possible d écrire l objet qui sera amené à répondre à ce service. Pour rappel, cet objet sera construit et exécuté sur le serveur cet objet doit naturellement implémenter le service défini La classe à construire est identique à une classe classique: cette classe possède des attributs, un(des) constructeur,... La seule différence réside dans le fait que cette classe implémente une interface héritant de Remote et qu on pourra, de ce fait, exporter des références distantes à partir de ses instances. Dans notre cas, la classe des objets devant répondre au service sera nommée Distributeur. Cette classe possédera un attribut entier num correspondant au dernier numéro de ticket distribué un constructeur chargé d initialiser num à 0 la méthode int donneticket() qui implémente le service De plus, cette classe Distributeur implémente l interface ServiceDistribution situé dans le package service appartient au package distributeur Les sources de Distributeur seront donc situées dans le répertoire source\distributeur du répertoire source et s écriront de la manière suivante //declaration du package d appartenance package distributeur; //importation du service distant import service.servicedistribution; //implementation du service distant public class Distributeur implements ServiceDistribution { //attributs classiques private int num; } //constructeur classique public Distributeur() { num=0; } //implementation de la méthode distante public int donneticket() { num++; return num; } 10

14 2.4 Écriture du main du serveur Pour finir le serveur, il reste à écrire un main qui se chargera de mettre ne place les différents elements, à savoir 1. créer l objet distributeur qui pourra distribuer les tickets; 2. construire une référence distante qui permettra aux clients de demander des tickets à distance; 3. diffuser cette référence distante en la stockant dans un rmiregistry local; 4. se mettre en attente de la réception d un appel distant. Ces différentes parties vont être détaillées dans les paragraphes suivants. 1. Créer objet distant Cette partie consiste simplement à créer un objet de type Distributeur dont la classe est accessible au niveau du serveur. Distributeur d=new Distributeur(); 2. Construire une référence distante La construction de la référence distante se fait grâce à la méthode statique export de la classe UnicastRemoteObject. Quelques remarques sont à ajouter la méthode à appeler est la méthode exportobject(remote obj, int port) qui prend deux paramètres 11 et pas la méthode exportobject(remote obj) qui fonctionne différemment; cette méthode retourne un objet de type Remote. Plus précisément, comme l export se fait à partir d un objet Distributeur, l objet retourné implémente l interface ServiceDistribution 12 mais N est PAS un objet de type Distributeur 13. Il faut donc faire un cast de cette référence en ServiceDistribution pour pouvoir ensuite appeler les méthodes décrites dans l interface distante. ServiceDistribution refdistante; refdistante=(servicedistribution)unicastremoteobject.export(d,0); 3. Diffuser la référence distante La diffusion de la référence distante ainsi construite se fait par le rmiregistry qui fait office d annuaire: il stocke cette référence et la fournit aux clients sur demande. Pour identifier cette référence, il faut lui attribuer un nom au moment de cet enregistrement. C est le même nom que le client utilisera pour la récupérer. Dans notre cas, nous appellerons cette référence LeDistributeur pour bien distinguer ce nom du nom de la classe. Pour faire cet enregistrement, on supposera qu un service rmiregistry est déjà présent sur la machine du serveur 14. Il suffit alors de récupérer un objet Registry lié au rmiregistry grâce à la classe LocateRegistry d enregistrer la référence distante grâce à la méthode bind() 15 de la classe Registry Registry reg=locateregistry.getregistry(); reg.bind(refdistante, "LeDistributeur"); 11 On utilisera un port par défaut en passant 0 au paramètre port 12 qui est bien un sous-type de Remote 13 il s agit d une classe frère qui se fera passer pour le distributeur au niveau du client 14 dans le cas contraire, il est possible d un créer un à partir de l application Java avec la méthode statique createregistry(int port) de la classe LocateRegistry 15 ou rebind s il s agit d écraser les références déja présentes 11

15 4. Mettre le serveur en attente La création de la référence distante crée un Thread d écoute, ainsi le Thread est déja crée et l application ne ferme pas malgré le fait que la JVM arrive à la fin du main. Code résultant En conséquence, la classe LanceServeur chargée de lancer le serveur se trouve dans le package distributeur et s écrira de la manière suivante //declaration du package d appartenance package distributeur; //importation du service distant import service.servicedistribution; //Cette classe est juste un main et n implémente rien public class LanceServeur { public static void main(string args[]) { //creation de l objet Distributeur d=new Distributeur(); //création de la référence distante ServiceDistribution refdistante; refdistante=(servicedistribution)unicastremoteobject.export(d,0); //enregistrement de la référence Registry reg=locateregistry.getregistry(); reg.bind(refdistante, "LeDistributeur"); } } //le serveur est pret System.out.println("serveur en attente"); 2.5 Écriture du main du client On suppose désormais que la classe Distributeur fonctionne sur la machine serveur pour se concentrer sur la partie client. à Dans notre exemple, la partie client est très simple et se limite à un simple main qui consiste récupérer la référence distante vers le distributeur que le serveur a stocké dans le rmiregistry utiliser cette référence distante pour utiliser le distributeur de ticket Récupérer la référence distante La récupération de la référence distante se fait grâce aux services proposés par le rmiregistry. Il faut pour cela localiser le rmiregistry avec la méthode getregistry(string host) de la classe LocateRegistry. Cela nécessite de posséder l adresse du serveur sur lequel tourne le rmiregistry Cette adresse peut être stockée en dur dans le code de l application, mais bien entendu, il vaut mieux la passer 12

16 récupérer la référence distante grâce à la méthode lookup(string name) de la classe Registry. Cette méthode nécessite aussi que le client connaisse le nom sous lequel la référence a été enregistrée. Nous avions opté pour LeDistributeur à l écriture du serveur. La méthode lookup retourne un objet implémentant Remote mais nous SAVONS par construction 17 que cet objet implémente bien l interface ServiceDistribution et nous pouvons donc faire un cast sans crainte. En supposant que le nom de l hôte est passé comme premier paramètre au main (à savoir args[0]), cela revient aux lignes suivantes Registre reg=locateregistry.get(args[0]); ServiceDistribution ref=reg.lookup("ledistributeur"); Utiliser la référence distante La référence distante implémente l interface ServiceDistribution, elle connaît donc les méthodes définies dans l interface distante 18. Il suffit donc simplement d appeler ces méthodes sur la référence. En d autres termes, la référence se fait passer pour l objet en répondant aux mêmes méthodes. Simplement, au lieu de répondre directement, l objet a redéfini les méthodes de l interface distante. Ces méthodes consistent désormais à contacter via le réseau l objet distant en lui fournissant la demande du client, à attendre la réponse de l objet distant et à reconstruire le résultat pour le retourner au client. Il faut juste penser à correctement récupérer les exceptions possibles lorsque le serveur ne répond pas. int num=ref.donneticket(); Code de la classe Client la manière suivante La classe Client déclarée dans le package client s écrira donc de en paramètre dans le main pour pouvoir changer l adresse du serveur au lancement du client sans recompilation 17 en écrivant le serveur 18 C est justement l intérêt de définir une interface distante chargée de déclarer les méthodes utilisables à distance 13

17 //declaration du package d appartenance package client; //importation du service distant import service.servicedistribution; //Cette classe est juste un main et n implémente rien public class Client { public static void main(string args[]) { //récuperation de la référence Registry reg=locateregistry.getregistry(args[0]); ServiceDistribution ref=(servicedistribution)reg.lookup("ledistributeur"); //le client est pret System.out.println("client pret, demande de ticket"); System.out.println("ticket n "+ref.donneticket()); } } 2.6 Compilation La partie compilation n est censée poser aucun problème, la seule difficulté réside dans la gestion des classpath et des répertoires (cf cours Cpt JAVA). Dans cet exemple, le script de compilation se trouve dans le répertoire racine alors que les packages (c est à dire les répertoires ayant pour noms les packages et contenant les sources correspondantes) se situent dans le sous-répertoire src. Il est donc nécessaire de préciser que le point d accés aux sources est dans ce répertoire src. La solution la plus simple 19, consiste à modifier le classpath avec l option -cp. Le classpath doit correspondre au répertoire src à partir duquel javac pourra trouver les package ainsi que les bonnes classes 20. De plus, on souhaite générer deux applications à partir des mêmes sources. Il va donc falloir effectuer deux compilations la première compilation se chargera de compiler le serveur à savoir la classe LanceServeur et toutes les classes liées pour alimenter le répertoire bin\appliserveur la seconde compilation se chargera de compiler le client à savoir la classe Client et toutes les classes liées pour alimenter le répertoire bin\appliclient Il est possible de spécifier le répertoire de destination de la compilation grâce à l option -d. Le script de compilation s écrira donc de cette manière javac -cp "src" -d "bin\appliserveur" distributeur.lanceserveur javac -cp "src" -d "bin\appliclient" client.client 19 Pour ne pas avoir à changer de répertoire 20 Pour rappel, le vrai identifiant d une classe est nompackage.nomclasse et javac ira chercher le source de la classe dans le fichier nompackage\nomclasse.java 14

18 Vous noterez que la compilation des classes LanceServeur et Client va impliquer la compilation des classes liées (exemple l interface distante dans le package service) et que javac reconstitue automatiquement la bonne hiérarchie de répertoire dans les fichiers.class pour bin\appliserveur et bin\appliclient 2.7 Exécution des applications Pour exécuter l application distribuée, il est nécessaire de lancer dans l ordre 1. le rmiregistry 2. l application serveur 3. l application client lancement du rmiregistry La solution la plus simple pour lancer les applications consiste à ne pas utiliser de codebase (la notion de codebase est détaillée dans les parties suivantes). Pour cela il suffit de lancer le rmiregistry dans le répertoire contenant les packages décrivant l interface distante. En d autre termes, le script à partir du répertoire racine lançant le rmiregistry s écrira cd bin/appliserveur rmiregistry la commande rmiregistry lance l annuaire de référence distante qui se met en attente. Il est possible d utiliser des options au lancement de rmiregistry pour afficher les logs de l annuaire rmiregistry -J-Dsun.rmi.log.debug=true -J-Dsun.rmi.server.exceptionTrace=true -J-Dsun.rmi.loader.logLevel=verbose -J-Dsun.rmi.dgc.logLevel=verbose -J-Dsun.rmi.transport.logLevel=verbose -J-Dsun.rmi.transport.tcp.logLevel=verbose Lancement du serveur Pour lancer le serveur, il faut lancer la classe distributeur.lanceserveur située dans le repertoire bin\appliserveur. Il faut noter que bin\appliserveur N est PAS un package mais simplement un répertoire qui contient les.class de l application serveur, les packages sont déclarés dans le code sources des classes au moment de leur écriture (structure logique). Il faut donc 1. se placer dans le bon répertoire bin\appliserveur en modifiant le classpath 2. lancer l application distributeur.lanceserveur à partir de ce répertoire 21 En supposant que le script d exécution du serveur se trouve dans le répertoire racine, il s écrit donc de la manière suivante java -cp "bin$\backslash$appliserveur" distributeur.lanceserveur 21 et non pas à partir du répertoire bin\appliserveur\distributeur à partir duquel la JVM ne trouvera pas les packages 15

19 Normalement, tout devrait correctement s exécuter sans lever d exception. En cas d exception levée, il y a de fortes chances que cela provienne du fait que le rmiregistry n est pas lancé du bon endroit (ou que le serveur ait un mauvais codebase - cf partie 3) Lancement du client Il ne reste plus qu à lancer le client en suivant le même raisonnement que dans la partie précédente et en n oubliant pas de donner le nom du serveur (pour les tests, tout se fait en local) java -cp "bin$\backslash$appliclient" client.client localhost 2.8 Mettre en place l application Une fois que les applications fonctionnent bien en local, il faut penser à les tester en situation réelle (serveur et client sur des machines différentes). Cela réserve parfois des surprises (liées à la notion de codebase et de telechargement dynamique de classe - cf partie 4.3). 16

20 3 Erreurs fréquemment rencontrées Les premiers TPs sur RMI génèrent de nombreuses erreurs, voici un guide succinct pour vous aider (en faisant référent aux chapitres vous fournissant les explications complémentaires) 3.1 illegal remote method encountered Exception: java.lang.illegalargumentexception: illegal remote method encountered: public abs Ce problème ne pose pas de problème à la compilation mais conduit à des erreur à l exécution au moment de exportobject. Origine Ce problème arrive lorsque l interface distante n est pas valide, en particulier, l erreur classique consiste à oublier de lever les RemoteExceptions dans l interface. Ajouter throws RemoteException dans les méthodes de l interface distante (cf par- Solution tie 2.2). 3.2 java.security.accesscontrolexception Exception in thread "main" java.security.accesscontrolexception: access denied (java.net.soc Ce problème ne pose pas de problème à la compilation, mais conduit à des erreurs à l exécution au moment du bind(). Origine Ce problème arrive lorsqu un codebase est passé pour transmettre dynamiquement du code(cf partie 4.3) mais que l utilisateur n a pas accordé l autorisation à l application de télécharger du code distant. Solution Il suffit de donner des droits à l application à son lancement. Pour cela, il faut ajouter un fichier texte décrivant ces droits (par exemple java.policy). grant { permission java.net.socketpermission "*: ","connect,accept,listen,resolve"; permission java.security.allpermission; }; et ensuite lancer l application en lui donnant ces droits dans la propriété java.security.policy java -Djava.security.policy=java.policy [...] Attention, ouvrir les droits de cette manière autorise l application à rapatrier et exécuter n importe quel code distant ce qui pose d énormes problèmes de sécurité - par exemple si un code distant cherche à effacer votre disque dur 3.3 UnmarshalException java.rmi.unmarshalexception: Error unmarshaling return; Ce problème se pose fréquemment au lancement du serveur lorsqu il essaie d enregistrer la référence distante sur le rmiregistry 17

21 Origine Ce problème provient d un mauvais codebase qui ne permet pas au rmiregistry de récupérer à distance le code de la référence distante (cf chapitre 4.3). Solution - cas simple Dans les cas simples (voire simplistes), il n y a pas besoin de charger dynamiquement du code et il suffit de lancer le rmiregistry dans le répertoire du serveur. Solution - cas complexe La solution consistant à lancer le rmiregistry au niveau du serveur ne résout pas le problème dans tous les cas car l application distribuée peut nécessiter de charger dynamiquement des classes (plus de détail dans le chapitre 4.3). Il est donc parfois nécessaire de préciser un codebase et vous DEVEZ savoir le faire pour pouvoir appréhender des solutions plus complexes. Il suffit habituellement de spécifier l URL où rmiregistry va pouvoir charger les classes nécessaires pour pouvoir exécuter la référence distante. Cela se fait en utilisant la propriété java.rmi.serveur.codebase. Cette URL doit être bien formée (cf partie 3.4) java -Djava.rmi.serveur.codebase=file:///c:/repertoire/ Serveur 3.4 MalformedURLException java.rmi.unmarshalexception: Error unmarshaling return; nested exception is: java.net.malformedurlexception: no protocol: codebase.jar L erreur apparaît à l exécution du serveur lorsqu il enregistre l objet dans le rmiregistry Origine L erreur est un problème de codebase (cf chapitre 4.3). Le codebase est bien spécifié au lancement du serveur mais l URL fournie n est pas une URL valide. Solution Vérifier la validité de l URL du codebase, en particulier une URL doit commencer par un protocole (à savoir file:/// ou une URL ne peut pas être un chemin relatif. une URL ne peut pas contenir d espace une URL contient des / et pas antislash \ (contrairement aux chemins windows) Exemple : file:///c:/... Une seconde solution dans les cas simples consiste à se passer de chargement dynamique de classe et de lancer le rmiregistry dans le répertoire du serveur (si il n y a pas d autres classes qui transitent entre le client et le serveur) 18

22 4 Compléments En cours de construction 4.1 Autre manière de voir RMI Avec RMI, il est possible de voir une application distribuée comme une simple application dont les classes sont réparties sur plusieurs machines. Une approche possible de développement 22 consisterait à développer un code classique en JAVA et à ensuite séparer les composants en rajoutant les interfaces distantes nécessaires. Dans l exemple du distributeur, cela consisterait à écrire les classes client et distributeur sans se préoccuper de l interface distante tester à partir d un seul main que tout fonctionne correctement. Le main serait chargé de créer des clients et un distributeur, et les objets clients font une simple demande en local sur l objet distributeur pour récupérer des tickets. A cette étape, l ensemble des appels se fait en LOCAL sur la même JVM. une fois les tests réalisés, couper l application en morceaux destinés à être exécutés sur des machines différentes (dans ce cas, les classes distributeur et client) chercher tous les appels de méthodes entre ces morceaux et en déduire les interfaces distantes: dans notre cas, client appelle la méthode donneticket de distributeur, cette méthode est donc le service proposé par le distributeur et devra être implémenté dans l interface distante reconstruire les classes et méthodes en utilisant les interfaces distantes et les références distantes redéployer et tester l application. 4.2 Passage de paramètres 4.3 Codebase 4.4 Sécurité 4.5 CallBack 22 qui ne semble pas efficace mais qui pourra vous donner une autre vision de RMI 19

JVM. RMI - couche de référence. RMI - couche de transport TCP/IP

JVM. RMI - couche de référence. RMI - couche de transport TCP/IP Chapitre 9 Dans ce chapitre nous abordons le mécanisme RMI (Remote Method Invocation) permettant le développe ment des systèmes répartis. Nous expliquerons comment les classes d un serveur peuvent être

Plus en détail

Remote Method Invocation (RMI)

Remote Method Invocation (RMI) Remote Method Invocation (RMI) TP Réseau Université Paul Sabatier Master Informatique 1 ère Année Année 2006/2007 Plan Objectifs et Inconvénients de RMI Fonctionnement Définitions Architecture et principe

Plus en détail

Programmation RMI Ph. Truillet

Programmation RMI Ph. Truillet http://www.irit.fr/~philippe.truillet Ph. Truillet Octobre 2015 v. 1.7 0. déroulement du TP RMI (Remote Method Invocation) est une technologie développée et fournie par Sun à partir du JDK 1.1 pour permettre

Plus en détail

Cours client-serveur Web : Java et RMI (Remote Method Invocation)

Cours client-serveur Web : Java et RMI (Remote Method Invocation) Cours client-serveur Web : Java et RMI (Remote Method Invocation) 1 Java: Rappel sur les threads Cycle de vie d un thread (1) Né -> prêt appel de la méthode start du thread Prêt Exécution Distribution

Plus en détail

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static

Plan. Environnement Client/Serveur. Cours 6 Rappels Java (suite) Appel de méthode à distance. Utilité. static Plan Environnement Client/Serveur Cours 6 Rappels Java (suite) Appel de méthode à distance kn@lri.fr http://www.lri.fr/~kn 1 Rappels sur les systèmes d'exploitations / Communication par mémoire partagée

Plus en détail

Objets distribués et Appel de Méthodes à Distance 2009-2010

Objets distribués et Appel de Méthodes à Distance 2009-2010 Objets distribués et Appel de Méthodes à Distance 2009-2010 1 Objectif : construire une application où différents modules peuvent être situés sur des machines différentes, en utilisant un modèle à objets

Plus en détail

Java RMI. Programmation des applications réparties. Olivier Flauzac URCA. Master EEAMI-Informatique première année

Java RMI. Programmation des applications réparties. Olivier Flauzac URCA. Master EEAMI-Informatique première année Java RMI Programmation des applications réparties Olivier Flauzac URCA Master EEAMI-Informatique première année Olivier Flauzac (URCA) PAR : Java RMI MSTIC-INFO 1 1 / 30 1 RMI 2 Architecture 3 Développement

Plus en détail

Programmation par RPC et Java-RMI :

Programmation par RPC et Java-RMI : 2A-SI 3 Prog. réseau et systèmes distribués 3.2 et JavaRMI Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle Support de cours élaboré avec l aide de l équipe pédagogique du

Plus en détail

La plate-forme Java RMI

La plate-forme Java RMI La plate-forme Java RMI Frank Singhoff Bureau C-202 Université de Brest, France Lab-STICC/UMR 3192 singhoff@univ-brest.fr UE systèmes à objets répartis, Université de Brest Page 1/25 Sommaire 1. Le modèle

Plus en détail

RMI (Remote Method Invocation) Client serveur, situation traditionnelle. Client serveur, situation traditionnelle.

RMI (Remote Method Invocation) Client serveur, situation traditionnelle. Client serveur, situation traditionnelle. RMI (Remote Method Invocation) Présentation de RMI Université Française d Egypte Richard Grin Version 0.6 10/10/12 R. Grin RMI page 2 Client serveur, situation traditionnelle Sur la machine A un client

Plus en détail

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. RMI Remote Method Invocation: permet d'invoquer des méthodes d'objets distants. Méthode proche de RPC. Outils et classes qui rendent l'implantation d'appels de méthodes d'objets distants aussi simples

Plus en détail

Java Remote Method Invocation

Java Remote Method Invocation Java Remote Method Invocation Ce support est très largement inspiré du livre et du cours de S. Krakowiak S. Krakowiak Java Remote Method Invocation 1 / 25 Intérêt des objets pour la construction d applications

Plus en détail

Programmation Réseau RMI. Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr. ! UFR Informatique

Programmation Réseau RMI. Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr. ! UFR Informatique Programmation Réseau RMI Jean-Baptiste.Yunes@univ-paris-diderot.fr armand@informatique.univ-paris-diderot.fr UFR Informatique 2014 Les RMI de Java Les applications RMI sont des applications bâties sur

Plus en détail

Remote Method Invocation en Java (RMI)

Remote Method Invocation en Java (RMI) Remote Method Invocation en Java (RMI) Modélisation et construction des applications réparties (Module M-4102C) J. Christian Attiogbé Fevrier 2015 J. Christian Attiogbé (Fevrier 2015) Remote Method Invocation

Plus en détail

Systèmes Distribués Des protocoles client serveur au paradigme objets distribués avec Java

Systèmes Distribués Des protocoles client serveur au paradigme objets distribués avec Java Systèmes Distribués Des protocoles client serveur au paradigme objets distribués avec Java (application avec Java RMI) Éric Leclercq Département IEM / Laboratoire LE2i Décembre 2010 émail : Eric.Leclercq@u-bourgogne.fr

Plus en détail

Java Avancé - Cours 2

Java Avancé - Cours 2 Java avancé - cours 2 1/8 Java Avancé - Cours 2 Plan 1 Communication entre objets 1 1.1 Motivation....................................................... 1 1.2 Relations entre le panier et le rayon.........................................

Plus en détail

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 7 : RMI

DUT Informatique Module JAVA Apprentis Département Informatique 2008 / 2009. Travaux Pratiques n o 7 : RMI iut ORSAY DUT Informatique Département Informatique 2008 / 2009 Travaux Pratiques n o 7 : RMI Nom(s) : Groupe : Date : Objectifs : savoir créer des applications client-serveur mettant en jeu des machines

Plus en détail

TP Java RMI. Alexandre Denis Alexandre.Denis@inria.fr. Inria Bordeaux Sud-Ouest France ENSEIRB PG306

TP Java RMI. Alexandre Denis Alexandre.Denis@inria.fr. Inria Bordeaux Sud-Ouest France ENSEIRB PG306 TP Java RMI Alexandre Denis Alexandre.Denis@inria.fr Inria Bordeaux Sud-Ouest France ENSEIRB PG306 Paradigme RMI RMI (Remote Method Invocation) RPC orientés objet (encapsulation, héritage,...) objet :

Plus en détail

Le langage PHP permet donc de construire des sites web dynamiques, contrairement au langage HTML, qui donnera toujours la même page web.

Le langage PHP permet donc de construire des sites web dynamiques, contrairement au langage HTML, qui donnera toujours la même page web. Document 1 : client et serveur Les ordinateurs sur lesquels sont stockés les sites web sont appelés des serveurs. Ce sont des machines qui sont dédiées à cet effet : elles sont souvent sans écran et sans

Plus en détail

Classes et templates C++

Classes et templates C++ Classes et templates C++ Ce TP propose une application des classes, des templates et du polymorphisme au travers du design de classes permettant de gérer des courbes de Bézier. Contents 1 Bézier unidimensionnelle

Plus en détail

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java

Introduction au Java Development Kit Et quelques instructions en Java. 1 Création des répertoires d accueil des programmes Java HLIN406 - Janvier 2015 Le Java Development Kit offre un ensemble d outils de développement d applications Java. Pour utiliser ces outils, JDK ne propose pas d interface utilisateur, on doit donc écrire

Plus en détail

objectif : plan : Java, CORBA et RMI A. Le Grand,1997 1 JAVA, CORBA et RMI

objectif : plan : Java, CORBA et RMI A. Le Grand,1997 1 JAVA, CORBA et RMI JAVA, CORBA et RMI objectif : développer des applications client/serveur incluant des objets répartis Java / CORBA : client/serveur hétérogènes Java / RMI : client/serveur homogènes plan : l architecture

Plus en détail

BTS SIO option SISR Lycée Godefroy de Bouillon Clermont-Ferrand

BTS SIO option SISR Lycée Godefroy de Bouillon Clermont-Ferrand Active Directory sous Windows Server SAHIN Ibrahim BTS SIO option SISR Lycée Godefroy de Bouillon Clermont-Ferrand Sommaire I - Introduction... 3 1) Systèmes d exploitation utilisés... 3 2) Objectifs...

Plus en détail

Gestion multi-stocks

Gestion multi-stocks Gestion multi-stocks Dans l architecture initiale du logiciel IDH-STOCK, 11 champs obligatoires sont constitués. Ces champs ne peuvent être supprimés. Ils constituent l ossature de base de la base de données

Plus en détail

CORBA. Cycle de développement

CORBA. Cycle de développement CORBA Cycle de développement Projet MIAGe Toulouse Groupe 2 1 Le cycle de développement (1/3) On s intéresse au développement selon le mode statique, c est à dire en utilisant les talons (stub, skeleton,

Plus en détail

Maxima et la programmation en parallèle

Maxima et la programmation en parallèle Maxima et la programmation en parallèle Danielle Léger Département de mathématiques et d informatique Université Laurentienne (Sudbury, Ontario) La présence de l ordinateur constitue une réalité palpable

Plus en détail

TP1. Outils Java Eléments de correction

TP1. Outils Java Eléments de correction c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par

Plus en détail

Manuel de référence de KoXo Administrator V2.3

Manuel de référence de KoXo Administrator V2.3 20 Gestion des comptes «Office 365» Office 365 est une solution hébergée offrant une messagerie de type Exchange 2010, un portail Sharepoint 2010, Office 2010 en ligne, et un système de communications

Plus en détail

RMI : Remote Method Invocation Appel de méthodes à distance TD/TP

RMI : Remote Method Invocation Appel de méthodes à distance TD/TP RMI : Remote Method Invocation Appel de méthodes à distance TD/TP Patrice Torguet torguet@irit.fr Université Paul Sabatier But l But du TD/TP : application répartie permettant de gérer des comptes bancaires.

Plus en détail

DUT Informatique Module Système S4 C Département Informatique 2009 / 2010. Travaux Pratiques n o 5 : Sockets Stream

DUT Informatique Module Système S4 C Département Informatique 2009 / 2010. Travaux Pratiques n o 5 : Sockets Stream iut ORSAY DUT Informatique Département Informatique 2009 / 2010 Travaux Pratiques n o 5 : Sockets Stream Nom(s) : Groupe : Date : Objectifs : manipuler les primitives relatives à la communication par sockets

Plus en détail

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP Université de Strasbourg Licence Pro ARS UFR de Mathématiques et Informatique Année 2009/2010 1 Adressage IP 1.1 Limites du nombre d adresses IP 1.1.1 Adresses de réseaux valides Réseaux Locaux TP 04 :

Plus en détail

Cours d Analyse, Algorithmique Elements de programmation

Cours d Analyse, Algorithmique Elements de programmation 1 de 33 Cours d Analyse, Algorithmique Elements de programmation Florent Hivert Mél : Florent.Hivert@lri.fr Adresse universelle : http://www.lri.fr/ hivert 2 de 33 Données et instructions Un programme

Plus en détail

1 Programmation Client/Serveur basée sur TCP/IP

1 Programmation Client/Serveur basée sur TCP/IP Outils Informatique pour l ingénieur TD 1 Réseau et Web IP, Client/serveur 1 Programmation Client/Serveur basée sur TCP/IP 1.1 Buts de cette réalisation Ce TP sur la programmation client/serveur a pour

Plus en détail

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

[APPLICATON REPARTIE DE VENTE AUX ENCHERES] 2012 Polytech Nice- Sophia El Hajji Khalil Yousfi Hichem SI4 - Log [APPLICATON REPARTIE DE VENTE AUX ENCHERES] Sommaire Architecture de l application... 3 Le Serveur... 3 Le Client... 4 Passage en CORBA...

Plus en détail

Gestion des accès aux ressources à l aide des groupes

Gestion des accès aux ressources à l aide des groupes Gestion des accès aux ressources à l aide des groupes Un groupe est un ensemble de comptes d utilisateur. Les groupes permettent de simplifier la gestion de l accès des utilisateurs et des ordinateurs

Plus en détail

TP SPRING. https ://lipn.univ-paris13.fr/ fortier/enseignement/spring/tp/

TP SPRING. https ://lipn.univ-paris13.fr/ fortier/enseignement/spring/tp/ Institut Galilée Année 2015-2016 TP SPRING Programmation et Logiciels sûrs Master 2 PLS Résumé L objectif de ce TP est d être capable de réaliser une application Java de gestion de location de véhicules,voiture

Plus en détail

Les exceptions en Java

Les exceptions en Java Chapitre 6 Les exceptions en Java Lorsqu on conçoit un programme, on essaie évidemment qu il soit correct, c est-à-dire qu il fonctionne parfaitement dans les conditions prévues de son utilisation. L utilisateur

Plus en détail

Sensibilisation à RMI (Remote Method Invocation)

Sensibilisation à RMI (Remote Method Invocation) Jini Sensibilisation à RMI (Remote Method Invocation) Le rêve de tout système distribué L idéal serait d avoir un système distribué utilisant la technologie objet et permettant : 1) d invoquer une méthode

Plus en détail

arcopole Studio Annexe 7 Architectures Site du programme arcopole : www.arcopole.fr

arcopole Studio Annexe 7 Architectures Site du programme arcopole : www.arcopole.fr 4 arcopole Studio Annexe 7 Architectures Site du programme arcopole : www.arcopole.fr Auteur du document : Esri France Version de la documentation : 1.2 Date de dernière mise à jour : 26/02/2015 Sommaire

Plus en détail

L approche Bases de données

L approche Bases de données L approche Bases de données Cours: BD. Avancées Année: 2005/2006 Par: Dr B. Belattar (Univ. Batna Algérie) I- : Mise à niveau 1 Cours: BDD. Année: 2013/2014 Ens. S. MEDILEH (Univ. El-Oued) L approche Base

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr 1 Plan Principes généraux Modèle

Plus en détail

Notions de base sur SNMP

Notions de base sur SNMP Notions de base sur SNMP Quelques rappels sur SNMP SNMP est un protocole permettant a un Manager de dialoguer avec différents agents sur le réseau. L objectif de ces mécanismes est de pouvoir superviser

Plus en détail

Chapitre 2. Classes et objets

Chapitre 2. Classes et objets Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons

Plus en détail

Le routage. Stéphane Gill. Stephane.Gill@CollegeAhuntsic.qc.ca. Introduction 2. Aspect d un routeur 2. Concept de routage 2. Table de routage 4

Le routage. Stéphane Gill. Stephane.Gill@CollegeAhuntsic.qc.ca. Introduction 2. Aspect d un routeur 2. Concept de routage 2. Table de routage 4 Stéphane Gill Stephane.Gill@CollegeAhuntsic.qc.ca Table des matières Introduction 2 Aspect d un routeur 2 Concept de routage 2 Table de routage 4 Mise en place d un routeur Linux 5 Activer le routage 6

Plus en détail

L'objectif du TP est de: mettre en pratique un exemple simple de service Web, de programmer un service Web calculatrice, et son client.

L'objectif du TP est de: mettre en pratique un exemple simple de service Web, de programmer un service Web calculatrice, et son client. MASTER SSR - SERVICES WEB! Version 2011 L'objectif du TP est de: mettre en pratique un exemple simple de service Web, de programmer un service Web calculatrice, et son client. Introduction Nous proposons

Plus en détail

Programmation orientée objet en langage JAVA

Programmation orientée objet en langage JAVA Programmation orientée objet en langage JAVA Java RMI : Techniques et utilisations avancées de RMI Claude Duvallet Université du Havre UFR Sciences et Techniques 25 rue Philippe Lebon - BP 540 76058 LE

Plus en détail

RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005

RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005 Oussama ELKACHOINDI Wajdi MEHENNI RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005 Sommaire I. Préliminaire : Notice d exécution et mode opératoire...4 II. Architecture globale de l application...5

Plus en détail

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007 NFP 121 Java et les Threads Présentation : Thierry Escalarasse Mai 2007 Plan du cour Présentation de la notion de Threads La classe Thread L interface Runnable Les états d un thread La Synchronisation

Plus en détail

Installation / Sauvegarde Restauration / Mise à jour

Installation / Sauvegarde Restauration / Mise à jour Installation / Sauvegarde Restauration / Mise à jour SPIP version 1.8.x Serveur (Linux) Jean Sébastien BARBOTEU dev.jsb@laposte.net Introduction Nous allons aborder tous les aspects techniques liés à la

Plus en détail

Travaux Pratiques de Réseaux DUT 2 eme année

Travaux Pratiques de Réseaux DUT 2 eme année Travaux Pratiques de Réseaux DUT 2 eme année Copyright c Emmanuel Nataf Chapitre 1 Programmation réseaux 1.1 Communication avec UDP - package java.net Le but de ce TP est de réaliser deux programmes permettant

Plus en détail

RMI le langage Java XII-1 JMF

RMI le langage Java XII-1 JMF Remote Method Invocation (RMI) XII-1 Introduction RMI est un ensemble de classes permettant de manipuler des objets sur des machines distantes (objets distants) de manière similaire aux objets sur la machine

Plus en détail

Module d anonymisation

Module d anonymisation Module d anonymisation Préambule Ce module permet d «anonymiser» un fichier, c est à dire de masquer les informations qu il contient en fonction de règles préalablement spécifiées. Le fichier généré par

Plus en détail

RICM 4 ème année 12/1/2012

RICM 4 ème année 12/1/2012 RICM 4 ème année 12/1/2012 Examen de Systèmes Répartis Durée : 2h, Documents autorisés à l exception des livres. Le barème est indicatif. Partie A Applications Web Question 1. Dans un répertoire contenant

Plus en détail

Utilisation de SVN. 1 Introduction. 2 Architecture. 3 Références et aide en ligne

Utilisation de SVN. 1 Introduction. 2 Architecture. 3 Références et aide en ligne N7 1IMA TECHNOLOGIE OBJET TP 3 18/02/2015 (Séance TP 2) Objectifs : Comprendre le principe d un outil de gestion de configuration Savoir utiliser SVN (subversion) 1 Introduction Pour travailler en groupe

Plus en détail

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10

Dossier Technique. Détail des modifications apportées à GRR. Détail des modifications apportées à GRR Le 17/07/2008. Page 1/10 Dossier Technique Page 1/10 Sommaire : 1. REPONSE TECHNIQUE A LA DEMANDE 3 1.1. Prise en compte de la dernière version de phpcas 3 1.2. Gestion de la connexion à GRR 3 1.2.1. Récupération des attributs

Plus en détail

Introduction à Eclipse

Introduction à Eclipse Introduction à Eclipse Eclipse IDE est un environnement de développement intégré libre (le terme Eclipse désigne également le projet correspondant, lancé par IBM) extensible, universel et polyvalent, permettant

Plus en détail

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\

Avant de programmer en Java DOS Set Path=C:\JDK\bin Path=C:\JDK\bin C:\JDK\bin Set Path=%Path%;C:\JDK\bin C:\JDK\bin C:\JDK\ Exercices corrigés de programmation OO Java Préparés par : Mlle Imene Sghaier Année Académique : 2006-2007 Premiers Pas I. Avant de programmer en Java Le JDK de Sun (Java Development Kit) est l outil essentiel

Plus en détail

Les Systèmes et Applications Réparties et leur Programmation

Les Systèmes et Applications Réparties et leur Programmation Les Systèmes et Applications Réparties et leur Programmation Samia Bouzefrane Maître de Conférences Laboratoire CEDRIC Conservatoire National des Arts et Métiers 292 rue Saint Martin 75141 Paris Cédex

Plus en détail

Documentation Ellipses Windows. Auteur : Léonard FRECHET Date : 10/01/07 Diffusion : Publique ELLIPSES 2000. Envoi Automatisé de SMS Ellipses SMS

Documentation Ellipses Windows. Auteur : Léonard FRECHET Date : 10/01/07 Diffusion : Publique ELLIPSES 2000. Envoi Automatisé de SMS Ellipses SMS ELLIPSES 2000 Envoi Automatisé de SMS Ellipses SMS SOMMAIRE I. Introduction à Ellipses SMS... 3 II. Deux modes de fonctionnement... 3 1. Au travers d Ellipses 2000... 3 2. Utilisation normale (en vue d

Plus en détail

Symphony Déployer des collections sur différents emplacements

Symphony Déployer des collections sur différents emplacements Symphony Déployer des collections sur différents emplacements Sandrine MARTINEZ 19/05/2014 1 / 28 TABLE DES MATIERES 1. Introduction... 3 1.1. But du document... 3 2. Etapes... 4 3. Configuration de Wireless

Plus en détail

Rapport du projet de Chat distribué avec Java RMI

Rapport du projet de Chat distribué avec Java RMI Rapport du projet de Chat distribué avec Java RMI 1. LE SUJET...2 2. VERSION 1...4 A. PRESENTATION ET PRINCIPE... 4 B. CARACTERISTIQUES CLIENT / SERVEUR... 6 3. VERSION 2...8 A. PRESENTATION ET PRINCIPE...

Plus en détail

Modèle Client-Serveur Partage du serveur entre clients

Modèle Client-Serveur Partage du serveur entre clients Modèle Client-Serveur Partage du serveur entre clients Un serveur peut servir plusieurs clients Vu d un client particulier client requête réponse serveur Vu du serveur Gestion des requêtes (priorité) Exécution

Plus en détail

Introduction aux systèmes d exploitation

Introduction aux systèmes d exploitation Introduction aux systèmes d exploitation Le système d exploitation est un ensemble de logiciels qui pilotent la partie matérielle d un ordinateur. Les principales ressources gérées par un système d exploitation

Plus en détail

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2 Langage et Concepts de Programmation Objet Travaux Dirigés no2 Pôle Informatique École Nationale Supérieure des Mines de St-Etienne Vous trouverez plus de détails sur les concepts abordés lors de ce TD

Plus en détail

Modèle client-serveur

Modèle client-serveur Modèle client-serveur Daniel Hagimont IRIT/ENSEEIHT 2 rue Charles Camichel - BP 7122 31071 TOULOUSE CEDEX 7 Daniel.Hagimont@enseeiht.fr http://hagimont.perso.enseeiht.fr Remerciements Michel Riveill 1

Plus en détail

Quoi de neuf dans Optymo 5.0

Quoi de neuf dans Optymo 5.0 Quoi de neuf dans Optymo 5.0 Notes de lecture : dans ce document, les textes soulignés font référence aux libellés des fenêtres ou aux libellés associés à des boutons d Optymo, les textes en caractères

Plus en détail

NFP111 Systèmes et Applications Réparties

NFP111 Systèmes et Applications Réparties NFP111 Systèmes et Applications Réparties 1 de 9 NFP111 Systèmes et Applications Réparties Cours 6 - Remote Method Invocation (RMI)/Partie 2 Claude Duvallet Université du Havre UFR Sciences et Techniques

Plus en détail

TCP/IP, NAT/PAT et Firewall

TCP/IP, NAT/PAT et Firewall Année 2011-2012 Réseaux 2 TCP/IP, NAT/PAT et Firewall Nicolas Baudru & Nicolas Durand 2e année IRM ESIL Attention! Vous devez rendre pour chaque exercice un fichier.xml correspondant à votre simulation.

Plus en détail

GEI 465 : Systèmes répartis

GEI 465 : Systèmes répartis Université de Sherbrooke GEI 465 : Systèmes répartis Travaux à effectuer Ahmed Khoumsi Automne 2004 Page 1 Les deux premiers travaux que vous effectuerez vous donneront, respectivement, l occasion d utiliser

Plus en détail

Guide d intégration. Protection de logiciels LABVIEW avec CopyMinder. Contact Commercial : Tél. : 02 47 35 70 35 Email : com@aplika.

Guide d intégration. Protection de logiciels LABVIEW avec CopyMinder. Contact Commercial : Tél. : 02 47 35 70 35 Email : com@aplika. Guide d intégration Protection de logiciels LABVIEW avec CopyMinder Contact Commercial : Tél. : 02 47 35 70 35 Email : com@aplika.fr Contact Technique : Tél. : 02 47 35 53 36 Email : support@aplika.fr

Plus en détail

Manuel du logiciel PrestaTest.

Manuel du logiciel PrestaTest. Manuel du logiciel. Ce document décrit les différents tests que permet le logiciel, il liste également les informations nécessaires à chacun d entre eux. Table des matières Prérequis de PrestaConnect :...2

Plus en détail

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012

Université Mohammed Premier Année universitaire 2011-2012. Correction de l examen écrit de la session ordinaire 18 Février 2012 Université Mohammed Premier Année universitaire 2011-2012 Faculté des Sciences Filière SMI Département de Mathématiques Module : POO Java et d Informatique Semestre : S5 Correction de l examen écrit de

Plus en détail

Comment configurer les HotFolders et les Workflows

Comment configurer les HotFolders et les Workflows Comment configurer les HotFolders et les Workflows HotFolders 1 À la base : le Hotfolder en tant que gestionnaire de fichiers 1 Un exemple : les Hotfolders et la barre d images 2 Imprimer depuis un client

Plus en détail

Le voyageur de commerce

Le voyageur de commerce Université de Strasbourg UFR Maths-Informatique Licence 3 - Semestre 6 Le voyageur de commerce Jonathan HAEHNEL & Marc PAPILLON Strasbourg, le 3 mai 2012 Table des matières 1 Etat des lieux 4 1.1 Fonctionnalités..............................

Plus en détail

TP 2 Architecture Client-Serveur sous TCP-IP : Protocoles Modbus/TCP

TP 2 Architecture Client-Serveur sous TCP-IP : Protocoles Modbus/TCP LP AICP Module EC3-1 Supervision des procédés - Travaux Pratiques en Réseau TP 2 Architecture Client-Serveur sous TCP-IP : Protocoles Modbus/TCP Objectifs : L objectif de ce TP est de mettre en œuvre une

Plus en détail

Découverte d UNET. 2.1. Le Network Manager

Découverte d UNET. 2.1. Le Network Manager 2 Découverte d UNET Avant l arrivée d UNET, les développeurs Unity devaient tout coder de A à Z lorsqu il s agissait de développer un jeu en réseau. Ils devaient créer des scripts pour gérer le serveur,

Plus en détail

Cette option est aussi disponible sur les clients Windows 7 sous la forme d un cache réparti entre les différentes machines.

Cette option est aussi disponible sur les clients Windows 7 sous la forme d un cache réparti entre les différentes machines. Le BranchCache Cette fonctionnalité qui apparaît dans Windows 2008 R2 permet d optimiser l accès aux ressources partagées hébergées sur des partages de fichiers ou des serveurs webs internes de type documentaire

Plus en détail

UT Installation et paramétrage logiciel de sauvegarde INSTALLATION ET PARAMETRAGE LOGICIEL DE SAUVEGARDE. Groupe PROGMAG

UT Installation et paramétrage logiciel de sauvegarde INSTALLATION ET PARAMETRAGE LOGICIEL DE SAUVEGARDE. Groupe PROGMAG GUIDE UTILISATION POINT DE VENTE INSTALLATION ET PARAMETRAGE LOGICIEL DE SAUVEGARDE SOMMAIRE 1 Créer une tâche de sauvegarde... 4 1.1 Paramètres de la tâche... 4 1.1.1 Nommer la tâche... 4 1.1.2 Emplacement

Plus en détail

Administration via l'explorateur WebSphere MQ

Administration via l'explorateur WebSphere MQ Ce document présente l utilisation de l Explorateur WebSphere MQ, et en particulier sa capacité à administrer des Queue Manager distants. Il aborde également les problèmes de sécurité liés à l administration

Plus en détail

Le programme OFFICE GSP est disponible sur le site http://www.officegsp.com.

Le programme OFFICE GSP est disponible sur le site http://www.officegsp.com. 1 1 - Installation & Mise à Jour du logiciel 1.1 Première Installation Cette procédure d installation est indispensable pour tout ordinateur n ayant jamais fait l objet d une installation du logiciel.

Plus en détail

Procédure d installation de la solution Central WiFI Manager CWM

Procédure d installation de la solution Central WiFI Manager CWM Procédure d installation de la solution Central WiFI Manager CWM Introduction : Central WiFi Manager est une solution serveur basée sur une interface web permettant la gestion centralisée de points d accès

Plus en détail

4D v11 SQL Release 6 (11.6) ADDENDUM

4D v11 SQL Release 6 (11.6) ADDENDUM ADDENDUM Bienvenue dans la release 6 de 4D v11 SQL. Ce document présente les nouveautés et modifications apportées à cette nouvelle version du programme. Augmentation des capacités de chiffrement La release

Plus en détail

Java Avancé - Cours 5

Java Avancé - Cours 5 Java avancé - cours 5 1/7 Java Avancé - Cours 5 Plan 1 Signature de fichier 1 1.1 Notions de base.................................................... 1 1.2 Génération d une clé.................................................

Plus en détail

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

Plus en détail

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code Généralités javadoc Université de Nice - Sophia Antipolis Richard Grin Version 1.4.1 8/2/11 javadoc produit de la documentation en partant de commentaires particuliers insérés dans le code source des classes

Plus en détail

1.1 Remote Procedure Call (RPC)

1.1 Remote Procedure Call (RPC) 1.1 Remote Procedure Call (RPC) Le modèle Client-Serveur est un modèle simple à utiliser pour la structuration des systèmes répartis. Mais ce modèle s appuie sur des communications de type entrée/sortie

Plus en détail

Introduction aux exercices en Java

Introduction aux exercices en Java Introduction aux exercices en Java Avant de commencer les séries proprement dites, nous allons voir quelques informations utiles concernant le langage de programmation principal de ce cours d'informatique

Plus en détail

PG208, Projet n 3 : Serveur HTTP évolué

PG208, Projet n 3 : Serveur HTTP évolué PG208, Projet n 3 : Serveur HTTP évolué Bertrand LE GAL, Serge BOUTER et Clément VUCHENER Filière électronique 2 eme année - Année universitaire 2011-2012 1 Introduction 1.1 Objectif du projet L objectif

Plus en détail

LE RPV DE NIVEAU RÉSEAU AVEC TINC

LE RPV DE NIVEAU RÉSEAU AVEC TINC LE RPV DE NIVEAU RÉSEAU AVEC TINC L entreprise Ilog est une petite entreprise de services informatiques située à La Défense. Les chefs de projet de l entreprise sont souvent en déplacement à travers toute

Plus en détail

ETUDES DE SUPPORTS & PROTOCOLES DE COMMUNICATION DNS

ETUDES DE SUPPORTS & PROTOCOLES DE COMMUNICATION DNS Page 1 / 8 A) FQDN, URL & URI Un FQDN est le significatif d'un hôte sur l'internet (un serveur la plupart du temps) et un URI ou URL définit l'accès à un document sur un serveur. A.1 FQDN (Full Qualified

Plus en détail

Procédure de Choix du mode Fin de Journée Version 7.1. pour le logiciel MicroJet Version 9.0x de TNT Express National.

Procédure de Choix du mode Fin de Journée Version 7.1. pour le logiciel MicroJet Version 9.0x de TNT Express National. Procédure de Choix du mode Fin de Journée Version 7.1 pour le logiciel MicroJet Version 9.0x de TNT Express National. (via un transfert FTP sur le serveur de TNT ou via une clé USB) Préambule : Cette procédure

Plus en détail

Guide d'utilisation du CFEnet Local, version 2 1 / 8

Guide d'utilisation du CFEnet Local, version 2 1 / 8 Livrable Automate de Transmission des Fichiers CFEnet, version 2 : Guide d'utilisation Version Auteur Validation Date de diffusion Destinataires Version de travail Thierry Mallard Thierry

Plus en détail

Le filtrage de niveau IP

Le filtrage de niveau IP 2ème année 2008-2009 Le filtrage de niveau IP Novembre 2008 Objectifs Filtrage : Le filtrage permet de choisir un comportement à adopter vis à vis des différents paquets émis ou reçus par une station.

Plus en détail

Documentation d implémentation de l application Android de jeu géolocalisé

Documentation d implémentation de l application Android de jeu géolocalisé Documentation d implémentation de l application Android de jeu géolocalisé Introduction Ce document décrit l implémentation de l application Android en précisant l organisation du code et les différentes

Plus en détail

Monter un site Intranet

Monter un site Intranet Monter un site Intranet S il n est pas difficile de créer un site Web basique grâce à IIS, ceux d entre vous qui ne sont pas initiés aux langages de développement Web auront du mal à satisfaire les besoins

Plus en détail

Héritage, et quelques petits mots-clés de Java

Héritage, et quelques petits mots-clés de Java Héritage, et quelques petits mots-clés de Java Bilan de la séance du 3 février. 1 Champs d instance, champs de classe La situation usuelle pour les attributs et les méthodes est la suivante : La classe

Plus en détail

Restaurer des données

Restaurer des données Restaurer des données Pré-requis à cette présentation La lecture de ce guide suppose que vous avez installé l agent SFR Backup sur l équipement que vous souhaitez sauvegarder. Il est également nécessaire

Plus en détail

Travaux pratiques. Protocoles de la couche transport et de la couche applications

Travaux pratiques. Protocoles de la couche transport et de la couche applications Travaux pratiques Protocoles de la couche transport et de la couche applications Objectif Ce laboratoire se veut une introduction aux protocoles de la couche transport et de la couche application du modèle

Plus en détail

1. Faire Démarrer, Paramètres, Panneau de configuration, Outils d administration, Gestion de l ordinateur.

1. Faire Démarrer, Paramètres, Panneau de configuration, Outils d administration, Gestion de l ordinateur. TP PERSONNALISER SON POSTE DE TRAVAIL LES COMPTES, LES GROUPES C'EST QUOI? Les comptes et les groupes permettent de gérer plus facilement l administration d une machine. Il semble assez logique que sur

Plus en détail