Objets distants - RMI - EJB
Objectifs
-
Introduire la notion d’objet distant.
-
Créer et utiliser des objets distants en Java (RMI).
-
Présenter les objets distants en JEE : les EJB.
Principe des objets distants
Un objet distant est instancié dans une application et utilisé dans une autre.
L’application qui instancie l’objet est dite serveur d’objets distants.
L’application qui utilise l’objet est une application cliente. Les deux applications peuvent s’exécuter sur deux machines différentes.
1. Schéma
Le schéma suivant montre le principe de communication entre le client et le serveur. Les classes Stub et Skeleton permettent la communication entre le client et le serveur.�
2. Fonctionnement général
a. Stub
Lorsque le code d’un client veut invoquer une méthode distante, il appelle une méthode ordinaire encapsulée dans un objet de substitut appelé Stub. Le Stub est une représentation locale de l’objet distant.
Le Stub est sur la machine client.
-
La méthode du Stub sur le client construit un bloc de données composé de :
-
Un identificateur de l’objet distant à utiliser.
-
Une description de la méthode à appeler.
-
Les paramètres encodés.
-
Le Stub envoie ces informations au serveur.
Du côté du serveur, un objet de réception (Skeleton) effectue les actions suivantes pour chaque appel de méthode distante :
-
Il décode les paramètres encodés.
-
Il situe l’objet à appeler.
-
Il appelle la méthode...
Création et utilisation d’objets distants en Java (RMI)
1. RMI
RMI (Remote Method Invocation) est une interface de programmation (API) de Java qui permet d’appeler des méthodes d’objets distants.
RMI s’utilise dans une architecture Client/Serveur. Son utilisation nécessite la réalisation des tâches suivantes :
Côté serveur
-
Écrire un programme serveur qui :
-
Instancie l’objet distant.
-
L’inscrit sur le serveur d’adressage.
-
Attend les requêtes des clients.
-
Définir une interface qui contient les méthodes de l’objet distant.
-
Cette interface porte à la connaissance des clients la liste des méthodes utilisables. On dit que l’interface expose les méthodes de l’objet distant.
-
Écrire la classe de l’objet distant, qui implémente l’interface précédente.
Dans les dernières versions du JDK, il n’est plus nécessaire de générer explicitement la classe Stub et la classe Skeleton. Cela se faisait auparavant avec l’utilitaire rmic du JDK.
Côté client
-
Obtention d’une référence sur l’objet distant à partir de son nom, grâce au serveur d’adressage.
-
Appel de la méthode à partir de cette référence.
2. Exemple : un objet distant de tri
L’objet distant développé dans l’exemple sert à trier un tableau d’objets qui implémentent l’interface Comparable. Son interface, nommée Trieur, expose la méthode trier(). La classe TrieurImpl implémente l’interface Trieur.
a. Programmation du serveur
Créer l’Interface Trieur.java : méthodes exposées par l’objet distant
L’interface d’un objet distant RMI doit hériter de l’interface Remote.
Les méthodes doivent lancer une RemoteException.
package objetDistant;
import java.rmi.*;
public interface Trieur extends Remote
{
public Comparable[] trier(Comparable tableau[]) throws RemoteException;
}
Créer la classe...
Objets distants et JEE : Enterprise Java Beans (EJB 3)
Les EJB présentés dans l’ouvrage correspondent aux EJB 3 (Version 3).
Un serveur JEE contient un Conteneur d’EJB :
Ce conteneur est un serveur d’objets distants.
Les objets distants sont désignés sous le nom d’EJB Session.
Pour les créer et les utiliser, il faut suivre les mêmes étapes que pour les objets RMI, à l’exception de l’écriture du programme serveur, puisqu’il s’agit du conteneur d’EJB du serveur JEE.
Qu’est-ce qu’un EJB ?
Un EJB est un objet qui s’exécute dans le conteneur d’EJB d’un serveur JEE. Il en existe différents types.
1. Les différents types d’EJB
-
Les EJB Session avec ou sans état (Stateless ou Stateful) : ce sont des objets distants.
-
Les EJB Entity réalisent le mapping Objet/Relationnel.
-
Les EJB Message permettent des traitements asynchrones.
Les EJB Session sont les objets distants. Ce sont les seuls qui sont accessibles à un client.
Pour utiliser les EJB Entity et les EJB Message, le client doit s’adresser à un EJB Session.
2. L’annuaire pour les EJB Session
Dans le cas des EJB Session, l’annuaire (serveur d’adressage) est connu sous le nom de serveur JNDI (Java Naming and Directory Interface). Lors de la création de l’EJB Session, il faut lui attribuer un nom (JNDI name) et l’inscrire sur l’annuaire. C’est ce nom que le client utilise pour accéder à l’EJB session.
3. Conteneur EJB - conteneur web
Il y a des analogies entre le fonctionnement du conteneur d’EJB et celui du conteneur web. Ainsi, c’est le conteneur d’EJB qui se charge de l’instanciation et de la destruction des EJB, comme le conteneur web se charge de l’instanciation et de la destruction des Servlets.
4. Différence JavaBeans/EJB
Un JavaBean est une classe Serializable, qui possède un constructeur...