Jini: une nouvelle technologie pour un monde en réseau

Précédent 1 2 Page 2 Page 2 de 2

Jini en contexte

Traditionnellement, les systèmes d'exploitation ont été conçus avec l'hypothèse qu'un ordinateur aura un processeur, de la mémoire et un disque. Lorsque vous démarrez un ordinateur, la première chose qu'il fait est de rechercher un disque. S'il ne trouve pas de disque, il ne peut pas fonctionner comme un ordinateur. De plus en plus, cependant, les ordinateurs apparaissent sous une forme différente: en tant que périphériques embarqués qui ont un processeur, de la mémoire et une connexion réseau - mais pas de disque. La première chose qu'un téléphone portable fait lorsque vous le démarrez, par exemple, est de rechercher le réseau téléphonique. S'il ne trouve pas le réseau, il ne peut pas fonctionner comme un téléphone portable. Cette tendance dans l'environnement matériel, de centrée sur le disque à centrée sur le réseau, affectera la façon dont nous organisons nos logiciels - et c'est là qu'intervient Jini.

Jini est une tentative de repenser l'architecture informatique, compte tenu de l'importance croissante du réseau et de la prolifération des processeurs dans les périphériques sans lecteur de disque. Ces appareils, qui proviendront de nombreux fournisseurs différents, devront interagir sur un réseau. Le réseau lui-même sera très dynamique - des appareils et des services seront ajoutés et supprimés régulièrement. Jini fournit des mécanismes pour permettre l'ajout, la suppression et la recherche en douceur de périphériques et de services sur le réseau. De plus, Jini fournit un modèle de programmation qui permet aux programmeurs de faire en sorte que leurs appareils se parlent plus facilement.

En s'appuyant sur Java, la sérialisation des objets et RMI, qui permettent aux objets de se déplacer sur le réseau de la machine virtuelle à la machine virtuelle, Jini tente d'étendre les avantages de la programmation orientée objet au réseau. Au lieu d'exiger des fournisseurs de périphériques qu'ils s'entendent sur les protocoles réseau à travers lesquels leurs périphériques peuvent interagir, Jini permet aux périphériques de se parler via des interfaces avec des objets.

Qu'est-ce que Jini?

Jini est un ensemble d'API et de protocoles réseau qui peuvent vous aider à créer et à déployer des systèmes distribués organisés en fédérations de services. Un service peut être tout ce qui se trouve sur le réseau et est prêt à exécuter une fonction utile. Les périphériques matériels, les logiciels, les canaux de communication - même les utilisateurs humains eux-mêmes - peuvent être des services. Un lecteur de disque compatible Jini, par exemple, pourrait offrir un service de «stockage». Une imprimante compatible Jini pourrait offrir un service «d'impression». Une fédération de services est donc un ensemble de services, actuellement disponibles sur le réseau, qu'un client (c'est-à-dire un programme, un service ou un utilisateur) peut réunir pour l'aider à atteindre un objectif.

Pour effectuer une tâche, un client sollicite l'aide de services. Par exemple, un programme client peut télécharger des images du service de stockage d'images dans un appareil photo numérique, télécharger les images vers un service de stockage permanent offert par un lecteur de disque et envoyer une page de versions miniatures des images au service d'impression de une imprimante couleur. Dans cet exemple, le programme client crée un système distribué composé de lui-même, du service de stockage d'images, du service de stockage persistant et du service d'impression couleur. Le client et les services de ce système distribué travaillent ensemble pour effectuer la tâche: décharger et stocker les images d'un appareil photo numérique et imprimer une page de vignettes.

L'idée derrière le mot fédérationest basé sur la vision Jini du réseau - il n'y a pas d'autorité centrale de contrôle. Comme aucun service n'est en charge, l'ensemble de tous les services disponibles sur le réseau forme une fédération - un groupe composé de pairs égaux. Au lieu d'une autorité centrale, l'infrastructure d'exécution de Jini fournit simplement un moyen aux clients et aux services de se trouver (via un service de recherche, qui stocke un répertoire des services actuellement disponibles). Une fois que les services se sont localisés, ils sont seuls. Le client et ses services enrôlés exécutent leur tâche indépendamment de l'infrastructure d'exécution Jini. Si le service de recherche Jini tombe en panne, tous les systèmes distribués rassemblés via le service de recherche avant qu'il ne tombe en panne peuvent continuer leur travail.Jini inclut même un protocole réseau que les clients peuvent utiliser pour rechercher des services en l'absence d'un service de recherche.

Comment fonctionne Jini

Jini définit une infrastructure d'exécution qui réside sur le réseau et fournit des mécanismes qui vous permettent d'ajouter, de supprimer, de localiser et d'accéder à des services. L'infrastructure d'exécution réside sur le réseau à trois endroits: dans les services de recherche qui se trouvent sur le réseau; dans les fournisseurs de services (tels que les appareils compatibles Jini); et chez les clients. Les services de recherche sont le mécanisme d'organisation central des systèmes basés sur Jini. Lorsque de nouveaux services deviennent disponibles sur le réseau, ils s'enregistrent auprès d'un service de recherche. Lorsque les clients souhaitent trouver un service pour les aider dans une tâche, ils consultent un service de recherche.

L'infrastructure d'exécution utilise un protocole au niveau du réseau, appelé découverte , et deux protocoles au niveau objet, appelés jointure et recherche. La découverte permet aux clients et aux services de localiser les services de recherche. Join permet à un service de s'enregistrer dans un service de recherche. La recherche permet à un client d'interroger un service de recherche pour les services qui peuvent aider le client à atteindre ses objectifs.

Le processus de découverte

La découverte fonctionne comme ceci: imaginez que vous disposez d'un lecteur de disque compatible Jini qui offre un service de stockage persistant. Dès que vous connectez le lecteur au réseau, il diffuse une annonce de présence en déposant un paquet de multidiffusion sur un port bien connu. L'annonce de présence comprend une adresse IP et un numéro de port où le lecteur de disque peut être contacté par un service de recherche.

Les services de recherche surveillent le port bien connu pour les paquets d'annonce de présence. Lorsqu'un service de recherche reçoit une annonce de présence, il ouvre et inspecte le paquet. Le paquet contient des informations qui permettent au service de recherche de déterminer s'il doit ou non contacter l'expéditeur du paquet. Si tel est le cas, il contacte directement l'expéditeur en établissant une connexion TCP à l'adresse IP et au numéro de port extraits du paquet. À l'aide de RMI, le service de recherche envoie un objet, appelé registraire de service,à travers le réseau à l'expéditeur du paquet. Le but de l'objet de bureau d'enregistrement de service est de faciliter la communication ultérieure avec le service de recherche. En appelant des méthodes sur cet objet, l'expéditeur du paquet d'annonce peut effectuer une jonction et une recherche sur le service de recherche. Dans le cas du lecteur de disque, le service de recherche établirait une connexion TCP avec le lecteur de disque et lui enverrait un objet de registre de service, à travers lequel le lecteur de disque enregistrerait ensuite son service de stockage persistant via le processus de jointure.

Le processus d'adhésion

Une fois qu'un fournisseur de services dispose d'un objet de registre de services, le produit final de la découverte, il est prêt à effectuer une jointure - pour faire partie de la fédération de services qui sont enregistrés dans le service de recherche. Pour effectuer une jointure, le fournisseur de services appelle la register()méthode sur l'objet du bureau d'enregistrement de services, en passant en paramètre un objet appelé élément de service, un ensemble d'objets décrivant le service. La register()méthode envoie une copie de l'élément de service au service de recherche, où l'élément de service est stocké. Une fois cette opération terminée, le fournisseur de services a terminé le processus d'adhésion: son service s'est inscrit dans le service de recherche.

L'élément de service est un conteneur pour plusieurs objets, y compris un objet appelé objet de service, que les clients peuvent utiliser pour interagir avec le service. L'élément de service peut également inclure n'importe quel nombre d' attributs, qui peuvent être n'importe quel objet. Certains attributs potentiels sont des icônes, des classes qui fournissent des interfaces graphiques pour le service et des objets qui donnent plus d'informations sur le service.

Les objets de service implémentent généralement une ou plusieurs interfaces via lesquelles les clients interagissent avec le service. Par exemple, un service de recherche est un service Jini et son objet de service est le registraire de service. La register()méthode appelée par les fournisseurs de services lors de la jointure est déclarée dans l' ServiceRegistrarinterface, que tous les objets du bureau d'enregistrement de services implémentent. Les clients et les fournisseurs de services communiquent avec le service de recherche via l'objet du registraire de service en appelant des méthodes déclarées dans l' ServiceRegistrarinterface. De même, un lecteur de disque fournirait un objet de service qui implémentait une interface de service de stockage bien connue. Les clients rechercheraient et interagiraient avec le lecteur de disque par cette interface de service de stockage.

Le processus de recherche

Une fois qu'un service s'est inscrit auprès d'un service de recherche via le processus de participation, ce service est disponible pour une utilisation par les clients qui interrogent ce service de recherche. Pour construire un système distribué de services qui fonctionneront ensemble pour effectuer certaines tâches, un client doit localiser et solliciter l'aide des services individuels. Pour trouver un service, les clients interrogent les services de recherche via un processus appelé recherche.

Pour effectuer une recherche, un client appelle la lookup()méthode sur un objet du registraire de service. (Un client, comme un fournisseur de services, obtient un bureau d'enregistrement de services via le processus de découverte, comme décrit plus haut dans cet article.) Le client passe comme argument à lookup()un modèle de service, un objet qui sert de critère de recherche pour la requête. Le modèle de service peut inclure une référence à un tableau d' Classobjets. Ces Classobjets indiquent au service de recherche le ou les types Java de l'objet de service souhaité par le client. Le modèle de service peut également inclure un ID de service, qui identifie de manière unique un service, et des attributs, qui doivent correspondre exactement aux attributs téléchargés par le fournisseur de services dans l'élément de service. Le modèle de service peut également contenir des caractères génériques pour l'un de ces champs. Un caractère générique dans le champ ID de service, par exemple, correspondra à n'importe quel ID de service. La lookup()méthode envoie le modèle de service au service de recherche, qui exécute la requête et renvoie zéro à de nombreux objets de service correspondants. Le client obtient une référence aux objets de service correspondants comme valeur de retour de la lookup()méthode.

Dans le cas général, un client recherche un service par type Java, généralement une interface. Par exemple, si un client avait besoin d'utiliser une imprimante, il composerait un modèle de service qui incluait un Classobjet pour une interface bien connue aux services d'imprimante. Tous les services d'impression implémenteraient cette interface bien connue. Le service de recherche renverrait un objet de service (ou des objets) qui implémentaient cette interface. Des attributs peuvent être inclus dans le modèle de service pour réduire le nombre de correspondances pour une telle recherche basée sur le type. Le client utiliserait le service d'imprimante en invoquant sur l'objet de service les méthodes déclarées dans l'interface de service d'imprimante bien connue.

Séparation de l'interface et de la mise en œuvre

L'architecture de Jini apporte la programmation orientée objet au réseau en permettant aux services réseau de tirer parti de l'un des principes fondamentaux de la programmation orientée objet: la séparation de l'interface et de l'implémentation. Par exemple, un objet de service peut accorder aux clients l'accès au service de plusieurs manières. L'objet peut en fait représenter l'ensemble du service, qui est téléchargé sur le client lors de la recherche, puis exécuté localement. En variante, l'objet de service peut servir simplement de proxy vers un serveur distant. Lorsque le client appelle des méthodes sur l'objet de service, il envoie les demandes sur le réseau au serveur, qui fait le vrai travail. L'objet de service local et un serveur distant peuvent également faire une partie du travail.

Une conséquence importante de l'architecture de Jini est que le protocole réseau utilisé pour communiquer entre un objet de service proxy et un serveur distant n'a pas besoin d'être connu du client. Comme illustré dans la figure ci-dessous, le protocole réseau fait partie de l'implémentation du service. Ce protocole est une affaire privée décidée par le développeur du service. Le client peut communiquer avec le service via ce protocole privé car le service injecte une partie de son propre code (l'objet de service) dans l'espace d'adressage du client. L'objet de service injecté pourrait communiquer avec le service via RMI, CORBA, DCOM, un protocole maison construit sur des sockets et des flux, ou toute autre chose. Le client n'a tout simplement pas besoin de se soucier des protocoles réseau,car il peut parler à l'interface bien connue implémentée par l'objet de service. L'objet de service s'occupe de toute communication nécessaire sur le réseau.

Différentes implémentations de la même interface de service peuvent utiliser des approches d'implémentation complètement différentes et des protocoles de réseau complètement différents. Un service peut utiliser du matériel spécialisé pour répondre aux demandes des clients, ou il peut effectuer tout son travail dans le logiciel. En fait, l'approche de mise en œuvre adoptée par un seul service peut évoluer avec le temps. Le client peut être sûr qu'il dispose d'un objet de service qui comprend l'implémentation actuelle du service, car le client reçoit l'objet de service (via le service de recherche) du fournisseur de services lui-même. Pour le client, un service ressemble à l'interface bien connue, quelle que soit la façon dont le service est implémenté.

Conclusion

Comme nous l'avons vu dans cette colonne d'introduction, Jini tente d'élever le niveau d'abstraction pour la programmation de systèmes distribués, du niveau du protocole réseau au niveau de l'interface objet. Dans la prolifération émergente des périphériques embarqués connectés aux réseaux, de nombreux éléments d'un système distribué peuvent provenir de différents fournisseurs. Jini rend inutile pour les fournisseurs de périphériques de s'entendre sur des protocoles de niveau réseau permettant à leurs périphériques d'interagir. Au lieu de cela, les fournisseurs doivent s'entendre sur les interfaces Java à travers lesquelles leurs appareils peuvent interagir. Les processus de découverte, de jointure et de recherche, fournis par l'infrastructure d'exécution Jini, permettront aux appareils de se localiser les uns les autres sur le réseau. Une fois qu'ils se sont localisés, les appareils pourront communiquer entre eux via des interfaces Java.

Le mois prochain

Bien que cette colonne se concentre principalement sur la façon de résoudre des problèmes de programmation spécifiques à l'aide de Jini, tels que l'ajout d'une interface graphique à un service ou la création d'un service administrable, le mois prochain, je vais discuter des problèmes et des perspectives du monde réel de Jini.

Discuter de Jini

Pour discuter du matériel présenté dans cet article, visitez: //www.artima.com/jini/jf/intro/index.html

Bill Venners écrit des logiciels de manière professionnelle depuis 14 ans. Basé dans la Silicon Valley, il fournit des services de conseil et de formation en logiciels et gère un site Web pour les développeurs Java et Jini, artima.com. Il est l'auteur du livre: Inside the Java Virtual Machine, publié par McGraw-Hill.

En savoir plus sur ce sujet

  • Visitez la communauté Jini pour plus d'informations sur le processus par lequel des interfaces bien connues seront définies

    //www.jini.org

  • Page de téléchargement de la version actuelle de Jini (sur Java Developer Connection)

    //developer.java.sun.com/developer/products/jini

  • Page de téléchargement de la version JDK 1.2 FCS, sur laquelle la version actuelle de Jini s'exécute

    //java.sun.com/products/jdk/1.2/

  • Un tutoriel Jini en ligne

    //pandonia.canberra.edu.au/java/jini/tutorial/Jini.xml

  • Notes de cours en ligne pour un cours sur RMI et Jini

    //www.eli.sdsu.edu/courses/spring99/cs696/notes/index.html

  • «The Network Revolution», Clyde Higaki et Bill Venners (Sun's Jini Technology Homepage, 1999). Les auteurs Clyde Higaki et Bill Venners proposent un certain nombre de scénarios pour décrire comment Jini pourrait être utilisé dans le monde réel

    //java.sun.com/features/1999/01/jini_scenario.html

  • Liens vers les ressources Jini

    //www.artima.com/jini/resources/index.html

  • La page principale de Jini sur Sun

    //java.sun.com/products/jini/

  • La communauté Jini, le site central d'interaction entre les signataires de la licence de source communautaire Jini Sun

    //www.jini.org

  • Page de téléchargement pour toutes les spécifications Jini

    //java.sun.com/products/jini/specs/

  • Archives de la liste de diffusion JINI-USERS. Pour vous abonner à la liste de diffusion JINI-USERS, envoyez un e-mail à [email protected]. Dans le corps du message, saisissezsubscribe jini-users

    //archives.java.sun.com/archives/jini-users.html

  • Une FAQ Jini pour la liste de diffusion JINI-USERS

    //www.artima.com/jini/faq.html

Cette histoire, "Jini: une nouvelle technologie pour un monde en réseau" a été initialement publiée par JavaWorld.