01-08-2010
 
  Accueil arrow Tutoriels arrow Java arrow Jini    
Accueil
Travaux
Mon CV
Tutoriels
Histoire
Contact


Linking
Management du risque




Jini Convertir en PDF Version imprimable
Appréciation des utilisateurs: / 20
FaibleMeilleur 

Introduite par Sun en 1998, la technologie Jini simplifie interfaçage et la connexion entre ordinateurs nomades : PC, PDA, téléphone mobile, TV, Console de Jeux, Digital Camera, HiFi, Imprimantes, Fax, Alarmes, GPS, Domotique, … en plus elle fournit un cadre dans lequel, les services peuvent faire connaître leur existence et leur service d’une part et d'autre part, n'importe quel bout de logiciel peut rechercher un service implémentant un ensemble de fonctionnalités données et établir un "contrat" pour l'utiliser.

Architecture de JNI

En Jini un service peut être implémenté en matériel : une imprimante offre un service d'impression, mais aussi par logiciel: un traitement de texte peut être vu comme un service. Dans les deux cas la technologie se base sur le chargement dynamique du code, Cette transmission de données se fait à travers un système de couches, quant aux connexions, elles sont effectuées grâce à un protocole propriétaire JRMP (Java Remote Method Protocol) basé sur TCP/IP.

Architecture de JNI

nous pouvons dire que la technologie Jini est une extension réseau de l’infrastructure, model de programmation et les services de la technologie Java. Comme le motre de tableau ci-dessous:

 

Infrastructure

Programmation model

Services

Base Java

Java VM
RMI
Java Security

Java APIs
Java Beans

JNDI
Entreprise Beans

Java + Jini

Discovery/join
Distributed Security
Lookup

Leasing
Transcations
Events

Printing
Transacation Manager

L’infrastructure de JINI

Dans la technologie Jini, nous distinguons trois pilé de l’infrastructure :

  • Les classes Java RMI (Remote Method Invocation) qui permettant de manipuler des objets distants (objet qui existe dans un autre espace adresse soit dans la même machine soit dans une machine différente), et qui permet aussi d'assurer la sécurité de l'environnement distribué Jini.
  • Le protocole de découverte (discovery process) et d'adhésion (join process) qui permettent respectivement de découvrir un service d’enregistrement et enregistrer un service.
  • Le service de recherche (lookup service), qui est le recueil des services existants.

Mécanisme de Jini

Le  Service Provider  (fournisseur du service) recherche un  Lookup Service (service d’enregistrement)

Discovery

Le  Service Provider  (fournisseur du service) enregistre l'objet service ainsi que ses attribues  dans le Lookup Service (service d’enregistrement)

l'enregistrement

Le client demande un service par rapport à ses attribues. Une copie de ce dernier lui transmise pour qu’il puisse communique avec le service.

Lookup

Le client interagi directement avec le Service Provider (fournisseur du service) par l’intermédiaire de l’objet service.

Service invocation

 

Le modèle de programmation de Jini

La technologie Jini réside sur un système distribué supposé fiable. Ce modèle de programmation propose trois API :

  • Leasing : permet de gérer le bail (la durée de vie) des objets distribués en étendant la notion de ramasse-miettes (garbage collector) aux environnements distribués. Le bail se caractérise par:
    • Une période le fournisseur du bail garantit au demandeur l’accès à une certaine ressource,
    • La durée peut en être définie par le fournisseur ou négociée par les deux parties,
    • Pendant la durée du bail, celui-ci peut être annulé par le demandeur. Les ressources en jeu sont alors libérées

  • Transaction: un ensemble d’opérations groupées de manière à étendre le principe d’atomicité, selon les critères suivants :
    • Elles réussissent ou échouent ensemble.
    • Pour un observateur extérieur, elles constituent une unique opération.

    En cas de problème chez un des participants d’une transaction, l’ensemble de l’opération échoue, ce qui évite de laisser des entités dans des états intermédiaires. Une transaction est créée et surveillée par un Manager. Un Manager est un objet qui implémente l’interface TransactionManager.

    La validation d’une transaction implique le vote de chaque participant. Les trois votes possibles sont :

    • Prepared (Prêt), si le participant estime que la transaction, de son point de vue, peut être validée,
    • Not changed (i nchangé), si les opérations qui le concernaient étaient en lecture seule,
    • Aborted (Annuler), si le participant estime que la transaction ne doit pas être validée.

  • Events : défini comme un changement d’état abstrait d’un objet, c’est une prolongation du modèle d'événement employé par des composants de « JavaBeans » pour l'environnement distribué qui permet la communication basée par des événements entre les services de Jini.

Premier programme

Pour réaliser un programme Jini, nous allons procède en plusieurs étapes :

  1. Définir l'interface pour la classe distante (HelloWord) qui hérite de l'interface Remote et déclarer les méthodes publiques globales de l'objet. De plus ces méthodes doivent relever une exception de type RemoteException
  2. HelloWord.java

  3. Définir la classe du service (HelloWordImpl) qui implémente l’interface HelloWord et l’interface ServiceIDListener nécessaire pour le « call-back » du JoinManager (Join) quand un identifiant du service est assignée, en générale cette interface est utilisé par des services qui n’ont pas encre d’identifiant.
    En plus la classe du service doit hérite de la classe UnicastRemoteObject ou Activatable (utilisant elle-même les classes Socket et SocketServer, permettant la communication par protocole TCP) -dans notre cas on va s’intéresser à UnicastRemoteObject pour débuter – afin de créer un lien au système de RMI et aussi initialisation à distance d'objet. Rappelons que les objets de cette classe doivent être Serializable, un mécanisme qui permet de sérialiser des objets en flux réseau pour faciliter leur transfère.

  4. HelloWordImpl.java
    N.B : vous remarquerez que la classe HelloWordImpl n’implémente pas Serializable parce qu’elle dispose des propriétés qui sont au préalable Serializable.

  5. Écrire le Service Provider (ServerUniCast) c’est le programme serveur qui instancie le service.
    ServerUniCast.java

  6. Ecrire le programme client (ClientUniCast):

  7. ClientUniCast.java

  8. Générer le Stub en utilisant la commande rmic (#rmic Bonjour)

  9. Lancer leregistry (rmiregistry) puis le service lookupService en utilisant l'archive start fournit avec Jini.
    #java -Djava.security.policy=priv.policy -jar C:\jini2_1\lib\start.jar start-transient-reggie.config
    Avec priv.policy fichier de privilèges et start-transient-reggie.config fichier de configuration du LookupService qui nécessite à son tour le fichier transient-reggie.config

    N.B. le LookupService nécessite un serveur web pour qu’il puisse charger les classes de son implémentation. Si vous nous disposer pas d'un serveur vous pouvez utiliser celui fournit par Jini en tapant la commande suivante.
    #java -jar C:\jini2_1\lib\tools.jar -port 80 -dir C:\jini2_1\lib –verbose

  10. lancer le service provider.
    #java -Djava.security.policy=priv.policy ServerUniCast

  11. exécuter le client
    #java -Djava.security.policy=priv.policy ClientUniCast

Diffusion (Multicast)

Dans l’exemple précédant la découverte (discovery) et la recherche (lookup) se faisait on “Unicast “ par ce qu’on connaît le host et/ou le port du lookupservice. Dans le cas contraire ou on désire faire autrement on peut effectuer cette découverte et la recherché en “Multicast“ (diffusion) qui consiste à chercher l’ensemble des lookupservice présent dans un tronçons réseaux.

ServerMultiCast.java
ClientMultiCast.java

De la même façon que l'exemple de l'unicast, nous exécutons celui la.

LookupServcie

Dans cette partie nous allons voir un exemple d’un programme qui créer dynamiquement un LookupService.(ServerLookup)

ServerLookup.java

Le programme ServerLookup va crée un LookupService puis enregistrer l'objet Hello dans ce dernier. Pour cela nous avons besoin d'un fichier de configuration (service.config) qui définit les propriétés d'un lookupservice.

puis nous lancons le programme.
#java -Djava.security.policy=priv.policy ServerLookup service.config

Pour tester en exécutant le ClientMulticast.
#java -Djava.security.policy=priv.policy ClientUniCast

Transaction

Nous pouvons assimiler la validation d’une transaction par une conformité d'option (vote à l'unanimité) ce suffrage implique le vote positif de chaque participant. En cas de problème chez un des participants d’une transaction, l’ensemble de l’opération échoue, ce qui évite de laisser des entités dans des états intermédiaires.

Prenons un exemple où tous les politiciens doivent vote à l'unanimité pour ratifier un texte de loi. Pour cela nous allons définir trois classes Urne qui représente l'urne, Oui et Non qui représentent les bulletin du scrutin puis pour tester nous allons écrire une classe Vote pour voter et dépouiller.

Oui.java
Non.java
Vote.java
Urne.java

Pour l'exécution:

- lancer le service lookupService.

- lancer le service TransactionManager qui est un service Jini gérant les transactions, en utilisant le jar « start » fournit par Jin
#java -jar -Djava.security.policy=priv.policy C:\jini2_1\lib\start.jar start-transient-mahalo.config
Avec priv.policy fichier de privilèges et start-transient-mahalo.config fichier de configuration du Transactionmanager qui nécessite à son tour le fichier transient-mahalo.config

- mettre en ligne les classes du programme pour le chargement dynamique (voir rmi) .
- lancer le client:
#java -Djava.rmi.server.codebase=http://localhost/export -Djava.security.policy=priv.policy Vote

Télécharger l'archive complet de ce tutoriel (Jini.zip)

Dernière mise à jour : ( 24-03-2007 )
 


Java Technology
2009 Annual Developer Quiz

Test your knowledge of Java developments in 2009.

Java Technology Headlines
 

© 2010 Le site Web de Mâamoun BERNICHI
Joomla! is Free Software released under the GNU/GPL License.