- 5 -
Dans le cas d’une plate-forme RMI/JRMP, l’API de développement côté serveur comprend
notamment la classe java.rmi.server.UnicastRemoteObject. Les interactions avec le système de
transport sous-jacent sont implicites et cachées du développeur d’applications derrière les
méthodes de cette classe.
Dans le cas d’une plate-forme CORBA, l’API de développement côté serveur offre deux styles
de programmation : par héritage d’une classe racine d’implémentation ou par délégation à une
classe de tie. Les opérations de connexion et déconnexion à l’ORB sont explicites côtés serveur
et client et codées par le développeur d’applications.
Dans le cas d’une plate-forme RMI/IIOP, l’API de développement repose sur la classe
javax.rmi.PortableRemoteObject. En effet, cette classe cache une API CORBA derrière des
méthodes similaires à java.rmi.server.UnicastRemoteObject. Ainsi, le développeur fera du
CORBA mais implicitement, masqué par un style de programmation plus léger à la
RMI/JRMP.
Côté client, une différence est à noter entre les API de RMI/JRMP et de RMI/IIOP. Pour le
premier, il suffit de caster le type en Java pour transformer une référence RMI/JRMP en un
objet typé. Pour RMI/IIOP, la méthode statique javax.rmi.PortableremoteObject.narrow doit
être utilisée pour transformer une référence RMI/IIOP en un objet typé.
En ce qui concerne l’implantation de javax.rmi.PortableRemoteObject, Sun inclut une
implantation par défaut dans le JDK à partir de la version 1.3. Toutefois, une implantation
alternative (le cas pour Jonathan) est possible via une interface déléguée
(javax.rmi.PortableRemoteObjectDelegate).
1.2.6 Téléchargement et localisation de code
Le téléchargement de code à partir d’une URL est l'une des principales caractéristiques d’une
plate-forme RMI/JRMP. Cette fonctionnalité doit exister aussi pour une plate-forme RMI/IIOP.
Ainsi, les classes des stubs et des valeurs (classes sérialisables et externalisables) doivent
pouvoir être chargés à distance à partir d’une URL. La valeur du codebase (une chaîne
contenant une suite d’URL séparée par des blancs) est transmise dans les messages GIOP.
A noter que cette notion de téléchargement de code à partir d’une URL n’est pas supportée par
une plate-forme CORBA. En revanche, la localisation de code est supportée par le biais d’une
interface repository ; quand une IOR (référence d’objet CORBA) est transmise, elle est
toujours accompagnée d’un repository ID qui pourrait être utilisé comme clé pour rechercher
dans l’interface repository un type pour gérer la référence (ex : pour typer la référence). Ainsi,
au lieu de localiser des classes dans des URL, elles sont localisées dans l’interface repository.
Avec Objects by Value, cette idée est étendue aux valeurs qui sont aussi transmises avec un
repository ID indiquant un type à utiliser pour instancier la valeur côté récepteur. Le concept
d’usine à valeurs (value factory) est aussi introduit dans CORBA 2.3 pour correspondre à cette
notion d’instantiation ; dans le binding IDL 2.3 to Java, une usine à valeurs est simplement une
classe (instance de java.lang.Class).
1.2.7 Services de nommage
Les deux normes, Java to IDL et Objects by Value, ne parlent pas de services de nommage.
Toutefois, il est clair que le service de nommage CORBA (CosNaming) est utilisé pour stocker
des références à des objets RMI/IIOP tandis que le registry RMI/JRMP est utilisé pour stocker