java.rmi.server.UniCastRemoteObject
.
rmi
fournit des implantations de
nombreuses méthodes de java.lang.Object adaptés aux objets distants.
Par ailleurs, elle définit différents constructeurs et méthodes
statiques qui réalisent l'export des objets distants.
Les objets d'une classe ainsi définie seront par construction
automatiquement exportés et les sockets standard seront utilisées
(de manière transparente pour les utilisateurs) pour la communication.
exportObject
de la classe java.rmi.server.UnicastRemoteObject.
La manière la plus simple de définir une classe implantant une interface pour un objet distant est la suivante:
import java.rmi.*;
public class MonObjetDistant extends java.rmi.server.UnicastRemoteObject
implements MonInterface {
/* définition de la classe (objet, méthodes) */
}
CompteurImpl
définie ci-après implante l'interface
Compteur.
On y note:
CompteurImpl
d'une part implante Compteur
et d'autre part étend
UnicastRemoteObject;
CompteurImpl
qui est indispensable car spécifiant l'occurrence possible
d'une RemoteException. Ce constructeur ne sera utilisable que par
un serveur;
incr,
getValue et
getAccess
qui modifient des variables sont spécifiées
synchronized
afin d'assurer leur atomicité.
|
La version alternative
CompteurImpl.java suivante de l'implantation de
l'interface
Compteur n'est pas définie comme
extension de la
classe UnicastRemoteObject:
|
BufferInterfaceImpl implantant l'interface
BufferInterface, différents objets
privés sont utilisés:
buffer, dont la
taille est fournie
lors de l'instanciation de la classe, qui correspond au buffer;
taille,
ecrire,
lire, et nombre qui
donnent respectivement la taille du buffer, l'emplacement à
utiliser lors du prochain dépôt, l'emplacement à utiliser lors
de la prochaine extraction et le nombre d'éléments actuellement
dans le buffer (éléments déposés et non encore lus);
put et
get
sous forme synchronisées
(synchronized) afin de permettre
l'accès au buffer en exclusion mutuelle.