مكتب الوثائق

ملف من قاعدة السير الذاتية

العربية
العودة إلى قاعدة السير الذاتية

ملف المترشح تمّ دمج 2 بطاقات (الشخص نفسه)

التصنيف
المنصب
Product Manager
المهنة
المنتج وإدارة المشاريع
قطاع النشاط
غير محدد غير محدد
المصدر
ملف مستقطب
الخبرة
—
المهارات
Java, C++
الهوية وجهات الاتصال

يجب أن تكون مشتركاً للاطلاع على اسم هذا الملف وبيانات الاتصال به.

الموقع
المغرب
المنشأ
Recherche web
سيرة ذاتية مجهولة الهوية

سيرة ذاتية أُخفيت هويتها آلياً: حُذف الاسم وبيانات الاتصال والروابط. العبارات بين معقوفتين تعوّض معلومة محذوفة.

NextData
سيرة ذاتية مجهولة الهوية
ND-CV-608EA905

المنتج وإدارة المشاريع

المغرب الهوية وبيانات الاتصال تقدمها NextData

[nom] à [nom]

Pourquoi ?

Maturation de la technologie orientée objet

[nom]

Smalltalk , C++, Java

Maturation [nom] communications Client-Serveur

[nom]

RPC

couches OSI

L’héritage de la programmation Client Serveur

Importance du marshalling

[nom] serveurs accessibles simultanément par plusieurs clients

Enregistrement [nom] serveurs dans [nom] annuaires de noms

Communication connectée ou par message…..

Appel de procédures à distance

Circulation de messages et machines hétérogènes

Infrastructure informatique de distribution

Couche de services · Couche de transport

Annuaires · TCP

Sécurité · UDP

Protocole d’applications

Exemple

CLIENT EPUNSAfun · SERVEUR de Surnoms

oter

infrastructure

Protocole d’application ?

Communication client serveur

CLIENT

Connexion au serveur

Préparation de la requête

Envoi de la requête

Attente du résultat

….

Analyse du résultat reçu

SERVEUR

Attente de requêtes

Analyse de la requête

…..

Exécution

….

Préparation de la réponse

Envoi de la réponse

Exemple : annuaire [nom] surnoms

1:Paul:bug ou ENR/nPaul/n/bug/n ou Objet Requête Seriablizable

EssiFun · SERVEUR de Surnoms

enregistrer(« paul », « bug »)

marshalling [téléphone].. · unmarshalling

enregistrer(« paul », « bug ») = TRUE

unmarshalling · marshalling

101..

TRUE

Différence entre un transport TCP et UDP pour le codage [nom] données ?

L’héritage de la programmation par objets

Communication par envoi de messages

Encapsulation et Interface

Héritage et Composition

Objets = briques logicielles

Assembler [nom] briques élémentaires

Réduire la complexité [nom] systèmes d’information

Séparation entre interface et implémentation

Représentation et types de données

Mécanismes d’abstraction

Séparation entre interface et implémentation

séparation de la définition et de l’implémentation :

encapsulation

interface : partie visible de l’objet implémentation : partie privée inaccessible depuis d’autres objets interface = contrat entre l’objet et le monde extérieur

Séparation entre interface et implémentation

Assemblage [nom] objets dépend uniquement [nom]

interfaces, le changement local d’un objet ne perturbe pas l’ensemble de l’application.

Importance de la nomenclature [nom] objets substitution logique liée à la substitution physique

Représentation et Types de données

Définition de nouveaux types

Choix d’un type pour une donnée (ex. montant) devient une contrainte sur la conception.

Types de données Abstraits

considérés comme [nom] types de base

Mécanismes d’abstraction

Abstraction [nom] données : essence du procédé de construction de systèmes d ’information à base d ’objets distribués par Héritage et/ou Composition

[nom] mises en œuvre différentes selon les cas

Que peut on automatiser ?

A partir du protocole d’applications

Au minimum, la phase de marshalling/unmarshalling

(hétérogéneité [nom] langages, [nom] systèmes, etc)

Selon les cas, le squelette du serveur les appels distants du client

Interaction Client/server :

socket TCP

Serveur

create socket, port=x, for incoming request:

welcomeSocket =

ServerSocket()

TCP

wait for incoming connection request connection setup connectionSocket = welcomeSocket.accept()

read request from connectionSocket

write reply to connectionSocket

close

connectionSocket

Client

create socket, connect to hostid, port=x clientSocket =

Socket()

send request using clientSocket

read reply from clientSocket

close

clientSocket

Client/server socket interaction: UDP

Serveur

create socket, port=x, for incoming request:

serverSocket =

DatagramSocket()

read request from serverSocket

write reply to

[nom] client

host address, port umber

Client

create socket, clientSocket =

DatagramSocket()

Create, address (hostid, port=x, send datagram request using clientSocket

read reply from clientSocket

close

clientSocket

Exemple : annuaire [nom] surnoms

boolean enregistrer(Personne p, Surnom sn)

ListOfPersonne lister()

boolean oter(Surnom surnom) · listePersonnes

Enregistrer(AnneMarie,AM)

lister()

Serveur

Client

Exemple : annuaire [nom] surnoms

interface : partie visible de l’objet (enregistrer, oter, lister, …) = méthodes publiques Java implémentation : partie privée inaccessible depuis d’autres objets (listePersonnes : un vecteur de Personne ou un tableau ou ….)

Interface distante = contrat entre l’objet et le monde extérieur (save impossible par exemple)

Circulation de messages et machines hétérogènes

Infrastructure informatique de distribution

Couche de services

Objets de l’application qui résultent de la conception du modèle

Couche de transport

Responsable de l’administration [nom]

objets et de l’acheminement [nom]

messages

Infrastructure ?

CLIENT · SERVEUR

transaction sécurité nommage

Service (marshalling..)

Transport TCP IP...

Objets distribués

Un programme (objet) peut être à la fois client de certains serveurs et serveur d’autres clients

Il peut y avoir reconfiguration dynamique [nom] rôles

Client Serveur

Infrastructure Objets Distribués

Objet2 · Objet3

Objet1

Client · Client Serveur · Serveur

Spécifications

Générateurs

[nom] données Protocole d’application

Générateurs

Fichiers

générés

IDL · Int. Java

RMIC / Orbix...

Stubs Skeletons Proxy

(sérialisation et désérialisation…)

[nom]

public interface Surnoms extends java.[nom].Remote

{

public Boolean enregistrer(String nom, String surnom) throws java.[nom].RemoteException, ServeurSurnoms.surnoms.ExisteDeja ;

….

}

[nom]

Classes et Interfaces

Machine locale

InterfaceDistante

Souche

Appel méthode m()

ClasseLocale

Remote

Machine distante

InterfaceDistante

Squelette

Appel méthode m()

ClasseDistante

Comment activer [nom] objets distribués ?

Messages échangés entre objets =

Requêtes ou Résultats

Certains envois de messages n’attendent pas de résultats

Requête = Destinataire + nom de méthode +

Paramètres

Résultat = Donnée ou indication d’une erreur ou d’une défaillance

Comment activer [nom] objets distribués ?

Mécanisme d’exécution ou de transport définit comment les messages sont véhiculés de l’objet client vers l’objet serveur (destinataire) retrouver et activer les objets adéquats

Un objet client a deux manières d’envoyer [nom]

messages

invocation statique

invocation dynamique

Invocation statique

Le nom de l’objet destinataire et le message sont connus au moment du développement

Ne permet ni l’ajout ni le retrait d’objets dans les serveurs

Invocation dynamique

Permet au programme client de découvrir les objets à l’exécution et les interfaces proposés par ces objets construire dynamiquement messages et requêtes envoyer et recevoir le résultat de telles requêtes

Rend les systèmes réactifs et faciles à modifier

Invocation dynamique

+ surcharge

flexibilité du code

briques logicielles avec les mêmes messages pour [nom]

objets de différentes natures définir de nouveaux objets sans modifier l’interface changements qui n’affectent pas les clients

Rôle du client

Invoquer les services dont il a besoin par envoi de requêtes

ID

Accès à l’objet destinataire par une référence à son implémentation par l ’interface

Unités autonomes - solidité - robustesse - adaptation

Rôle de l’infrastructure

administre les implémentations, la création et la destruction d’objets réceptionne les requêtes, localise le serveur, vérifie son état et celui du destinataire active au besoin le serveur, lui envoie les données de la requête ramène les résultats au client doit être informée de l’arrêt d’un serveur doit gérer la persistance

Rôle du serveur

Administrer un flot de requêtes pour un ou plusieurs objets dont il a la responsabilité

Ordonnancer la séquence [nom] opérations de réponses à une requête

Rôle du serveur d’objets

active si besoin l’objet destinataire recherche et exécute la méthode passe le résultat à l’infrastructure plusieurs requêtes peuvent arriver simultanément arrêt du serveur : désactiver tous les objets et enregistrer leur état

Enregistrer un objet

  • Opération pour publier un Objet
  • en général, opération réalisée par le serveur
  • Scénario Type
  • Créer un objet
  • Construire un chemin d ’accès (Name)
  • Appeler l ’opération « bind » ou « rebind » avec le chemin et la référence de l ’objet void bind (in Name n, in Object obj) raises (NotFound, CannotProceed, InvalidName, AlreadyBound);

Retrouver un objet

Opération réalisée par un client ou un serveur

Scénario type :

construire un chemin d ’accès (Name) appeler l ’opération « resolve » avec le chemin convertir la référence obtenue dans le bon type

Object resolve (in Name n) raises (NotFound, CannotProceed, InvalidName)

Invocation de Méthode à distance

Exemple : Java

Remote Method Invocation

À travailler seuls · DÉPARTEMENT SI

AM DERY

Concepts généraux

Mise en œuvre Java

Merci à Rémi Vankeisbelck, Michel Riveill etc

Client Serveur

38

Objets distribués

39

Comment trouver une solution ?

Programmation OO = envoi de requêtes entre plusieurs objets

Ne peut-on pas placer [nom] objets sur différents ordinateurs de sorte qu’ils puissent s ’envoyer directement [nom] messages ?

Objets distribués

40

Un programme (objet) peut être à la fois client de certains serveurs et serveur d’autres clients

Il peut y avoir reconfiguration dynamique [nom] rôles

Client Serveur

Invocation de méthodes distantes

41

Mécanisme qui permet à [nom] objets localisés sur [nom]

machines distantes de s’échanger [nom] messages

(invoquer [nom] méthodes)

Invocation de méthodes distantes

42

Semble simple en théorie...

... un peu plus complexe en réalité !!!

[nom]

43

Heureusement, on utilise Java ;-)

Java Remote Method Invocation est la solution à notre problème

[nom] permet à [nom] objets Java d ’invoquer [nom] méthodes sur

[nom] objets localisés dans [nom] JVM différentes, et même distantes sur le réseau, et ceci de façon quasi transparente !!!

[nom]

44

Core API (intégré au JDK 1.1)

Gratuit

100 % Java

Développé par JavaSoft

Réservé aux objets Java

Utilise les [nom] et le protocole JRMP

Invocation de méthodes distantes

45

Stubs et encodage [nom] paramètres

46

le code d’un objet client invoque une méthode sur un objet distant

Utilisation d’un objet substitut dans la JVM du client : le stub

(souche) de l ’objet serveur

Stubs et encodage [nom] paramètres

47

Du côté du client

48

Appel d’une méthode du stub (de façon entièrement transparente)

le stub construit un bloc de données avec identificateur de l’objet distant à utiliser description de la méthode à appeler paramètres encodés qui doivent être passés

puis il envoie ce bloc de données au serveur...

Du côté du serveur

49

un objet de réception (Squeleton) effectue les actions suivantes :

décode les paramètres encodés situe l ’objet à appeler invoque la méthode spécifiée capture et encode la valeur de retour ou l ’exception renvoyée par l ’appel

Encodage [nom] paramètres

50

Encodage dans un bloc d ’octets afin d ’avoir une représentation indépendante de la machine

Types primitifs et «basiques» (int/Integer...)

Encodés en respectant [nom] règles établies

Big Endian pour les entiers...

Objets ...

Générateur de stubs

51

Les stubs gèrent la communication ainsi que l'encodage [nom] paramètres

Processus évidemment complexe...

Entièrement automatique

Un outil permet de générer les stubs pour les OD

Stubs et rmic

52

La commande rmic du jdk rend transparent la gestion du réseau pour le programmeur une référence sur un ODréférence son stub local

syntaxe = un appel local objetDistant.methode()

Un exemple : le sempiternel « Hello World » !!!

53

Interfaces et classes prédéfinies

54

Interface = protocole d ’application

55

L ’interface HelloWorld import java.[nom].*;

interface HelloWorld extends Remote { public String sayHello() throws RemoteException;

}

Rôle de l ’interface

56

HelloWorld · HelloWorld

Les exceptions

57

L ’exception RemoteException doit être déclarée par toutes les méthodes distantes

Appels de méthodes distants moins fiables que les appels locaux

Serveur ou connexion peut être indisponible

Panne de réseau

...

Du côté client

58

HelloWorld hello = ...;

// Nous verrons par la suite comment obtenir

// une première référence sur un stub

String result = hello.sayHello();

System.out.println(result);

Du côté Serveur

59

Implémentation de la classe qui gère les méthodes de l ’interface HelloWorld

// Classe d'implémentation du Serveur public class HelloWorldImpl extends UnicastRemoteObject implements HelloWorld {

public String sayHello() throws RemoteException {

String result = « hello world !!! »;

System.out.println(« Méthode sayHello invoquée... » + result);

return result;

}

}

Classe d ’implémentation

60

doit implanter l ’interface HelloWorld doit étendre la classe RemoteServer du paquetage java.[nom]

RemoteServer est une classe abstraite

UnicastRemoteObject est une classe concrète qui gére la communication et les stubs

Classe d ’implémentation

61

HelloWorld · HelloWorld

HelloWorldImpl

L ’outil RMIC

62

outil livré avec le JDK permet de générer les stubs

> rmic -v1.2 HelloWorldImpl génère un fichier HelloWorldImpl_stub.class

rmic doit être passé pour toutes les classes d'implémentation [nom] OD afin d'en générer les stubs

Référence sur un objet

63

On sait implanter un serveur d ’un côté, et appeler ses méthodes de l ’autre

MAIS

Comment obtient-on une référence vers un stub de notre objet serveur ???

Localisation [nom] objets de serveur

64

On pourrait appeler une méthode sur un autre objet serveur qui renvoie une référence sur le stub...

Mais quoi qu ’il en soit, le premier objet doit lui aussi être localisé (La poule et l ’œuf) !!!

On a alors recours a un Service de Nommage

Les Services de Nommage

65

Obtention d'une première référence sur un objet distant : « bootstrap » à l’aide d’un Service de Nommage ou Annuaire

Enregistrement [nom] références d'objets dans l'annuaire afin que [nom] programmes distants puissent les récupérer

Exemple : Le RMIRegistry

66

Implémentation d'un service de nommage

Fourni en standard avec [nom]

Permet d'enregistrer [nom] références sur [nom] objets de serveur afin que [nom] clients les récupèrent

On associe la référence de l'objet à une clé unique (chaîne de caractères)

Le client effectue une recherche par la clé, et le service de nommage lui renvoie la référence distante (le stub) de l'objet enregistré pour cette clé

Le RMIRegistry

67

Programme exécutable fourni pour toutes les plates formes

S'exécute sur un port (1099 par défaut) sur la machine serveur

Pour [nom] raisons de sécurité, seuls les objets résidant sur la même machine sont autorisés à lier/délier [nom] références

Un service de nommage est lui-même localisé à l'aide d'une URL

La classe Naming

68

du package java.[nom]

permet de manipuler le RMIRegistry supporte [nom] méthodes statiques permettant de Lier [nom] références d'objets serveur

Naming.bind(...) et Naming.rebind(...)

Délier [nom] références d'objets serveur

Naming.unbind(...)

Lister le contenu du Naming

Naming.list(...)

Obtenir une référence vers un objet distant

Naming.lookup(...)

Enregistrement d ’une référence

69

L ’objet serveur HelloWorld (coté serveur bien entendu…)

On a créé l'objet serveur et on a une variable qui le

référence

HelloWorld hello = new HelloWorldImpl();

On va enregistrer l'objet dans le RMIRegistry

Naming.rebind("HelloWorld",hello);

L'objet est désormais accessible par les clients

Obtention d'une référence coté client

70

sur l'objet serveur HelloWorld

On déclare une variable de type HelloWorld et on effectue une recherche dans l'annuaire

HelloWorld hello =

(HelloWorld)Naming.lookup("[nom]://[lien]

.com/HelloWorld");

On indique quelle est l'adresse de la machine sur laquelle s'exécute le RMIRegistry ainsi que la clé

La valeur retournée doit être transtypée (castée) vers son type réel

Remarque

71

Le Service de Nommage n'a pas pour fonction le référencement de tous les objets de serveur

Il devient vite complexe de gérer l'unicité [nom] clés

La règle de bonne utilisation du Naming est de lier [nom]

objets qui font office de point d'entrée, et qui permettent de manipuler les autres objets serveurs

Conception, implémentation et exécution de l'exemple

72

Rappel

On veut invoquer la méthode sayHello() d'un objet de serveur distant de type HelloWorld depuis un programme Java client

Nous allons devoir coder

L'objet distant

Le serveur

Le client

Et définir les permissions de sécurité et autres emplacements de classes...

Processus de développement

73

  • définir une interface Java pour un OD
  • créer et compiler une classe implémentant cette interface
  • créer et compiler une application serveur [nom]
  • créer les classes Stub (rmic)
  • démarrer rmiregistry et lancer l’application serveur [nom]
  • créer, compiler et lancer un programme client accédant à [nom] OD du serveur

Hello World : L'objet distant

74

Une interface et une classe d'implémentation stubs générés automatiquement par rmic toutes les classes nécessaires à l ’ objet de client doivent être déployées sur la machine cliente et accessibles au chargeur de classes (dans le CLASSPATH)

L'interface HelloWorld (HelloWorld.class)

Le stub HelloWorldImpl_stub généré par rmic pour cet objet

Hello World : Le serveur

75

instancie un objet de type HelloWorld et attache au service de nommage puis objet mis en attente [nom] invocations jusqu'à ce que le serveur soit arrêté

import java.[nom].*;

import java.[nom].server.*;

public class HelloWorldServer {

public static void main(String[] args) { try {

System.out.println("Création de l'objet serveur...");

HelloWorld hello = new HelloWorldImpl();

System.out.println("Référencement dans le RMIRegistry...");

Naming.rebind("HelloWorld",hello);

System.out.println("Attente d'invocations - CTRL-C pour stopper");

} catch(Exception e) { e.printStackTrace();

}

}

}

Serveur (suite)

76

Apres avoir compilé le tout...

Pour démarrer le serveur, il faut tout d'abord lancer le RMIRegistry

Attention : La base de registres [nom] doit connaître les interfaces et les stubs [nom] objets qu'elle enregistre (CLASSPATH) !!!

> rmiregistry & et ensuite on lance le serveur

> java HelloWorldServer

Création de l'objet serveur...

Référencement dans le RMIRegistry...

Attente d'invocations - CTRL-C pour stopper

Hello World : client

77

obtenir une référence sur l'objet de serveur HelloWorld, invoquer la méthode sayHello(), puis afficher le résultat de l'invocation sur la sortie standard

import java.[nom].*;

public class HelloWorldClient {

public static void main(String[] args) { try {

System.out.println("Recherche de l'objet serveur...");

HelloWorld hello =

(HelloWorld)Naming.lookup("[nom]://server/HelloWorld");

System.out.println("Invocation de la méthode sayHello...");

String result = hello.sayHello();

System.out.println("Affichage du résultat :");

System.out.println(result);

System.exit(0);

} catch(Exception e) { e.printStackTrace();

}

}

}

Le client (suite)

78

Il suffit ensuite de lancer le programme

> java HelloWorldClient

Recherche de l'objet serveur...

Invocation de la méthode sayHello...

Affichage du résultat :

hello world !!!

Au niveau du serveur, le message...

Méthode sayHello invoquée... hello world !!!

...s'affichera dans la console

Que doit connaître le client ?

79

Lorsqu ’un objet serveur est passé à un programme, soit comme paramètre soit comme valeur de retour, ce programme doit être capable de travailler avec le stub associé

Le programme client doit connaître la classe du stub

Que doit connaître le client ?

80

les classes [nom] paramètres, [nom] valeurs de retour et

[nom] exceptions doivent aussi être connues...

Une méthode distante est déclarée avec un type de valeur de retour...

...mais il se peut que l ’objet réellement renvoyé soit une sous-classe du type déclaré

Que doit connaître le client ?

81

Le client doit disposer [nom] classes de stub, classes

[nom] objets retournés…

copier les classes sur le système de fichiers local du client

(CLASSPATH)...

...cependant, si le serveur est mis à jour et que de nouvelles classes apparaissent, il devient vite pénible de mettre à jour le client

C ’est pourquoi les clients [nom] peuvent charger automatiquement [nom] classes de stub depuis un autre emplacement

Il s ’agit du même type de mécanisme pour les applets qui fonctionnent dans un navigateur

Chargement dynamique [nom] classes

82

Problème de sécurité

Le programme client télécharge du code sur le réseau

Ce code pourrait contenir [nom] virus ou effectuer [nom] opérations non attendues !!!

Utilisation d ’un gestionnaire de sécurité pour les applications de clients [nom]

Possibilité de créer [nom] gestionnaires de sécurité personnalisés pour [nom] applications spécifiques

[nom] fournit [nom] gestionnaires de sécurité suffisants pour un usage classique

Chargement dynamique

83

Pour ne plus déployer les classes du serveur chez le client

Utilisation [nom] chargeurs de classes qui téléchargent [nom] classes depuis une URL

Utilisation d ’un serveur Web qui fournit les classes

Ce que ça change

Bien entendu, les classes et interfaces de l ’ objet distant ne changent pas

Le code du serveur ne change pas

le client et la façon de le démarrer sont modifiés

Et lancer un serveur Web pour nos classes

Hello World : chargement dynamique

84

Séparation [nom] classes

Serveur (fichiers nécessaires a l'exécution du serveur)

HelloWorldServer.class

HelloWorldImpl.class

HelloWorld.class

HelloWorldImpl_Stub.class

Download (fichiers de classes à charger dans le programme client)

HelloWorldImpl_Stub.class

Client (fichiers nécessaires au démarrage du client)

HelloWorld.class

HelloWorldClient.class

Hello World : Démarrage du serveur Web

85

Mettre les classes Download dans le répertoire [nom]

documents Web du serveur Web, accessibles via une URL

le chargeur de classes ira chercher les classes à un emplacement de type [lien]

};

Hello World : Politiques de sécurité

86

Le programme Java client doit pouvoir se connecter aux ports de la base de registres [nom] et [nom] implémentations [nom] objets de serveur, ainsi qu'au port du serveur Web

Fichier client.policy

grant {

permission [lien].SocketPermission

"*:[téléphone]", "connect,resolve";

permission [lien].SocketPermission

"*:80", "connect";

};

Hello World : gestionnaire de sécurité [nom]

87

Le client intègre un gestionnaire de sécurité [nom] pour les stubs téléchargés dynamiquement

import java.[nom].*;

import java.[nom].server.*;

public class HelloWorldClient {

public static void main(String[] args) { try {

// Installe un gestionnaire de sécurité [nom]

System.setSecurityManager(new RMISecurityManager());

System.out.println("Recherche de l'objet serveur...");

HelloWorld hello =

(HelloWorld)Naming.lookup("[nom]://server/HelloWorld");

System.out.println("Invocation de la méthode sayHello...");

String result = hello.sayHello();

System.out.println("Affichage du résultat :");

System.out.println(result);

} catch(Exception e) { e.printStackTrace();

}

}

}

Hello World : Démarrage coté serveur

88

  • Lancer la base de registres [nom] (elle doit pouvoir accéder aux classes Download - CLASSPATH) > rmiregistry
  • Lancer le serveur Web servant les fichiers de classes Download
  • Lancer le serveur (les classes Server doivent être accessibles) > java HelloWorldServer Création de l'objet serveur...

Référencement dans le RMIRegistry...

Attente d'invocations - CTRL-C pour stopper

Hello World : Démarrage coté client

89

Le client doit pouvoir se connecter à [nom] machines distantes pour la base de registres [nom], les objets de serveur ainsi que le serveur

Web

On doit lui fournir un fichier client.policy

Le client doit bien connaître l'emplacement [nom] classes afin de pouvoir les télécharger

On va le lui préciser lors du lancement

> java -Djava.security.policy=client.policy

-Djava.[nom].server.codebase=[lien]

HelloWorldClient

Passage de paramètres

90

On sera souvent amenés a passer [nom] paramètres aux méthodes distantes...

Les méthodes distantes peuvent retourner une valeur ou lever une exception...

On a deux types de paramètres

Les objets locaux

Les objets distants

Passage de paramètres: ATTENTION

91

Certains objets sont copiés (les objets locaux), d'autres non (les objets distants)

Les objets distants, non copiés, résident sur le serveur

Les objets locaux passés en paramètre doivent être sérialisables afin d'être copiés, et ils doivent être indépendants de la plate-forme

Les objets qui ne sont pas sérialisables lèveront [nom] exceptions

Attention aux objets sérialisables qui utilisent [nom] ressources locales

!!!

Conclusion

92

On a vu ce qu'est une invocation de méthode distante

On a vu le mécanisme [nom] stubs, ainsi que l'encodage [nom] paramètres

On a vu le déploiement avec téléchargement [nom]

classes dynamiquement

Nous avons même appliqué ces concepts au travers de l'exemple "HelloWorld » en [nom]

Erreurs classiques

Stub inaccessible au rmiregistry

  • java.[nom].ServerException: RemoteException occurred in server ... java.[nom].UnmarshalException: error unmarshalling ... java.lang.ClassNotFoundException:

Le stub est accessible au serveur MAIS PAS AU rmiregistry

Attention à l’ordre d’appel : génération [nom] stubs et appel du rmiregistry rmiregistry pas lancé

  • [lien].ConnectException

Oubli du constructeur pour le RemoteObject unreported exception java.[nom].RemoteException in default constructorpublic class HelloImpl extends

UnicastRemoteObject implements Hello { · ^

rmiregistry déjà lancé java.[nom].server.ExportException: Port already in use: 1099On peut lancer un autre registry mais sur un autre port .

Erreurs classiques

La classe d’implémentation n'hérite pas de UnicastRemoteObject

S'il n'hérite pas de UnicastRemoteObject, il n'est pas Remote donc on ludemande d'être Serializable ...

Trouble: java.[nom].MarshalException: error marshalling arguments; nested exception

is: · [lien].NotSerializableException: CalculatorImpl

ATTENTION aux CLASSPATH et package Java

Une autre utilisation du rmiRegistry

95

import java.[nom].registry.LocateRegistry;

import java.[nom].registry.Registry;

Client

Registry registry;

registry = LocateRegistry.getRegistry();

Hello hello = (Hello) registry.lookup("coucou");

Serveur

LocateRegistry.createRegistry(port); // port=1099

Hello stub = (Hello) UnicastRemoteObject.exportObject(unHello, 0);

Naming.rebind("[nom]://"+"localhost"+":"+ port +"/coucou", stub);

سيرة ذاتية مجهولة الهوية تقدمها NextData · سري · contact@nextdata.ma ND-CV-608EA905

للتواصل مع صاحب هذا الملف، اذكر المرجع ND-CV-608EA905: contact@nextdata.ma

الإضافة إلى نظام الوثائق

يجب أن تكون مشتركاً لفتح هذه السيرة الذاتية. للاشتراك، تواصلوا معنا: contact@nextdata.ma · مشترك بالفعل؟ تسجيل الدخول