 |
 |
15) Informatique distribuée |
|
 |
|
Texte original |
 |
Traducteur :
Jean-Pierre Vidal, Alban Peignier |
|
 |
|
 |
 |
 |
 |
 |
 |
|
 |
|
 |
 |
 |
|
 |
Gestion de la persistance par le conteneur (CMP - Container Managed
Persistence)
|
 |
 |
 |
Container Managed Persistence
(CMP). A CMP Entity Bean has its persistence implemented on its behalf by
the EJB Container. Through attributes specified in the deployment descriptor,
the EJB Container will map the Entity Bean’s attributes to some persistent
store (usually—but not always—a database). CMP reduces the
development time for the EJB, as well as dramatically reducing the amount of
code required.
|
 |
Un CMP Entity Bean a sa persistence assurée par le conteneur d'EJBs. A
travers les attributs spécifiés dans le descripteur de déploiement, le conteneur d'EJBs fera
correspondre les attributs de l'Entity Bean avec un stockage persistant (habituellement, mais pas
toujours, une base de données). La gestion de la persistence par le conteneur réduit le temps de
développement et réduit considérablement le code nécessaire pour l'EJB.
|
 |
 |
 |
|
 |
Gestion de la persistence par le Bean (BMP - Bean Managed
Persistence)
|
 |
 |
 |
Bean Managed Persistence (BMP). A
BMP Entity Bean has its persistence implemented by the Enterprise Bean Provider.
The Enterprise Bean Provider is responsible for implementing the logic required
to create a new EJB, update some attributes of the EJBS, delete an EJB and find
an EJB from persistent store. This usually involves writing JDBC code to
interact with a database or other persistent store. With BMP, the developer is
in full control of how the Entity Bean persistence is managed.
|
 |
Un BMP Entity Bean a sa persistence implémentée par le fournisseur de
l'Entreprise Bean. Le fournisseur d'Entity Bean a en charge d'implémenter la logique nécessaire
pour créer un nouvel EJB, mettre à jour certains attributs des EJBs, supprimer un EJB et trouver un
EJB dans le stockage persistence. Cela nécessite habituellement d'écrire du code JDBC pour
interagir avec une base de données ou un autre stockage persistant. Avec la gestion de persistence
par le Bean (BMP), le développeur a le contrôle total de la manière dont la persistence de l'Entity
Bean est réalisée.
|
 |
 |
 |
BMP also gives flexibility where a CMP
implementation may not be available. For example, if you wanted to create an EJB
that wrapped some code on an existing mainframe system, you could write your
persistence using
CORBA.
|
 |
Le principe de BMP apporte aussi de la flexibilité là où l'implémentation
en CMP n'est pas possible, par exemple si vous souhaitez créer un EJB qui encapsule du code d'un
système mainframe existant, vous pouvez écrire votre persistence en utilisant CORBA.
|
 |
 |
 |
Developing an EJB
|
 |
Développer un Enterprise Java Bean
|
 |
 |
 |
As an example, the “Perfect
Time” example from the previous RMI section will be implemented as an EJB
component. The example will be a simple Stateless Session Bean.
|
 |
Nous allons maintenant implémenter l'exemple de Perfect Time de la
précédente section à propos de RMI sous forme d'un composant Entreprise JavaBean. Cet exemple est
un simple Session Bean non-persistant. Les composants Enterprise JavaBean représenteront toujours
au moins à une classe et deux interfaces.
|
 |
 |
 |
As mentioned earlier, EJB components
consist of at least one class (the EJB) and two interfaces: the Remote and Home
interfaces. When you create a Remote interface for an EJB , you must follow
these guidelines:
|
 |
La première interface définie est l'interface Remote de notre composant
Enterprise JavaBean. Lorsque vous créez votre interface Remote de votre EJB, vous devez suivre ces
règles :
|
 |
 |
 |
- The remote interface must
be public.
- The remote
interface must extend the interface javax.ejb.EJBObject.
- Each method in the
remote interface must declare java.rmi.RemoteException in its
throws clause in addition to any application-specific exceptions.
- Any object passed
as an argument or return value (either directly or embedded within a local
object) must be a valid RMI-IIOP data type (this includes other EJB
objects).
|
 |
- L'interface Remote doit être public.
- L'interface Remote doit hériter de l'interface
javax.ejb.EJBObject.
- Chaque méthode de l'interface Remote doit déclarer
java.rmi.RemoteException dans sa section throws en addition des
exceptions spécifiques à l'application.
- Chaque objet passé en argument ou retourné par valeur (soit directement
soit encapsulé dans un objet local) doit être un type de donnée valide pour RMI-IIOP (ce qui inclut
les autres objets EJB).
|
 |
 |
 |
Here is the simple remote interface for the PerfectTime EJB:
|
 |
Voici l'interface Remote plutôt simple de notre EJB PerfectTime
:
|
 |
 |
 |
//: c15:ejb:PerfectTime.java
//# You must install the J2EE Java Enterprise
//# Edition from java.sun.com and add j2ee.jar
//# to your CLASSPATH in order to compile
//# this file. See details at java.sun.com.
// Remote Interface of PerfectTimeBean
import java.rmi.*;
import javax.ejb.*;
public interface PerfectTime extends EJBObject {
public long getPerfectTime()
throws RemoteException;
} ///:~
|
 |
//: c15:ejb:PerfectTime.java //# Vous devez installer le J2EE Java Enterprise //# Edition de java.sun.com et ajouter j2ee.jar //# à votre CLASSPATH pour pouvoir compiler //# ce fichier. Pour plus de détails, //# reportez vous au site java.sun.com. //# Interface Remote de PerfectTimeBean import java.rmi.*; import javax.ejb.*;
public interface PerfectTime extends EJBObject { public long getPerfectTime() throws RemoteException; } ///:~
|
 |
 |
 |
The Home interface is the factory where
the component will be created. It can define create methods, to create
instances of EJBs, or finder methods, which locate existing EJBs and are
used for Entity Beans only. When you create a Home interface for an EJB , you
must follow these guidelines:
|
 |
La seconde interface définie est l'interface Home de notre composant
Enterprise JavaBeans. L'interface Home est la Factory du composant que vous allez créer.
L'interface Home peut définir des méthodes de création ou de recherche. Les méthodes de création
créent les instances des EJBs, les méthodes de recherche localisent les EJBs existants et sont
utilisés pour les Entity Beans seulement. Lorsque vous créez votre interface Home d'un EJB, vous
devez respecter ces quelques règles :
|
 |
 |
 |
- The Home interface must be
public.
- The
Home interface must extend the interface javax.ejb.EJBHome.
- Each create
method in the Home interface must declare java.rmi.RemoteException in its
throws clause as well as a
javax.ejb.CreateException.
- The
return value of a create method must be a Remote
Interface.
- The
return value of a finder method (Entity Beans only) must be a Remote
Interface or java.util.Enumeration or
java.util.Collection.
- Any
object passed as an argument (either directly or embedded within a local object)
must be a valid RMI-IIOP data type (this includes other EJB
objects)
|
 |
- L'interface Home doit être public.
- L'interface Home doit hériter de l'interface
javax.ejb.EJBHome.
- Chaque méthode de l'interface Home doit déclarer
java.rmi.RemoteException dans sa section throws de même que
javax.ejb.CreateException
- La valeur retournée par une méthode de création doit être une interface
Remote.
- La valeur retournée par une méthode de recherche (pour les Entity Beans
uniquement) doit être une interface Remote, java.util.Enumeration ou
java.util.Collection.
- Chaque objet passé en argument ou retourné par valeur (sous directement ou
encapsulé dans un objet local) doit être un type de donnée valide pour RMI-IIOP (ce qui inclut les
autres objets EJB).
|
 |
 |
 |
The standard naming
convention for Home interfaces is to take the Remote interface name and append
“Home” to the end. Here is the Home interface for the PerfectTime
EJB:
|
 |
La convention standard de nommage des interfaces Home consiste à prendre le
nom de l'interface Remote et d'y ajouter à la fin Home. Voici l'interface Home de notre EJB
PerfectTime :
|
 |
 |
 |
//: c15:ejb:PerfectTimeHome.java
// Home Interface of PerfectTimeBean.
import java.rmi.*;
import javax.ejb.*;
public interface PerfectTimeHome extends EJBHome {
public PerfectTime create()
throws CreateException, RemoteException;
} ///:~
|
 |
//: c15:ejb:PerfectTimeHome.java // Interface Home de PerfectTimeBean. import java.rmi.*; import javax.ejb.*;
public interface PerfectTimeHome extends EJBHome { public PerfectTime create() throws CreateException, RemoteException; } ///:~
|
 |
 |
 |
You can now implement the business logic.
When you create your EJB implementation class, you must follow these guidelines,
(note that you should consult the EJB specification for a complete list of
guidelines when developing Enterprise JavaBeans):
|
 |
Maintenant que nous avons défini les interfaces de notre composant, nous
pouvons implémenter la logique métier qu'il y a derrière. Lorsque vous créez la classe
d'implémentation de votre EJB, vous devez suivre ces règles (notez que vous pourrez trouver dans la
spécification des EJBs la liste complète des règles de développement des Entreprise JavaBeans)
:
|
 |
 |
 |
- The class must be
public.
- The
class must implement an EJB interface (either javax.ejb.SessionBean or
javax.ejb.EntityBean).
- The class should
define methods that map directly to the methods in the Remote interface. Note
that the class does not implement the Remote interface; it mirrors the methods
in the Remote interface but does not throw
java.rmi.RemoteException.
- Define
one or more ejbCreate( ) methods to initialize your
EJB.
- The return
value and arguments of all methods must be valid RMI-IIOP data
types.
|
 |
- La classe doit être public.
- La classe doit implémenter une interface (soit
javax.ejb.SessionBean, soit javax.ejb.EntityBean).
- La classe doit définir les méthodes correspondant aux méthodes de
l'interface Remote. Notez que la classe n'implémente pas l'interface Remote, c'est le miroir des
méthodes de l'interface Remote mais elle n'émet pas
java.rmi.RemoteException.
- Définir une ou plusieurs méthodes ejbCreate( ) qui
initialisent votre EJB.
- La valeur retournée et les arguments de toutes les méthodes doivent être
des types de données compatibles avec RMI-IIOP.
|
 |
 |
 |
//: c15:ejb:PerfectTimeBean.java
// Simple Stateless Session Bean
// that returns current system time.
import java.rmi.*;
import javax.ejb.*;
public class PerfectTimeBean
implements SessionBean {
private SessionContext sessionContext;
//return current time
public long getPerfectTime() {
return System.currentTimeMillis();
}
// EJB methods
public void ejbCreate()
throws CreateException {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void
setSessionContext(SessionContext ctx) {
sessionContext = ctx;
}
}///:~
|
 |
//: c15:ejb:PerfectTimeBean.java // Un Session Bean non-persistant // qui retourne l'heure système courante. import java.rmi.*; import javax.ejb.*;
public class PerfectTimeBean implements SessionBean { private SessionContext sessionContext; // retourne l'heure courante public long getPerfectTime() { return System.currentTimeMillis(); } // méthodes EJB public void ejbCreate() throws CreateException {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext ctx) { sessionContext = ctx; } }///:~
|
 |
 |
 |
Because this is a simple example, the EJB
methods (ejbCreate( ), ejbRemove( ),
ejbActivate( ), ejbPassivate( ) ) are all empty. These
methods are invoked by the EJB Container and are used to control the state of
the component. The setSessionContext( ) method passes a
javax.ejb.SessionContext object which contains information about the
component’s context, such as the current transaction and security
information.
|
 |
Notez que les méthodes EJB (ejbCreate( ),
ejbRemove( ), ejbActivate( ),
ejbPassivate( ) ) sont toutes vides. Ces méthodes sont appelées par le
conteneur d'EJBs et sont utilisées pour contrôler l'état de votre composant. Comme c'est un exemple
simple, nous pouvons les laisser vide. La méthode setSessionContext( )
transmet un objet javax.ejb.SessionContext qui contient les informations concernant le contexte
dans lequel se trouve le composant, telles que la transaction courante et des informations de
sécurité.
|
 |
 |
 |
After we have created the Enterprise
JavaBean, we then need to create a deployment descriptor. The deployment
descriptor is an XML file that describes the EJB component. The deployment
descriptor should be stored in a file called
ejb-jar.xml.
|
 |
Après que nous ayons créé notre Enterprise JavaBean, nous avons maintenant
besoin de créer le descripteur de déploiement. Dans les EJBs 1.1, le descripteur de déploiement est
un fichier XML qui décrit le composant EJB. Le descripteur de déploiement doit être stocké dans un
fichier appelé ejb-jar.xml.
|
 |
 |
 |
//:! c15:ejb:ejb-jar.xml
<?xml version="1.0" encoding="Cp1252"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
<ejb-jar>
<description>Example for Chapter 15</description>
<display-name></display-name>
<small-icon></small-icon>
<large-icon></large-icon>
<enterprise-beans>
<session>
<ejb-name>PerfectTime</ejb-name>
<home>PerfectTimeHome</home>
<remote>PerfectTime</remote>
<ejb-class>PerfectTimeBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<ejb-client-jar></ejb-client-jar>
</ejb-jar>
///:~
|
 |
<?xml version="1.0" encoding="Cp1252"?> <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN' 'http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd'>
<ejb-jar> <description>Exemple pour le chapitre 15</description> <display-name></display-name> <small-icon></small-icon> <large-icon></large-icon> <enterprise-beans> <session> <ejb-name>PerfectTime</ejb-name> <home>PerfectTimeHome</home> <remote>PerfectTime</remote> <ejb-class>PerfectTimeBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> <ejb-client-jar></ejb-client-jar> </ejb-jar>
|
 |
 |
 |
You can see the Component, the Remote
interface and the Home interface defined inside the <session> tag
of this deployment descriptor. Deployment descriptors may be automatically
generated using EJB development tools.
|
 |
Dans la balise <session> de votre descripteur de
déploiement, vous pouvez voir que le composant, les interfaces Remote et Home sont définis en
partie. Les descripteurs de déploiement peuvent facilement être générés automatiquement grâce à des
outils tels que JBuilder.
|
 |
 |
 |
Along with the standard ejb-jar.xml
deployment descriptor, the EJB specification states that any vendor specific
tags should be stored in a separate file. This is to achieve high portability
between components and different brands of EJB containers.
|
 |
Par l'intermédiaire de ce descripteur de déploiement standard
ejb-jar.xml, la spécification des EJBs 1.1 institue que toutes balises spécifiques
aux fournisseurs doivent être stockées dans un fichier séparé. Ceci a pour but d'assurer une
compatibilité complète entre les composants et les conteneurs d'EJBs de différents
marques.
|
 |
 |
 |
The files must be archived inside a
standard Java Archive (JAR) file. The deployment descriptors should be placed
inside the /META-INF sub-directory of the Jar file.
|
 |
Maintenant que nous avons créé notre composant et défini sa composition
dans le descripteur de déploiement, nous devons alors archiver les fichiers dans un fichier archive
Java (JAR). Le descripteur de déploiement doit être placé dans le sous répertoire
META-INF du fichier Jar.
|
 |
 |
 |
Once the EJB component is defined in the
deployment descriptor, the deployer should then deploy the EJB component into
the EJB Container. At the time of this writing, the deployment process was quite
“GUI intensive” and specific to each individual EJB Container, so
this overview does not document that process. Every EJB Container, however will
have a documented process for deploying an EJB.
|
 |
Une fois que nous avons défini notre composant EJB dans le descripteur de
déploiement, le déployeur doit maintenant déployer le composant EJB dans le conteneur d'EJB. A ce
moment-là du développement, le processus est plutôt orienté IHM et spécifique à chaque conteneur
d'EJBs. Nous avons donc décidé de ne pas documenter entièrement le processus de déploiement dans
cette présentation. Chaque conteneur d'EJBs propose cependant à un processus détaillé pour déployer
un EJB.
|
 |
 |
 |
Because an EJB component is a distributed
object, the deployment process should also create some client stubs for calling
the EJB component. These classes should be placed on the classpath of the client
application. Because EJB components can be implemented on top of RMI-IIOP
(CORBA) or RMI-JRMP, the stubs generated could vary between EJB Containers;
nevertheless they are generated classes.
|
 |
Puisqu'un composant EJB est un objet distribué, le processus de déploiement
doit créer certains stubs clients pour appeler le composant EJB. Ces classes seront placées dans le
classpath de l'application cliente. Puisque les composants EJB sont implémentés par dessus RMI-IIOP
(CORBA) ou RMI-JRMP, les stubs générés peuvent varier entre les conteneurs d'EJBs, néanmoins ce
sont des classes générées.
|
 |
 |
 |
When a client program wishes to invoke an
EJB, it must look up the EJB component inside JNDI and obtain a reference to the
home interface of the EJB component. The Home interface is used to create an
instance of the EJB.
|
 |
Lorsqu'un programme client désire invoquer un EJB, il doit rechercher le
composant EJB dans JNDI et obtenir une référence vers l'interface Home du composant EJB.
L'interface HOME peut alors être invoquée pour créer une instance de l'EJB, qui peut à son tour
être invoquée.
|
 |
 |
 |
In this example the client program is a
simple Java program, but you should remember that it could just as easily be a
servlet, a JSP or even a CORBA or RMI distributed object.
|
 |
Dans cet exemple le programme client est un simple programme Java, mais
vous devez garder en mémoire qu'il pourrait s'agir aussi bien d'un Servlet, d'un JSP que d'un objet
distribué CORBA ou RMI.
|
 |
 |
 |
|
 |
Le code de PerfectTimeClient code est le suivant.
|
 |
 |
 |
//: c15:ejb:PerfectTimeClient.java
// Client program for PerfectTimeBean
public class PerfectTimeClient {
public static void main(String[] args)
throws Exception {
// Get a JNDI context using
// the JNDI Naming service:
javax.naming.Context context =
new javax.naming.InitialContext();
// Look up the home interface in the
// JNDI Naming service:
Object ref = context.lookup("perfectTime");
// Cast the remote object to the home interface:
PerfectTimeHome home = (PerfectTimeHome)
javax.rmi.PortableRemoteObject.narrow(
ref, PerfectTimeHome.class);
// Create a remote object from the home interface:
PerfectTime pt = home.create();
// Invoke getPerfectTime()
System.out.println(
"Perfect Time EJB invoked, time is: " +
pt.getPerfectTime() );
}
} ///:~
|
 |
//: c15:ejb:PerfectTimeClient.java // Programme Client pour PerfectTimeBean
public class PerfectTimeClient { public static void main(String[ « args) throws Exception { // Obtient un context JNDI utilisant le // service de nommage JNDI : javax.naming.Context context = new javax.naming.InitialContext(); // Recherche l'interface Home dans le // service de nommage JNDI : Object ref = context.lookup("perfectTime"); // Transforme l'objet distant en une interface Home : PerfectTimeHome home = (PerfectTimeHome) javax.rmi.PortableRemoteObject.narrow( ref, PerfectTimeHome.class); // Crée un objet distant depuis l'interface Home : PerfectTime pt = home.create(); // Invoque getPerfectTime() System.out.println( "Perfect Time EJB invoked, time is: " + pt.getPerfectTime() ); } } ///:~
|
 |
 |
 |
The sequence of the example is explained
in the comments. Note the use of the narrow( ) method to perform a
kind of casting of the object before a Java cast is performed. This is very
similar to what happens in CORBA. Also note that the Home object becomes a
factory for PerfectTime
objects.
|
 |
Le déroulement de cet exemple est expliqué dans les commentaires. Notez l'utilisation de la
méthode narrow() pour réaliser une sorte de transtypage de l'objet avant qu'un transtypage Java
soit fait. Ceci est très similaire à ce qui se passe en CORBA. Notez aussi que l'objet Home devient
une Factory pour les objets PerfectTimes.
|
 |
 |
 |
EJB summary
|
 |
En résumé
|
 |
 |
 |
The Enterprise JavaBeans specification is
a dramatic step forward in the standardization and simplification of distributed
object computing. It is a major piece of the Java 2 Enterprise Edition (J2EE)
platform and is receiving much support from the distributed object community.
Many tools are currently available or will be available in the near future to
help accelerate the development of EJB components.
|
 |
La spécification des Enterprise JavaBeans est un pas important vers la
standardisation et la simplification de l'informatique distribuée. C'est une pièce majeure de Java
2, Enterprise Edition Platform et reçoit en plus le concours la communauté travaillant sur les
objets distribués. De nombreux outils sont actuellement disponibles ou le seront dans un futur
proche pour accélérer le développement de composants EJBs.
|
 |
 |
 |
This overview was only a brief tour of
EJBs. For more information about the EJB specification you should see the
official Enterprise JavaBeans home page at java.sun.com/products/ejb/,
where you can download the latest specification and the J2EE reference
implementation. These can be used to develop and deploy your own EJB
components.
|
 |
Cette présentation avait pour but de donner un bref aperçu de ce que sont
les EJBs. Pour plus d'informations à propos de la spécification des Enterprise JavaBeans, vous
pouvez vous reporter à la page officielle des Enterprise JavaBeans à l'adresse
http://java.sun.com/products/ejb/. Vous pourrez y télécharger la dernière spécification
ainsi que Java 2, Enterprise Edition Reference Implementation, qui vous permettra de développer et
de déployer vos propres composants EJBs.
|
 |
 |
 |
Jini: distributed services
|
 |
Jini : services distribués
|
 |
 |
 |
This
section[78] gives
an overview of Sun Microsystems’s Jini technology. It describes some Jini
nuts and bolts and shows how Jini’s architecture helps to raise the level
of abstraction in distributed systems programming, effectively turning network
programming into object-oriented programming.
|
 |
Cette section [71]donne un aperçu de la technologie Jini de Sun Microsystem. Elle décrit quelques
spécificités Jini et montre comment l'architecture Jini aide à augmenter le niveau d'abstraction
dans la programmation de systèmes distribués, transformant réellement la programmation réseau en
programmation orientée-objets.
|
 |
 |
 |
Jini in context
|
 |
Contexte de Jini
|
 |
 |
 |
Traditionally, operating systems have
been designed with the assumption that a computer will have a processor, some
memory, and a disk. When you boot a computer, the first thing it does is look
for a disk. If it doesn’t find a disk, it can’t function as a
computer. Increasingly, however, computers are appearing in a different guise:
as embedded devices that have a processor, some memory, and a network
connection—but no disk. The first thing a cell phone does when you boot it
up, for example, is look for the telephone network. If it doesn’t find the
network, it can’t function as a cell phone. This trend in the hardware
environment, from disk-centric to network-centric, will affect how we organize
the software—and that’s where Jini comes in.
|
 |
Traditionnellement, les systèmes d'exploitation sont conçus dans
l'hypothèse qu'un ordinateur aura un processeur, un peu de mémoire et un disque. Lorsque vous
démarrez votre ordinateur, la première chose qu'il fait est de chercher un disque. S'il ne le
trouve pas, il ne peut assurer sa fonction d'ordinateur. Cependant de plus en plus les ordinateurs
apparaissent sous diverses formes : comme des systèmes embarqués qui possèdent un processeur, un
peu de mémoire et une connexion réseau mais pas de disque. La première chose que fait, par exemple,
un téléphone cellulaire lorsqu'il s'allume est de rechercher le réseau téléphonique. S'il ne le
trouve pas, il ne peut assurer sa fonction de téléphone. Cette nouvelle mode dans l'environnement
matériel, le passage d'un système centré sur un disque à un système centré sur un réseau, va
affecter la manière d'organiser notre logiciel. C'est là qu'intervient Jini.
|
 |
 |
 |
Jini is an attempt to rethink computer
architecture, given the rising importance of the network and the proliferation
of processors in devices that have no disk drive. These devices, which will come
from many different vendors, will need to interact over a network. The network
itself will be very dynamic—devices and services will be added and removed
regularly. Jini provides mechanisms to enable smooth adding, removal, and
finding of devices and services on the network. In addition, Jini provides a
programming model that makes it easier for programmers to get their devices
talking to each other.
|
 |
Jini est une manière de repenser l'architecture de l'ordinateur, étant
donné l'importance croissante des réseaux et la prolifération des processeurs dans des systèmes qui
n'ont pas de disque dur. Ces systèmes, qui proviennent de nombreux fabricants différents, vont
avoir besoin d'interagir à travers le réseau. Le réseau lui-même sera très dynamique : les systèmes
et les services seront ajoutés et retirés régulièrement. Jini apporte les mécanismes permettant
facilement l'ajout, la suppression et la recherche de systèmes et de services sur le réseau. De
plus, Jini propose un modèle de programmation qui rend tout cela plus facile pour les programmeurs
qui souhaitent voir leurs systèmes discuter entre eux.
|
 |
 |
 |
Building on top of Java, object
serialization, and RMI (which together enable objects to move around the network
from virtual machine to virtual machine) Jini attempts to extend the benefits of
object-oriented programming to the network. Instead of requiring device vendors
to agree on the network protocols through which their devices can interact, Jini
enables the devices to talk to each other through interfaces to
objects.
|
 |
S'appuyant sur Java, la sérialisation objet et RMI (qui permet aux objets
de bouger à travers le réseau en passant d'une machine virtuelle à une autre), Jini permet
d'étendre les bénéfices de la programmation orientée-objet au réseau. Au lieu de nécessiter un
accord entre les différents fabricants sur un protocole réseau à travers lequel les systèmes
peuvent interagir, Jini permet à ces systèmes de discuter ensemble par l'intermédiaire d'interfaces
vers des objets.
|
 |
 |
 |
What is Jini?
|
 |
Qu'est-ce que Jini ?
|
 |
 |
 |
Jini is a set of APIs and network
protocols that can help you build and deploy distributed systems that are
organized as federations of services. A service can be anything
that sits on the network and is ready to perform a useful function. Hardware
devices, software, communications channels—even human users
themselves—can be services. A Jini-enabled disk drive, for example, could
offer a “storage” service. A Jini-enabled printer could offer a
“printing” service. A federation of services, then, is a set of
services, currently available on the network, that a client (meaning a program,
service, or user) can bring together to help it accomplish some goal.
|
 |
Jini est un ensemble d'APIs et de protocoles réseaux qui peuvent vous aider
à construire et déployer des systèmes distribués qui sont organisés sous la forme de
fédérations de services . Un service peut être n'importe quoi qui se trouve sur
le réseau et qui est prêt à réaliser une fonction utile. Des composants matériels, logiciels, des
canaux de communications, les utilisateurs eux-mêmes peuvent être des services. Une imprimante
compatible Jini pourra offrir un service d'impression. Une fédération de services est un ensemble
de services, actuellement disponibles sur le réseau, que le client (ce qui signifie programme,
service ou utilisateur) peut combiner pour s'aider à atteindre à son but.
|
 |
 |
 |
To perform a task, a client enlists the
help of services. For example, a client program might upload pictures from the
image storage service in a digital camera, download the pictures to a persistent
storage service offered by a disk drive, and send a page of thumbnail-sized
versions of the images to the printing service of a color printer. In this
example, the client program builds a distributed system consisting of itself,
the image storage service, the persistent storage service, and the
color-printing service. The client and services of this distributed system work
together to perform the task: to offload and store images from a digital camera
and print a page of thumbnails.
|
 |
Pour réaliser une tâche, un client enchaîne les possibilités des services.
Par exemple, un programme client peut charger des photographies d'un système de stockage d'image
d'un appareil numérique, envoyer les photos vers un service de stockage persistant offert par un
disque dur, et transmettre une page contenant les vignettes de chaque image à un service
d'impression d'une imprimante couleur. Dans cet exemple, le programme client construit un système
distribué constitué de lui-même, le service de stockage d'images, le service de stockage persistant
et le service d'impression couleur. Le client et ces services de ce système distribué collaborent
pour réaliser une tâche : décharger et stocker les images d'un appareil numérique et imprimer une
page de vignettes.
|
 |
 |
 |
The idea behind the word federation
is that the Jini view of the network doesn’t involve a central
controlling authority. Because no one service is in charge, the set of all
services available on the network form a federation—a group composed of
equal peers. Instead of a central authority, Jini’s run-time
infrastructure merely provides a way for clients and services to find each other
(via a lookup service, which stores a directory of currently available
services). After services locate each other, they are on their own. The client
and its enlisted services perform their task independently of the Jini run-time
infrastructure. If the Jini lookup service crashes, any distributed systems
brought together via the lookup service before it crashed can continue their
work. Jini even includes a network protocol that clients can use to find
services in the absence of a lookup service.
|
 |
L'idée derrière le mot fédération est que la vision Jini d'un
réseau n'instaure pas d'autorité de contrôle centrale. Puisque aucun service n'est responsable,
l'ensemble de tous les services disponible sur le réseau forme une fédération, un groupe composé de
membres égaux. Au lieu d'une autorité centrale, l'infrastructure d'exécution de Jini propose un
moyen pour les clients et les services de se trouver mutuellement (à travers un service de
recherche, qui stocke la liste des services disponibles à moment donné). Après que les services se
sont trouvés, ils sont indépendants. Le client et ces services mis à contribution réalisent leurs
tâches indépendamment de l'infrastructure d'exécution de Jini. Si le service de recherche Jini
tombe, tous les systèmes distribués mis en place par le service de recherche, avant qu'il ne
plante, peuvent continuer les travaux. Jini incorpore même un protocole réseau qui permet aux
clients de trouver les services en l'absence d'un service de nommage.
|
 |
 |
 |
How Jini works
|
 |
Comment fonctionne Jini
|
 |
 |
 |
Jini defines a run-time infrastructure
that resides on the network and provides mechanisms that enable you to add,
remove, locate, and access services. The run-time infrastructure resides in
three places: in lookup services that sit on the network, in the service
providers (such as Jini-enabled devices), and in clients. Lookup services
are the central organizing mechanism for Jini-based systems. When new
services become available on the network, they register themselves with a lookup
service. When clients wish to locate a service to assist with some task, they
consult a lookup service.
|
 |
Jini définie une infrastructure d'exécution qui réside sur le
réseau et met à disposition des mécanismes qui vous permettent d'ajouter, d'enlever, de localiser
et d'accéder aux services. L'infrastructure d'exécution se situe à trois endroits : dans les
services de recherche qui sont sur le réseau, au niveau des fournisseurs de service (tels que les
systèmes supportant Jini), et dans les clients. Les services de recherche forment le
mécanisme centralisé d'organisation des systèmes basés sur Jini. Lorsque des services deviennent
disponibles sur le réseau, ils s'enregistrent eux-même grâce à un service de recherche. Lorsque des
clients souhaitent localiser un service pour être assistés dans leur travail, ils consultent le
service de recherche.
|
 |
 |
 |
The run-time infrastructure uses one
network-level protocol, called discovery, and two object-level protocols,
called join and lookup. Discovery enables clients and services to
locate lookup services. Join enables a service to register itself in a lookup
service. Lookup enables a client to query for services that can help accomplish
its goals.
|
 |
L'infrastructure d'exécution utilise un protocole au niveau réseau, appelé
discovery (découverte), et deux protocoles au niveau objet appelés join (joindre)
et lookup (recherche). Discovery permet aux clients et aux services de trouver les
services de recherche. Join permet au service de s'enregistrer lui-même auprès du service de
recherche. Lookup permet à un client de rechercher des services qui peuvent l'aider à atteindre ses
objectifs.
|
 |
 |
 |
The discovery process
|
 |
Le processus de découverte
|
 |
 |
 |
Discovery works like this: Imagine you
have a Jini-enabled disk drive that offers a persistent storage service. As soon
as you connect the drive to the network, it broadcasts a presence
announcement by dropping a multicast packet onto a well-known port. Included
in the presence announcement is an IP address and port number where the disk
drive can be contacted by a lookup service.
|
 |
Le processus de découverte travaille ainsi : imaginez un disque supportant
Jini et offrant un service de stockage persistant. Dès que le disque est connecté au réseau, il
diffuse une annonce de présence en envoyant un paquet multicast sur un port déterminé.
Dans l'annonce de présence, sont inclus une adresse IP et un numéro de port où le disque peut être
contacté par le service de recherche.
|
 |
 |
 |
Lookup services monitor the well-known
port for presence announcement packets. When a lookup service receives a
presence announcement, it opens and inspects the packet. The packet contains
information that enables the lookup service to determine whether or not it
should contact the sender of the packet. If so, it contacts the sender directly
by making a TCP connection to the IP address and port number extracted from the
packet. Using RMI, the lookup service sends an object, called a service
registrar, across the network to the originator of the packet. The purpose
of the service registrar object is to facilitate further communication with the
lookup service. By invoking methods on this object, the sender of the
announcement packet can perform join and lookup on the lookup service. In the
case of the disk drive, the lookup service would make a TCP connection to the
disk drive and would send it a service registrar object, through which the disk
drive would then register its persistent storage service via the join
process.
|
 |
Les services de recherche scrutent sur le port déterminé les paquets
d'annonce de présence. Lorsqu'un service de recherche reçoit une annonce de présence, il l'ouvre et
inspecte le paquet. Le paquet contient les informations qui permet au service de recherche de
déterminer s'il doit ou non contacter l'expéditeur de ce paquet. Si tel est le cas, il contacte
directement l'expéditeur en établissant une connexion TCP à l'adresse IP et sur le numéro de port
extraits du paquet. En utilisant RMI, le service de recherche envoie à l'initiateur du paquet un
objet appelé un enregistreur de service (service registrar). L'objectif de cet
enregistreur de service est de faciliter la communication future avec le service de recherche. Dans
le cas d'un disque dur, le service de recherche attablirait une connexion TCP vers le disque dur et
lui enverrait un enregistreur de service, grâce auquel le disque dur pourra faire
enregistrer son service de stockage persistant par le processus de jonction.
|
 |
 |
 |
 |
 |
 |
 |
 |
|
 |
 |
 |