Conception et réalisation d'un syst`eme d'instrumentation ... - CoDE
Conception et réalisation d'un syst`eme d'instrumentation ... - CoDE
Conception et réalisation d'un syst`eme d'instrumentation ... - CoDE
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
UNIVERSITE LIBRE DE BRUXELLES<br />
Faculté des Sciences appliquées<br />
Ecole Polytechnique<br />
Année académique 2000-2001<br />
<strong>Conception</strong> <strong>et</strong> <strong>réalisation</strong> d’un système<br />
d’instrumentation distribuée basé sur l’architecture<br />
Jini<br />
Promoteurs :<br />
Prof. Francis Grenez<br />
Prof. Hugues Bersini<br />
Philippe De Doncker<br />
Travail de fin d’études présenté par<br />
Jean-Michel Dricot en vue de l’obtention<br />
du grade d’ingénieur civil<br />
informaticien
Remerciements<br />
Je tiens à remercier ici tout ceux qui de près ou de loin ont contribué à la <strong>réalisation</strong><br />
de ce mémoire. Même si ce travail est avant tout l’oeuvre d’une seule personne, je n’aurais<br />
pu aboutir sans les conseils avisés <strong>et</strong> les encouragements de mes promoteurs.<br />
J’aimerais d’abord remercier tout particulièrement le Professeur Francis Grenez ainsi<br />
que Mr. Philippe De Doncker pour leur aide, leur disponibilité <strong>et</strong> le soutien dont ils ont fait<br />
part tout au long de c<strong>et</strong>te année. J’ai été fort touché par leurs initiatives à mon égard <strong>et</strong><br />
leurs encouragements qui ont permis la publication <strong>et</strong> la présentation de ce travail, m’offrant<br />
de par là même un atout considérable au moment d’entamer une carrière académique.<br />
Je voudrais également remercier le Professeur Hugues Bersini de m’avoir offert la possibilité<br />
de découvrir la technologie Jini, marriant si subtilement l’Informatique à l’Electronique.<br />
Je tiens à remercier personellement Mr. Esteban Zimányi, à la fois Professeur <strong>et</strong> ami,<br />
qui a su prendre le temps de me conseiller à de nombreuses reprises quant la redaction de<br />
c<strong>et</strong> ouvrage.<br />
Il va sans dire que je remercie les membres du Service d’Electricité Générale pour leur<br />
sympathie <strong>et</strong> leur acceuil chaleureux, une année durant, dans leurs locaux.<br />
J’ai une pensée pour tous mes camarades de promotion dont l’optimisme, la bonne<br />
humeur <strong>et</strong> la fraternité m’ont permis de vivre pendant toutes ces années une amitié extraordinairement<br />
épanouissante.<br />
Je ne voudrais pas non plus oublier mon Amoureuse qui a toujours trouvé la force <strong>et</strong><br />
la patience de me soutenir lorsque j’en avais besoin.<br />
Enfin, j’aimerais faire plus que de simples remerciements à mes Parents qui ont traversé<br />
avec moi toutes ces années d’étude à l’Université. Les épreuves que j’ai traversées ont été les<br />
leurs également, <strong>et</strong> la moindre des choses que je puisse faire pour leur prouver ma gratitude<br />
est de leur dédier ce mémoire.<br />
1
Table des matières<br />
I Étude théorique 6<br />
1 Instrumentation Virtuelle 7<br />
1.1 Introduction <strong>et</strong> Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />
1.2 Le contrôle local des appareils de mesure . . . . . . . . . . . . . . . . . . . 9<br />
1.2.1 GPIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
1.2.2 La programmation visuelle . . . . . . . . . . . . . . . . . . . . . . . 12<br />
1.3 Instrumentation distribuée . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
1.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
1.3.2 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
1.3.3 GPIB-En<strong>et</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
1.3.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
2 CORBA 20<br />
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
2.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
2.2.1 IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
2.2.2 l’ORB <strong>et</strong> l’IIOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
2.2.3 Le mécanisme de marshallisation . . . . . . . . . . . . . . . . . . . 25<br />
2.2.4 Les Obj<strong>et</strong>s standards . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
2.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
3 JAVA <strong>et</strong> RMI 29<br />
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
3.2 La technologie Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
3.3 RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
3.3.1 Le modèle proposé par Java : RMI . . . . . . . . . . . . . . . . . . 33<br />
3.3.2 Le transfert dynamique de code mobile . . . . . . . . . . . . . . . . 34<br />
3.4 Java hardware : le PicoJAVA . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />
4 Architecture Jini 38<br />
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.2 Architecture <strong>et</strong> principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />
4.3 Le modèle d’interaction dynamique . . . . . . . . . . . . . . . . . . . . . . 42<br />
2
4.3.1 Interrogation du Lookup par les clients . . . . . . . . . . . . . . . . 42<br />
4.3.2 Le concept de Leasing . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
II Réalisation d’un système d’instrumentation distribuée 48<br />
5 Positionnement de JINI par rapport aux solutions actuelles 49<br />
5.1 CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.1.2 Aspects communs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.1.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />
5.1.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2 UPNP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2.2 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
5.3 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
5.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />
6 Contrôle local des instruments de mesure en Java 55<br />
6.1 Contrôle local des instruments GPIB . . . . . . . . . . . . . . . . . . . . . 55<br />
6.2 l’interface standard IEEE 488 pour Java . . . . . . . . . . . . . . . . . . . 56<br />
7 Utilisation de JINI dans le cadre de l’instrumentation virtuelle 61<br />
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
7.2 Interfaçage des instruments de mesure . . . . . . . . . . . . . . . . . . . . 62<br />
7.2.1 Interfaces standardisées . . . . . . . . . . . . . . . . . . . . . . . . . 62<br />
7.2.2 Introspection dynamique des capacités des instruments . . . . . . . 65<br />
7.3 Exploitation du réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.3.1 Les domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.3.2 Instrumentation distante . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.4 Les apports propres à Jini . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
7.4.1 Robustesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
7.4.2 Interfaces graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
8 Intégration de Jini dans les solutions actuelles 71<br />
8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
8.2 Implantation d’une interface de programmation visuelle intégrant Jini . . . 72<br />
8.3 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
9 Conclusion <strong>et</strong> perspectives 80
Introduction<br />
Contexte de travail<br />
Le développement <strong>et</strong> l’utilisation des instruments de mesure programmables sont actuellement<br />
largement exploités, tant dans le monde académique que dans les industries,<br />
menant à des résultats <strong>et</strong> à des mises en oeuvre prom<strong>et</strong>teuses. Ceci découle principalement<br />
de la possibilité d’utilisation d’architectures programmables présentant actuellement des<br />
performances élevées à un coût raisonnable. En particulier, la capacité de modifier le processus<br />
de prise de mesure en repensant uniquement l’algorithme exécuté par l’ordinateur<br />
de contrôle <strong>et</strong> ce, sans remplacer la moindre pièce matérielle, rend l’expérimentation plus<br />
modulaire, réutilisable <strong>et</strong> flexible. Le développement de composants d’acquisition de mesure<br />
génériques <strong>et</strong> réutilisables, notamment par une approche orientée obj<strong>et</strong>, a permis de<br />
réduire drastiquement les coûts de développement <strong>et</strong> de mise à niveau des laboratoires de<br />
mesure.<br />
Un certain nombre de standards existent afin de perm<strong>et</strong>tre le contrôle de senseurs<br />
ou d’actuateurs depuis des stations de travail ordinaires. A ces standards éléctriques sont<br />
associés des outils logiciels facilitant la mise en oeuvre, souvent fastidieuse, de ces appareils.<br />
Problématique<br />
L’introduction de c<strong>et</strong>te approche <strong>et</strong> l’élaboration des moyens logiciels qui les accompagne<br />
remonte à près de vingt ans. L’Informatique <strong>et</strong> l’Electronique ont connu, au cours de<br />
ces deux dernières décénies, des évolution majeures. Les ordinateurs présentent des puissances<br />
de calcul croissantes <strong>et</strong> sont actuellement presque toujours intégrés dans des réseaux<br />
locaux ou globaux, à l’instar d’Intern<strong>et</strong>.<br />
De telles capacités, en terme de traitement des mesures, de stockage de données issues<br />
d’interaction entre appareils, sont peu ou pas utilisées dans le cadre de l’instrumentation.<br />
Les modèles mis en oeuvre dans les solutions actuelles ne peuvent tirer un bénéfice de c<strong>et</strong>te<br />
explosion de nouvelles technologies, privant ainsi l’ingéniérie de la mesure <strong>et</strong> du signal<br />
d’outils précieux.<br />
4
Contributions<br />
Le présent travail tente d’apporter une solution à ce problème sous la forme de l’utilisation<br />
d’un nouvelle technologie connue sous le nom de Jini. Jini propose un modèle<br />
d’interaction dynamique tirant bénéfice de la plateforme orientée obj<strong>et</strong> Java. Ainsi, nous<br />
avons été à même de créer un réseau d’instrumentation distribué dans lequel les appareils,<br />
actuateurs ou senseurs, sont à même d’interragir entre eux <strong>et</strong> avec des logiciels clients de<br />
manière totalement transparente.<br />
Les contraintes de robustesse, vis-à-vis des pannes ou de la qualité du réseau, ont pu<br />
être intégrées dans c<strong>et</strong>te technologie au moyen d’une étude de Jini attachée spécifiquement<br />
à répondre aux besoins de l’instrumentation. Une intégration de c<strong>et</strong>te solution dans les<br />
logiciels existants, tels que LabVIEW, est également possible.<br />
Cheminement de l’exposé<br />
Le présent manuscrit comporte deux parties. Une introduction théorique initie le cheminement.<br />
Dans un premier temps nous situerons le contexte de la prise de mesure ainsi<br />
que les technologies utilisées jusqu’à présent pour réaliser celle-ci. Nous exposerons ensuites<br />
certaines techniques d’interaction entre obj<strong>et</strong>s à travers le réseau qui nous perm<strong>et</strong>trons<br />
dans le début de la seconde partie de justifier le choix de Jini comme solution à la<br />
problématique spécifique des instruments distribués. Nous poursuivrons en détaillant la<br />
<strong>réalisation</strong> complète d’un système d’instrumentation distribuée se basant sur la plateforme<br />
Java <strong>et</strong> l’architecture Jini. Enfin, il sera montré comment il est possible d’intégrer la solution<br />
proposée dans les logiciels existants.<br />
Un cédérom complète le présent travail. Il contient l’ensemble des annexes,le programme<br />
de contrôle JiniLab ainsi que le code source des services Jini développés. Ce média a été<br />
remis au Professeur Grenez <strong>et</strong> est conservé dans la bibliothèque du Service d’Electricité<br />
Générale.
Première partie<br />
Étude théorique<br />
6
Chapitre 1<br />
Instrumentation Virtuelle<br />
Sommaire<br />
1.1 Introduction <strong>et</strong> Motivation . . . . . . . . . . . . . . . . . . . . . 7<br />
1.2 Le contrôle local des appareils de mesure . . . . . . . . . . . . 9<br />
1.2.1 GPIB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
1.2.2 La programmation visuelle . . . . . . . . . . . . . . . . . . . . . 12<br />
1.3 Instrumentation distribuée . . . . . . . . . . . . . . . . . . . . . 14<br />
1.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14<br />
1.3.2 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
1.3.3 GPIB-En<strong>et</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />
1.3.4 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
1.1 Introduction <strong>et</strong> Motivation<br />
Le concept d’instruments virtuels [26] a été introduit à la base pour simplifier la conception,<br />
l’implantation <strong>et</strong> l’utilisation de systèmes d’instrumentation programmables en adoptant<br />
une interface visuelle. La programmation visuelle perm<strong>et</strong> une <strong>réalisation</strong> avant tout<br />
conceptuelle du processus de prise de mesure, perm<strong>et</strong>tant ainsi aux personnes peu versées<br />
dans la programmation de m<strong>et</strong>tre au point rapidement des algorithmes performants. Le programme<br />
y est décrit de manière graphique en sélectionnant <strong>et</strong> en assemblant des blocs fonctionnels<br />
présents dans des bibliothèques de développement. Ce type d’approche, présentant<br />
des interfaces graphiques ressemblant aux instruments réels, rend ainsi l’utilisation <strong>et</strong> la<br />
compréhension de l’instrumentation virtuelle plus aisée pour les personnes expertes en<br />
expérimentation ”réelle”.<br />
7
1.1. INTRODUCTION ET MOTIVATION<br />
l’utilisation du réseau a depuis peu été incorporée aux processus de prise de mesure<br />
avec beaucoup de succès. C<strong>et</strong>te nouvelle approche fonctionnelle perm<strong>et</strong> en eff<strong>et</strong> non seulement<br />
d’interconnecter des instruments entre eux, mais également de créer des zones de<br />
post-traitement des données, comme des bases de données ou des logiciels de DSP. C<strong>et</strong>te<br />
configuration est particulièrement rentable, tant d’un point vue économique que du point<br />
de vue de l’utilisation efficace des ressources disponibles sur le réseau local du laboratoire,<br />
mais peut également se révéler nécessaire lorsque les points de mesure sont fortement<br />
disséminés ou distants <strong>et</strong> qu’il deviendrait donc financièrement inabordable d’y adjoindre<br />
un post-traitement informatique.<br />
Fig. 1.1 – l’utilisation de l’instrumentation virtuelle perm<strong>et</strong> l’exploitation d’une large<br />
variété de ressources, notamment celles fournies par les ordinateurs de contrôle <strong>et</strong> plus<br />
récemment, l’intégration des réseaux locaux industriels ou de l’Intern<strong>et</strong><br />
Enfin, le développement de systèmes embarqués présentant des puissances de calcul<br />
pour un coût acceptable <strong>et</strong> l’émergence de technologies d’interconnexion perm<strong>et</strong>tant de<br />
créer spontanément des réseaux ”nomades” offrent des possibilité nouvelles qui perm<strong>et</strong>tent<br />
l’introduction efficace d’une composante logicielle à même le système ou situé dans un<br />
proche voisinage.<br />
8
1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />
1.2 Le contrôle local des appareils de mesure<br />
Les systèmes classiques de contrôle local des appareils par un PC offrent l’avantage<br />
de pouvoir confiner en un même lieu les composants matériels d’expérimentation chargés<br />
de l’acquisition ainsi que les éléments chargés du contrôle des instruments <strong>et</strong> de la mise<br />
à jour des données. Toutes les opérations relatives à la prise de la mesure sont effectuées<br />
par un logiciel spécialisé. Ce schéma de conception <strong>et</strong> de déploiement a conduit à standardiser<br />
les cartes d’ entrées/sorties dévolues à l’acquisition <strong>et</strong> la mise à jour du signal,<br />
tout en diminuant le coût global du processus entier d’expérimentation (e.g. l’acquisition,<br />
la maintenance mais aussi le développement logiciel <strong>et</strong> la prise en charge de la formation<br />
des techniciens).<br />
De nombreuses initiative relatives à la standardisation <strong>et</strong> l’interfaçage ont été entreprises<br />
depuis longtemps par les industriels. Cependant, l’analyse des solutions existantes<br />
sur le marché montre qu’il n’ existe pas de standard ouvert universellement adopté mais<br />
uniquement deux systèmes propriétaires embrassés par une partie extrêmement importante<br />
des utilisateurs. Il s’ agit d’une part de l’utilisation du bus GPIB afin de perm<strong>et</strong>tre<br />
la connexion cohérente d’appareils de mesure <strong>et</strong> d’appareils de contrôle, PC par exemple.<br />
d’autre part, du point de vue de l’interfaçage <strong>et</strong> de la programmation visuelle, LabVIEW<br />
de la société National Instruments sera évoqué ici afin de bien montrer comment on peut<br />
utiliser les concepts proposés par le modèle de l’instrumentation virtuelle.<br />
1.2.1 GPIB<br />
Le bus GPIB, standardisé sous les références IEEE 488.1 <strong>et</strong> IEEE488.2 est un système<br />
d’interconnexion des instruments imaginé par Hewl<strong>et</strong>t-Packard en 1975. Anciennement<br />
connu sous la dénomination HPIB, ce modèle de bus est constitué d’un certain nombre<br />
d’éléments standardisés :<br />
1. une interface électrique perm<strong>et</strong>tant l’envoi d’information <strong>et</strong> du statut actuel des<br />
périphériques de la ligne.<br />
2. la possibilité de connecter des appareils sans les différencier au vu de leur rôle<br />
spécifique : envoi ou réception de données. Chaque appareil est vu comme un noeud<br />
du système à même d’ém<strong>et</strong>tre ou de recevoir une information à un moment donné.<br />
3. un modèle de communication basé sur l’envoi de messages entre les appareils sous<br />
forme de chaînes de caractères. Chaque appareil est capable de répondre aux sollicitations<br />
par renvoi d’un message <strong>et</strong> par l’ ajustement du statut de la ligne afin de<br />
refléter l’état actuel du bus ou signaler une erreur.<br />
Notons enfin que 14 appareils sont ainsi connectables sur un bus GPIB sur une longueur<br />
totale ne dépassant pas 20 mètres.<br />
Le concept du contrôleur <strong>et</strong> des périphériques proposé par le IEEE 488.1 est illustré aux<br />
figures 1.2 <strong>et</strong> 1.3. Les contrôleurs ont la capacité d’envoyer des commandes, de présenter<br />
9
1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />
des données sur le bus <strong>et</strong> d’écouter les messages envoyés par les périphériques. Le contrôle<br />
du bus peut passer à tout moment du Contrôleur en Charge (CIC : Controller In Charge)<br />
actif à n’ importe quel autre périphérique ayant la capacité d’être un contrôleur. Un <strong>et</strong> un<br />
seul contrôleur du système est défini comme étant le Contrôleur Système global (System<br />
Controller) est sera désigné à l’instant initial comme Contrôleur en Charge.<br />
Controller Device #1<br />
Control,<br />
Talk, Listen<br />
Piggyback<br />
Cables<br />
Talk, Listen<br />
Device #n<br />
Talk, Listen<br />
Fig. 1.2 – Schématisation du bus IEEE 488.1<br />
Fig. 1.3 – Le chaînage des appareils IEEE 488.1 sur le bus s’ effectue sans disposition<br />
particulière.<br />
Les périphériques sont identifiés sur la chaîne via un adresse unique qu’ils doivent<br />
posséder lors de la mise en service de l’appareil. C<strong>et</strong>te adresse est usuellement imposée par<br />
l’expérimentateur au moyen du panneau frontal de l’appareil. Les adresses sont faites de<br />
deux parties : un adresse primaire, comprise entre 0 <strong>et</strong> 31 <strong>et</strong> une adresse secondaire utilisée<br />
pour adresser des éléments particuliers internes à l’appareil considéré. Par exemple,<br />
un appareil utilisé pour interfacer plusieurs ports série aura une adresse secondaire pour<br />
10
1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />
chaque canal de transmission contrôlé. Notons que bien que 31 adresses soient disponibles,<br />
GPIB limite à 14 le nombre d’appareils adressables sur un même bus à un moment donné.<br />
Lors de l’utilisation, certains appareils sont dédiés uniquement à écouter <strong>et</strong> d’autre à<br />
parler. On parle de modèle talker–listener. Ceci perm<strong>et</strong> de réaliser une communication sans<br />
nécessiter l’existence d’un contrôleur global pour tout le système : lorsqu’un appareil parle,<br />
tous les autres écoutent. Lorsqu’un appareil désire parler, il le signale sur le bus <strong>et</strong> devient<br />
l’unique Contrôleur en Charge du bus. Lorsqu’un instrument ém<strong>et</strong>, les messages peuvent<br />
êtres envoyés pour toute la ligne ou adressés à un appareil particulier.<br />
IEEE 488.1 : Interface électrique<br />
L’interface électrique présentée par les appareils compatibles GPIB repose sur un modèle<br />
de transmission des informations en parallèle. Les 16 lignes utiles sur le connecteur se divisent<br />
comme suit : 8 bits sont alloués à la transmission bidirectionnelle des informations,<br />
3 au handshake <strong>et</strong> 5 perm<strong>et</strong>tent la signalisation de l’état du bus <strong>et</strong> l’envoi d’évènements.<br />
C<strong>et</strong>te interface est largement décrite dans les documents [6], notons seulement qu’il est<br />
toujours possible de réinitialiser un périphérique ou le bus entier via une des lignes ainsi<br />
que détecter les erreurs éventuelles par le changement d’état de la ligne correspondante.<br />
IEEE 488.2 : Messages<br />
La normalisation IEEE 488.1 décrit un modèle de mise en oeuvre d’un bus d’interconnexion<br />
pour les instruments mais ne fournit aucune information quant à la normalisation<br />
des messages entre appareils. Certains détails, tels l’utilisation ou non du r<strong>et</strong>our à la ligne<br />
comme fin de communication, pouvait m<strong>et</strong>tre à mal l’interopérabilité voulue par GPIB. De<br />
même, les commandes les plus utiles ou les plus courantes (remise à zéro, extinction, identification,<strong>et</strong>c.<br />
) ont souvent été implantées par les constructeurs de manière non uniforme,<br />
m<strong>et</strong>tant ainsi au point un s<strong>et</strong> de commande propre à chaque compagnie, voire à chaque<br />
appareil. Afin de standardiser la mise au point de logiciels de contrôle, Tektronix a proposé<br />
en 1985 une formalisation standard qui fût adoptée en 1987 sous la norme IEEE 488.2.<br />
Le nouveau standard spécifie un format unique d’envoi de messages, un s<strong>et</strong> de commandes<br />
de base commun ainsi qu’une structure générique perm<strong>et</strong>tant d’interroger l’appareil sur<br />
son statut. Par exemple, l’envoi de la commande ’ *IDN ?’ indique à l’appareil qu’il doit<br />
renvoyer son identification.<br />
Conclusion<br />
L’utilisation d’un standard électrique <strong>et</strong> la définition d’un format commun d’envoi de<br />
messages ont permis la mise au point de bibliothèques de fonctions accélérant ainsi le<br />
développement de logiciels de contrôle. Ces bibliothèques existent en accès libre [2] <strong>et</strong> ont<br />
ainsi pu servir de base au contrôle des instruments utilisés pour la mise en oeuvre <strong>et</strong> la<br />
commande des appareils, selon un schéma décrit dans la seconde partie de l’ouvrage.<br />
11
1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />
1.2.2 La programmation visuelle<br />
l’idée même de développer des outils de programmation visuelle afin d’asservir des<br />
systèmes de mesure a été introduite en 1985 par la firme National Instruments. Son logiciel<br />
LabVIEW est actuellement largement utilisé par nombre de milieux académiques <strong>et</strong> industriels.<br />
Il a pour but de faciliter la mise en oeuvre de l’acquisition <strong>et</strong> du post-traitement des<br />
mesures prises en laboratoire. Il utilise à c<strong>et</strong>te fin les capacités graphiques des ordinateurs<br />
d’entrée de gamme actuels. Les interfaces graphiques qu’il m<strong>et</strong> en oeuvre sont basées sur<br />
un ensemble organisé de fenêtres <strong>et</strong> d’icônes interagissant entre elles afin de présenter à<br />
l’utilisateur une schématisation du processus expérimental ainsi qu’un certain nombre de<br />
grandeur de sortie.<br />
Fig. 1.4 – Une session LabVIEW standard présentant le résultat d’une acquisition sous<br />
forme d’un graphe<br />
12
1.2. LE CONTRÔLE LOCAL DES APPAREILS DE MESURE<br />
Sur la fenêtre de base d’une telle application se trouvent des représentations graphiques<br />
(icônes) de contrôleurs conventionnels (e.g. boutons, sélecteurs, potentiomètres)<br />
<strong>et</strong> d’indicateur de sortie (e.g. oscillogrammes, lumières, valeurs numériques) familiers des<br />
expérimentateurs. La présentation sélective <strong>et</strong> organisée des données <strong>et</strong> des commandes<br />
offre le double avantage de spécifier les interactions avec les appareils <strong>et</strong> de minimiser<br />
les informations présentées à l’utilisateur , le laissant ainsi se focaliser pleinement sur les<br />
éléments importants de la prise de mesure. l’utilisateur agit sur l’icône comme il agirait<br />
sur l’instrument réel, en particulier, l’utilisation de la souris perm<strong>et</strong> d’agir avec des composants<br />
symboliques de la même manière que les doigts de la main agiraient sur des boutons<br />
présents sur la face de l’appareil.<br />
l’utilisation d’un modèle de programmation graphique, que nous avons déjà évoqué,<br />
fut importé de l’informatique théorique afin de simplifier la conception des procédures<br />
d’expérimentation en se basant sur des concepts fortement orientés-obj<strong>et</strong>. Il est ainsi possible<br />
de décrire le processus de mesure sans devoir passer par un langage conventionnel<br />
de programmation procédurale. Dans un langage classique, les séquences d’opération sur<br />
les données doivent être spécifiées selon une syntaxe peu accessible <strong>et</strong> souvent réservée<br />
aux seuls informaticiens ou ingénieurs. En programmation visuelle, les données <strong>et</strong> les<br />
opérations sont représentées par des icônes. Le programme lui-même est obtenu en dessinant<br />
un diagramme procédural restant à un niveau fort conceptuel. Les noeuds de ce graphe<br />
sont des opérations de haut niveau, typiquement du traitement de signal, des opérations<br />
arithmétiques, mais ils peuvent également être associées à des opérations de visualisation<br />
des données ou à un contrôle des instruments de mesure. Chaque noeud a des connecteurs<br />
d’entrées <strong>et</strong> des connecteurs de sortie auxquels il suffit d’attacher les bons fils afin de<br />
réaliser une opération donnée.<br />
Les éléments de base étant trop simples pour la plupart des expérimentations, des<br />
diagrammes préétablis peuvent être importés aisément, menant ainsi à une conception modulaire<br />
des programmes <strong>et</strong> à la mise à disposition de larges bibliothèques d’instrumentation<br />
virtuelle appelées VI (Virtual Instrumentation element). Il existe des VI pour à peu près<br />
tous les instruments contrôlables depuis un PC. Ces VI servent donc bien souvent de gestionnaire<br />
de périphérique quasi-universels pour autant que l’instrument soit connectable<br />
au PC de contrôle via un connecteur de type RS-232, parallèle ou GPIB.<br />
Notons enfin que l’utilisation massive d’une telle technique a un impact psychologique<br />
important sur la catégorie d’utilisateurs amenés à utiliser ce produit : en eff<strong>et</strong>, relier un<br />
appareil à un affichage présentant le résultat de la mesure prise par c<strong>et</strong> appareil revient<br />
simplement à tirer un fil de la sortie de l’icône de l’appareil <strong>et</strong> à le connecter sur une borne<br />
d’entrée de l’icône représentant l’afficheur ; c’ est pourquoi les systèmes d’instrumentation<br />
virtuels sont devenus aujourd’hui un élément incontournable lorsqu’il s’ agit d’intégrer les<br />
techniques informatiques à la prise de mesure.<br />
13
1.3. INSTRUMENTATION DISTRIBU ÉE<br />
1.3 Instrumentation distribuée<br />
1.3.1 Introduction<br />
Tant dans la littérature [21] [7] [15] que dans la pratique, de nombreux exemples<br />
montrent l’utilisation des réseaux afin d’étendre les capacités de mesure <strong>et</strong> de traitement<br />
des systèmes de mesure exploités dans des environnements d’instrumentation virtuelle. Ce<br />
besoin découle d’un certain nombre de limitations inhérentes à l’utilisation des architectures<br />
m<strong>et</strong>tant en oeuvre des ordinateurs.<br />
La première limitation provient souvent du nombre de signaux qu’il faut acquérir simultanément.<br />
Il arrive souvent en eff<strong>et</strong> que le nombre d’entrées des cartes d’acquisition<br />
sur une même machine ne soit pas suffisant ou que la machine ne puisse fournir à elle<br />
seule la puissance nécessaire à la prise de mesure. l’utilisation du réseau perm<strong>et</strong> ici le<br />
déploiement de sous-systèmes de mesure, étendant ainsi la capacité de traitement de l’unité<br />
d’expérimentation. Des standards tels que Fastbus, GPIB, <strong>et</strong>c. ont été proposés il y a longtemps<br />
<strong>et</strong> sont maintenant utilisés à grande échelle dans l’industrie, tout particulièrement<br />
lorsque des systèmes <strong>et</strong> des processus complexes doivent pouvoir être vérifiés <strong>et</strong> contrôlés<br />
en temps réel.<br />
Une seconde restriction découle de l’aire d’opération accessible par une même unité de<br />
traitement. Il suffit de penser par exemple aux fabriques chimiques ou pétrolières dont les<br />
différents processus sont disséminés sur une superficie élevée <strong>et</strong> présentant un besoin de<br />
sécurité globale important. Quel que soit l’environnement, les senseurs <strong>et</strong> les cartes d’acquisition<br />
ne peuvent être situés trop loin d’une source, sous peine de voir le signal entaché de<br />
fortes perturbations. De même, le contrôle local d’appareil impose une distance maximale<br />
entre l’appareil <strong>et</strong> l’unité en charge du traitement : typiquement 20 mètres pour GPIB.<br />
Si le signal doit être acquis sur une source distante, l’exploitation d’un réseau perm<strong>et</strong> de<br />
rapprocher les instruments, les sources <strong>et</strong> les sous-systèmes d’expérimentation, garantissant<br />
ainsi une qualité optimale pour le signal acquis de la source.<br />
Enfin, une troisième limitation est liée au traitement qui sera effectué sur le signal.<br />
Plus la complexité de calcul de l’algorithme de post-traitement sera élevée, plus grandes<br />
seront les ressources prélevées sur le PC, rendant éventuellement impossible tout contrôle<br />
en temps réel. Pour palier à cela, des cartes de traitement de signal (DSP) sont adjointes<br />
au processeur de base, augmentant ainsi le coût ou la gamme de processeur requis. Une<br />
autre solution consiste à utiliser massivement les machines présentes sur le réseau pour<br />
distribuer les besoins de calcul <strong>et</strong> optimiser l’utilisation des possibilité de traitement local.<br />
La promiscuité des interconnexions rend les communications entre noeuds de mesure<br />
quasi instantanées. Pour un réseau dédié uniquement à l’acquisition, le trafic global généré<br />
sur un réseau commercial de faible coût (e.g. 10Mbps) est assez peu élevé, <strong>et</strong> il en résulte<br />
que pratiquement aucun r<strong>et</strong>ard n’ est introduit suite à une éventuelle contention.<br />
14
1.3. INSTRUMENTATION DISTRIBU ÉE<br />
1.3.2 IEEE 1451<br />
IEEE 1451 [15] est une nouvelle norme dont le but est de fournir un cadre cohérent <strong>et</strong><br />
ouvert perm<strong>et</strong>tant la mise en relation d’appareillages de faible capacité mémoire <strong>et</strong> dont<br />
les possibilités se réduisent à opérer des prises de mesure en un point donné. La philosophie<br />
générale du développement de ce standard repose sur la création d’une volonté d’uniformiser<br />
les interfaces des appareils <strong>et</strong> ce en ajoutant, de manière incrémentale, des capacités<br />
à celles déjà existantes, tout en conservant le coût de la transition accessible à tous les<br />
vendeurs de l’industrie. Le standard envisagé propose également l’indépendance vis-à-vis<br />
de la couche réseau mise en oeuvre ainsi que l’indépendance vis-à-vis du type de microprocesseur<br />
embarqué sur le système.<br />
La famille 1451P consiste en la proposition <strong>et</strong> le développement de 4 standards :<br />
1. IEEE 1451.1, N<strong>et</strong>work Capable Application Processor (NCAP)<br />
2. IEEE 1451.2, Transducer to Microprocessor and Transducer Electronic Data She<strong>et</strong><br />
(TEDS) Format<br />
3. IEEE 1451.3, Digital Communication and Transducer Electronic Data She<strong>et</strong> (TEDS)<br />
Format for Distributed Multidrop Systems<br />
4. IEEE 1451.4, Mixed Mode Communication Protocols and TEDS Formats<br />
La figure 1.5 présente les différents composants présents dans un système de transducteurs<br />
compatibles avec la spécification que nous venons d’évoquer.<br />
Fig. 1.5 – Architecture d’un système de transducteurs IEEE 1451.<br />
Le premier groupe de travail (1451.1) a été chargé de définir un modèle d’information<br />
pour la mise en réseau de transducteurs intelligents. Il définit également les spécifications<br />
15
1.3. INSTRUMENTATION DISTRIBU ÉE<br />
de l’interface logique. Le second groupe a défini le TEDS ainsi que l’interface <strong>et</strong> les protocoles<br />
de communication à m<strong>et</strong>tre en oeuvre afin de perm<strong>et</strong>tre la communication entre le<br />
transducteur <strong>et</strong> le contrôleur responsable de la prise en charge de la composante réseau. Le<br />
TEDS est stocké dans une EEPROM 1 <strong>et</strong> contient des champs décrivant complètement le<br />
type, les opérations accessibles, la calibration <strong>et</strong> les attributs secondaires du transducteur.<br />
La taille typique que peut représenter ces informations en mémoire est de l’ordre de 256<br />
oct<strong>et</strong>s. LE TEDS doit être physiquement relié au transducteur, réalisant ainsi un ensemble<br />
toujours cohérent <strong>et</strong> rendant donc conceptuellement l’auto-identification sur le réseau possible,<br />
sans risque d’erreur possible ; ce qui aurait été plus caduque si un tiers participant<br />
avait à se charger de c<strong>et</strong>te opération ou si un opérateur devait manuellement définir les<br />
propriétés de l’appareil à chaque mise en service. Le fait également de considérer que ce<br />
bloc est séparé de celui en charge de la couche réseau perm<strong>et</strong> le remplacement ou la mise<br />
à jour de l’instrument par le simple remplacement du transducteur <strong>et</strong> de son TEDS associé.<br />
Cependant, il est parfois peu aisé, voire impossible, de déployer en un même lieu le<br />
TEDS <strong>et</strong> le senseur proprement dit : c’ est pourquoi le document 1451.3 précise-t-il comment<br />
on peut connecter en un même noeud des transducteurs physiques multiples <strong>et</strong> le<br />
TEDS de description associé. C<strong>et</strong>te configuration perm<strong>et</strong> de réaliser un ”micro-réseau”<br />
interne au transducteur, tout en conservant une même interface externe. Enfin, nous avons<br />
supposé jusqu’à présent que les communications externes tant qu’internes se passent sur<br />
base d’une transmission digitale. Certains groupes d’appareils (piézoélectriques, capteurs<br />
de contraintes,<strong>et</strong>c.) tirent un meilleur parti de la transmission interne de l’information<br />
sous forme de signaux analogiques. Ce besoin a induit la formation d’une dernière recommandation,<br />
IEEE 1451.4, relative à la standardisation de l’envoi, en interne, de signaux<br />
analogiques avant conversion en digital pour présentation sur le réseau.<br />
La taille fort réduite de l’EEPROM contenant la description du TEDS ainsi que l’interopérabilité<br />
voulues ont poussé le groupe de standardisation à évoquer l’utilisation de<br />
langages semi-structurés ou peu structurés, comme XML, afin d’offrir une flexibilité, une<br />
interopérabilité maximales lors de l’implantation des descriptions des fonctions standards<br />
ou plus spécifiques des capteurs. Notons qu’actuellement aucune forme de message standard<br />
n’ a été avancée comme finale, seule l’existence de messages sous forme de texte semble<br />
avoir la préférence du groupe de travail dévolu à c<strong>et</strong>te tâche.<br />
1.3.3 GPIB-En<strong>et</strong><br />
Une solution proposée pour le contrôle réseau des instruments de mesure est l’utilisation<br />
d’une extension de GPIB connue sous le nom de GPIB-En<strong>et</strong>. GPIB-En<strong>et</strong> est un appareillage<br />
électronique portable se connectant sur le réseau <strong>et</strong> perm<strong>et</strong>tant de prendre en charge jusqu’à<br />
14 appareils compatibles GPIB. La Figure 1.6 illustre l’architecture typique des réseaux<br />
hybrides GPIB / Ethern<strong>et</strong>.<br />
1 Electricly Erasable Read Only Memory<br />
16
1.3. INSTRUMENTATION DISTRIBU ÉE<br />
Fig. 1.6 – Architecture <strong>et</strong> déploiement typique d’une installation utilisant GPIB-En<strong>et</strong>. Le<br />
réseau se subdivise en 2 composantes principales : le Thin Ethern<strong>et</strong> global, à large rayon<br />
d’action, <strong>et</strong> les bus locaux GPIB qui forment les noeuds du réseau global.<br />
GPIB-En<strong>et</strong> se déploie typiquement sur des LAN ou des WAN via une interface 10Base-<br />
T Thin Ethern<strong>et</strong> ou 100Base-T. l’exploitation du protocole IPX est également possible,<br />
bien que dans la pratique, seul le protocole IP soit utilisé. Chaque concentrateur GPIB<br />
possède donc une adresse unique qui doit être fixée dès la mise sur réseau. Pour se faire<br />
deux scénarios sont possibles.<br />
Le premier scénario de configuration consiste en l’utilisation d’un ordinateur tiers. Celuici<br />
adressera l’instrument au moyen des adresses MAC qu’il sait être présentes à un moment<br />
donné sur le réseau. Le PC procède par une approche d’”essais erreur” jusqu’à ce qu’il<br />
trouve un appareil valide. Ayant reconnu les instruments disponibles sur le sous-réseau<br />
local, il peut communiquer avec eux au moyen d’un protocole de bas niveau <strong>et</strong> imposer<br />
une configuration reflétant la structure du réseau local : adresse IP, passerelle, <strong>et</strong>c.<br />
Une deuxième approche consiste à laisser l’appareil interroger un serveur DHCP présent<br />
sur le sous-réseau <strong>et</strong> laisser celui-ci lui fournir des données valides perm<strong>et</strong>tant l’autoconfiguration.<br />
La technique DHCP a été mise au point afin d’apporter une solution au<br />
problème de la configuration des paramètres réseau d’une machine mise soudainement<br />
en connexion sur ce dernier. La machine apparaissant ém<strong>et</strong> des paqu<strong>et</strong>s de propagation<br />
(broadcast pack<strong>et</strong>s) signalant sa présence <strong>et</strong> comportant une information faisant part de<br />
17
1.3. INSTRUMENTATION DISTRIBU ÉE<br />
son souhait de bénéficier de l’aide d’un serveur DHCP pour se configurer. Si une telle machine<br />
est présente à ce moment, elle établira, en fonction de règles de décision quant à la<br />
gestion du lot d’adresses disponibles, une liste de paramètres qu’elle renverra à la machine<br />
demandeuse. Ces informations sont notamment : une adresse IP, celle de la passerelle du<br />
réseau, l’adresse du serveur de nom utilisable, le masque de sous-réseau, ainsi qu’un temps<br />
de prêt au bout duquel il faudra recontacter le DHCP afin de renouveler les informations.<br />
La combinaison hybride ainsi obtenue en m<strong>et</strong>tant en oeuvre des noeuds GPIB-En<strong>et</strong> sur<br />
un réseau de type Thin Ethern<strong>et</strong> perm<strong>et</strong> des débits pratiques d’information maximum de<br />
l’ordre de 800 kB/s depuis un élément de la chaîne GPIB jusqu’à un autre noeud réseau.<br />
Un tel débit est relativement équivalent à ce que l’on peut observer entre un appareil <strong>et</strong><br />
une carte dédiée d’une chaîne GPIB purement locale. Il apparaît donc que l’utilisation<br />
des concentrateurs GPIB-En<strong>et</strong> est totalement transparente pour autant que le réseau soit<br />
fort peu sollicité par d’autres types d’activité, non liées à la prise de mesure. Il est donc<br />
évident qu’il y a un manque de maîtrise du débit maximal d’information qui va pouvoir<br />
être acquis en temps réel depuis la source. L’ampleur du réseau local ainsi que son architecture<br />
conditionneront grandement la disposition des appareils <strong>et</strong> l’étendue maximale utile<br />
de l’expérimentation.<br />
Notons enfin qu’aucun mécanisme ne nous perm<strong>et</strong> de garantir l’état de bon fonctionnement<br />
des éléments du réseau GPIB-En<strong>et</strong>. Seuls des mécanismes logiciels supplémentaires,<br />
intégrés par dessus la couche matérielle, perm<strong>et</strong>traient de fournir à tout moment des<br />
renseignements relatifs au bon état de marche des appareils. C<strong>et</strong>te solution générant du<br />
trafic supplémentaire, croissant exponentiellement avec le nombre de noeuds à contrôler,<br />
réduit d’autant plus la largeur de bande passante disponible au transport de l’information,<br />
détériorant la qualité globale du système.<br />
1.3.4 Limitations<br />
l’utilisation de réseaux d’instruments, quoique résolvant un nombre non négligeable de<br />
problèmes soulevés par l’instrumentation locale <strong>et</strong> intégrant efficacement c<strong>et</strong>te nouvelle dimension<br />
de l’informatique que sont les intran<strong>et</strong>s <strong>et</strong> l’Intern<strong>et</strong>, fait apparaître des problèmes<br />
de mise en oeuvre spécifiques. En eff<strong>et</strong>, la latence fort faible présentée par les réseaux locaux<br />
peut s’ avérer critique lors de la généralisation de la mise en oeuvre d’expériences<br />
d’instrumentation à distance telles que celles décrites dans [21], [5] <strong>et</strong> [16]. C<strong>et</strong>te utilisation<br />
des possibilités de l’Intern<strong>et</strong> n’est en fait qu’une généralisation ou plutôt une globalisation<br />
des techniques sous-tendant l’instrumentation locale. Lors d’une telle expérience, la latence<br />
induite par le transfert de l’information ainsi que l’apparition asynchrone des résultats prohibent<br />
la conception d’un système de mesure en temps de réel. Une solution efficace [17]<br />
consiste à segmenter l’installation en cellules de traitement <strong>et</strong> à assigner le contrôle de chacune<br />
de celles-ci à une unité de traitement spécialisée. Ces unités servent d’interface avec<br />
les éléments distants du système <strong>et</strong> sont à même de prendre en charge les décisions <strong>et</strong> une<br />
partie du post-traitement, rendant ainsi le contrôle en temps réel possible dans chacune des<br />
18
1.3. INSTRUMENTATION DISTRIBU ÉE<br />
cellules <strong>et</strong> préparant les données pour envoi vers les machines lointaines. Il n’ empêche que<br />
les données arrivant des contrôleurs de cellules n’ en restent pas moins peu cohérentes dans<br />
le temps <strong>et</strong> donc peu exploitables à distance. On perçoit donc bien ici le besoin de disposer<br />
d’une composante logicielle forte dans les cellules de prise de mesure, composante logicielle<br />
qui serait éventuellement ”induite” localement pour les seuls besoins de l’expérimentation.<br />
L’utilisation tant d’un réseau local que global présuppose que chaque acteur prenant<br />
part à l’expérience est à même de s’ identifier sur ce réseau. Ceci signifie, par exemple<br />
pour un réseau TCP/IP, que chaque machine doit disposer d’une adresse IP unique mais<br />
également avoir connaissance du routeur local perm<strong>et</strong>tant le branchement le cas échéant<br />
au réseau global. De plus, le contrôle des expériences par réseau suppose une géométrie<br />
relativement statique au vu du manque d’interopérabilité des appareils. En eff<strong>et</strong>, chaque<br />
appareil pris en charge par un ordinateur aura nécessité l’installation <strong>et</strong> la configuration<br />
d’un gestionnaire propriétaire, quel que soit le système actuel utilisé, e.g. GPIB-En<strong>et</strong>. Modifier<br />
un appareil, changer un voltmètre par un autre provenant d’un constructeur différent,<br />
ou déplacer les appareils impose de réévaluer une partie non négligeable de la configuration.<br />
La robustesse du système de mesure est un élément également souvent peu ou pas<br />
intégré à l’architecture de l’expérimentation. Il faut donc parallèlement m<strong>et</strong>tre en oeuvre<br />
un ensemble de techniques perm<strong>et</strong>tant l’évaluation de l’état courant des appareils. Un tel<br />
système sera donc forcément peu réutilisable <strong>et</strong> interopérable avec d’autres systèmes de<br />
surveillance du bus, puisqu’il s’ agit de m<strong>et</strong>tre en oeuvre des solutions commerciales ou<br />
développées sur mesure.<br />
Enfin, le désir de faire communiquer des instruments <strong>et</strong> des ordinateurs selon un schéma<br />
homogène <strong>et</strong> portable impose l’utilisation de protocoles standardisés qui présentent le<br />
double désavantage de ne pouvoir évoluer dans le temps <strong>et</strong> de ne pas tirer bénéfice des<br />
techniques de développement actuelles, notamment l’utilisation de langages de très haut<br />
niveau orientés-obj<strong>et</strong> <strong>et</strong> de techniques de mise en oeuvre d’obj<strong>et</strong>s distribués.<br />
Constituer des points de mesures mobiles, dynamiques voire collaboratifs est donc actuellement<br />
fort peu aisé, voire impossible au vu de ces limitations.<br />
19
Chapitre 2<br />
CORBA<br />
Sommaire<br />
2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
2.2 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
2.2.1 IDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />
2.2.2 l’ORB <strong>et</strong> l’IIOP . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />
2.2.3 Le mécanisme de marshallisation . . . . . . . . . . . . . . . . . . 25<br />
2.2.4 Les Obj<strong>et</strong>s standards . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
2.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
Nous détaillerons brièvement dans ce chapitre les concepts <strong>et</strong> les mécanismes mis en<br />
oeuvre par la Common Object Request Broker Architecture (CORBA) afin de mieux la<br />
positionner par rapport à Jini. Nous présentons également dans le chapitre cinq, lors de la<br />
justification du choix de l’architecture utilisée pour la <strong>réalisation</strong> du système d’instrumentation<br />
distribuée, une comparaison des mécanismes utilisés par CORBA d’une part <strong>et</strong> la<br />
combinaison RMI/Jini d’autre part.<br />
2.1 Introduction<br />
Les systèmes d’obj<strong>et</strong>s distribués sont actuellement incontournables pour le développement<br />
<strong>et</strong> le déploiement de logiciels par dessus une couche réseau de plus en plus importante.<br />
Leurs avantages découlent de l’utilisation de langages de programmation orientés obj<strong>et</strong> :<br />
ces systèmes en tirent une réusabilité de code accrue, ce qui était quasi impossible dans<br />
une logique fortement protocolisée, mais également une transparence complète quant à la<br />
localisation des obj<strong>et</strong>s lors du déploiement. Un système distribué développé en un langage<br />
de haut niveau offre l’avantage d’être,à peu de choses près, conçu comme s’ il devait être<br />
20
2.2. ARCHITECTURE<br />
exécuté en local. De nombreux procédés existent afin de m<strong>et</strong>tre en oeuvre des obj<strong>et</strong>s distribués<br />
<strong>et</strong> le plus connu de tous est sans nul doute CORBA, la solution de prime abord la<br />
plus efficace <strong>et</strong> la plus standardisée à ce jour.<br />
CORBA est avant tout une norme [25] [27], c’ est-à-dire un ensemble de spécifications<br />
<strong>et</strong> de recommandations émises par l’Object Management Group (OMG) [4]. l’OMG est un<br />
groupe de travail indépendant au sein duquel siègent plus de sept cent partenaires issus<br />
de tous horizons : développeurs de logiciels, fabricants de matériel <strong>et</strong> grands utilisateurs.<br />
l’objectif de CORBA est avant tout d’assurer une interopérabilité entre des applications<br />
orientées obj<strong>et</strong> hétérogènes tant du point du vue de leur langage de développement que<br />
du système d’exploitation sur lesquels celles-ci seront amenées à être déployées. Ces applications<br />
reposent sur un modèle de mise en relation d’obj<strong>et</strong>s distribués sur un réseau <strong>et</strong><br />
interopérant entre eux de manière totalement transparente du point de vue de l’utilisateur.<br />
Pour parvenir à ses fins, CORBA définit <strong>et</strong> implémente plusieurs concepts. Tout d’abord<br />
un modèle de communication entre les obj<strong>et</strong>s distribués à travers le réseau. Ensuite, elle<br />
définit une couche de transport commune à tous les logiciels : l’ORB (Object Request Broker).<br />
l’OMG m<strong>et</strong> également à disposition un langage de description des interfaces présentées<br />
par chacun des acteurs du bus d’obj<strong>et</strong>s distribués : l’IDL (Interface Definition Language).<br />
Enfin, des services <strong>et</strong> des obj<strong>et</strong>s élémentaires sont introduits afin de faciliter le déploiement<br />
<strong>et</strong> l’utilisation de CORBA : il s’ agit, entre autres, des Common Object Services, des<br />
CORBA Facilities <strong>et</strong> des Domain Interfaces.<br />
Chacun des éléments formant le bus est simplement spécifié par l’OMG <strong>et</strong> celle-ci n’<br />
impose donc aucun langage ni aucune plateforme lors de l’implantation <strong>et</strong> du déploiement<br />
final. La plupart des langages actuels sont à même d’exploiter les standards de l’OMG <strong>et</strong><br />
bon nombre de constructeurs ont développé leur ORB, offrant ainsi une diversité quant<br />
aux possibilités accessoires que chacune des implantations offre, mais autorisant également<br />
la <strong>réalisation</strong> d’application hautement interopérables. Seule la fonction <strong>et</strong> la nature même<br />
des applications développées forcera le choix de tel ou tel autre logiciel CORBA.<br />
2.2 Architecture<br />
Les interactions entre obj<strong>et</strong>s sur un bus CORBA suivent un modèle classique client–<br />
serveur. Les applications clientes ém<strong>et</strong>tent des requêtes vers les obj<strong>et</strong>s serveurs, ceux-ci les<br />
exécutent de leur côté <strong>et</strong> enfin ils renvoient le résultat éventuel à l’appelant. Ce modèle<br />
présuppose que la méthode invoquée <strong>et</strong> implantée dans le serveur soit connue du client<br />
<strong>et</strong> que celui-ci possède tout le matériel nécessaire à la prise de contact avec le serveur <strong>et</strong><br />
l’envoi des paramètres. A c<strong>et</strong> eff<strong>et</strong>, quatre éléments importants sont mis en jeu :<br />
– l’Interface reprenant toutes méthodes accessibles sur l’obj<strong>et</strong> distant. C<strong>et</strong>te interface<br />
est implantée par le serveur <strong>et</strong> connue du client. L’IDL offre une formalisation de<br />
la définition de c<strong>et</strong>te interface, de manière indépendante du langage mais selon une<br />
21
2.2. ARCHITECTURE<br />
structure fortement inspirée de l’orienté obj<strong>et</strong>.<br />
– Le Stub conservé par le client. Il est obligatoirement cohérent avec l’interface du<br />
serveur puisqu’il s’ agit de la partie d’un obj<strong>et</strong> délégué par le serveur <strong>et</strong> à même de<br />
prendre en charge de manière totalement transparente la communication avec l’obj<strong>et</strong><br />
lointain.<br />
– Le Skel<strong>et</strong>on situé côté serveur. Il s’ agit ici de l’implantation proprement dite des<br />
méthodes déclarées au moyen de l’interface <strong>et</strong> activées à travers le stub.<br />
– l’ORB qui est la couche de transport des requêtes <strong>et</strong> des références sur le bus CORBA.<br />
Il s’ agit d’un middleware situé entre l’application <strong>et</strong> la plateforme. Celui-ci doit donc<br />
être implanté pour chacune des plateformes existantes.<br />
La figure 2.1 indique le positionnement relatif de chacun des éléments d’une architecture<br />
CORBA de base. L’IIOP (Intern<strong>et</strong> Inter Orb Protocol) perm<strong>et</strong> de connecter deux ORB<br />
de vendeurs éventuellement différents à travers l’Intern<strong>et</strong>. Il est important de noter ici que<br />
les flèches ne représentent pas un mouvement de données du client vers le serveur, mais<br />
modélisant le jeu de pointeurs qui perm<strong>et</strong> de référencer chaque obj<strong>et</strong> en CORBA. En eff<strong>et</strong>,<br />
CORBA fait abondamment usage de références distantes ou locales tant pour les obj<strong>et</strong>s<br />
serveurs que pour les arguments des méthodes. Ces arguments sont donc toujours passés<br />
par référence <strong>et</strong> non par valeur, bien que ceci semble changer dans les versions de CORBA<br />
ultérieures à la deuxième.<br />
2.2.1 IDL<br />
Client Server<br />
Server Object Reference<br />
g<strong>et</strong>Voltage() m<strong>et</strong>hod<br />
ORB ORB<br />
IIOP<br />
Server Object<br />
Implémentation<br />
Fig. 2.1 – Éléments de base d’une architecture CORBA<br />
Le langage de définition d’interface est un élément clef du bus de distribution d’obj<strong>et</strong>s<br />
CORBA. IDL est utilisé afin de décrire formellement chacun des obj<strong>et</strong>s selon des conventions<br />
non liées au langage final utilisé pour l’implantation. Ces interfaces seront ensuite<br />
développées au moyen d’un outil approprié afin de fournir un squel<strong>et</strong>te d’application pou-<br />
22
2.2. ARCHITECTURE<br />
vant servir de base à la <strong>réalisation</strong> concrète du système distribué, aussi bien client que<br />
serveur. De plus, IDL masque complètement les processus de communication entre obj<strong>et</strong>s,<br />
rendant ainsi le développement de l’architecture client-serveur totalement transparente. Il<br />
s’agit donc ici de définir ce que l’obj<strong>et</strong> est à même de proposer comme service en le situant<br />
dans une hiérarchie de services ainsi qu’en énumérant les méthodes qu’il m<strong>et</strong> à disposition.<br />
L’exemple suivant présente une définition réalisé au moyen de IDL. Il s’agit ici de créer un<br />
module, semblable à la notion de package en Java, contenant un obj<strong>et</strong> ”Amm<strong>et</strong>er” <strong>et</strong> un<br />
obj<strong>et</strong> ”Voltm<strong>et</strong>er”. Chacun de ces obj<strong>et</strong>s implante des méthodes qui seront accessibles via<br />
le Stub généré par les outils de compilation spécifique à chaque langage.<br />
module TestModule –<br />
interface Ammm<strong>et</strong>er<br />
–<br />
void res<strong>et</strong>();<br />
float g<strong>et</strong>Current();<br />
˝;<br />
interface Voltm<strong>et</strong>er<br />
–<br />
void res<strong>et</strong>();<br />
float g<strong>et</strong>Voltage();<br />
˝;<br />
˝;<br />
Il est important ici de noter c<strong>et</strong>te structure fortement hiérarchisée de packages disposés<br />
selon un arbre. C<strong>et</strong> élément sera fondamental dans la comparaison que nous offrons de<br />
CORBA vs. JINI dans le chapitre 5.<br />
Le langage IDL propose également un mécanisme d’héritage entre <strong>et</strong> depuis les interfaces.<br />
C<strong>et</strong> héritage peut être simple, multiple ou répété. La notion d’héritage répété a été<br />
introduite en raison de la possibilité d’implanter un héritage multiple tout en respectant la<br />
contrainte de non répétition des noms. C<strong>et</strong>te contrainte spécifie qu’au sein d’un même module,<br />
la surcharge – c’est-à-dire définir plusieurs méthodes dont la signature est différente<br />
mais dont le nom est identique – est interdite.<br />
2.2.2 l’ORB <strong>et</strong> l’IIOP<br />
L’ORB est le composant central de la répartition des obj<strong>et</strong>s sur le bus CORBA. Il assure<br />
le transport des requêtes entre les clients <strong>et</strong> les serveurs ou, pour être plus précis, entre les<br />
stubs des clients <strong>et</strong> les implantations correspondantes présentes dans les skel<strong>et</strong>on des obj<strong>et</strong>s<br />
serveurs. Il s’agit d’un middleware qui se déploie entre la couche application proprement<br />
dite où vivent les obj<strong>et</strong>s <strong>et</strong> le système d’exploitation qui gère les fonctionnalités réseau du<br />
23
2.2. ARCHITECTURE<br />
système local. Son existence marque la volonté de s’abstraire de l’hétérogénéité qui existe<br />
entre différentes implantations d’un même obj<strong>et</strong>, hétérogénéité qui puise sa source dans le<br />
choix du langage de programmation, du système d’exploitation r<strong>et</strong>enu pour le déploiement<br />
final ou encore dans le formalisme de représentation de données des machines. Les stubs<br />
désireux d’effectuer une requête l’adressent premièrement à l’ORB qui se charge de la poursuivre<br />
jusqu’au skel<strong>et</strong>on correspondant. Du point de vue du serveur, l’ORB accueille les<br />
invocations distantes <strong>et</strong> les traduit en des appels de méthodes sur des obj<strong>et</strong>s locaux.<br />
L’ORB comporte neuf blocs fonctionnels, présentés à la figure 2.2, perm<strong>et</strong>tant de réaliser<br />
pratiquement les interconnexions nécessaires entre obj<strong>et</strong>s. Afin de ne pas entrer dans les<br />
détails du fonctionnement de l’ORB, seuls 3 éléments fondamentaux pour la suite de l’exposé<br />
seront abordés ici.<br />
Fig. 2.2 – Structure de l’ORB. Les référentiels des interfaces <strong>et</strong> des implantations gardent<br />
trace des obj<strong>et</strong>s mis à disposition sur le bus.<br />
L’interface d’invocation statique<br />
L’interface d’invocation statique est le résultat de la projection des descriptions IDL<br />
dans le langage d’implantation. A travers la SII (Statical Invocation Interface), les stubs<br />
clients peuvent invoquer les méthodes sur les obj<strong>et</strong>s distants de manière totalement transparente<br />
: la SII se charge du transfert de l’invocation à l’obj<strong>et</strong> distant via la couche de communication<br />
réseau constituée par le coeur de l’ORB (Core ORB). Son principal désavantage<br />
est sa staticité intrinsèque : le stub doit impérativement être fourni au programme client,<br />
ce qui implique que tout changement dans le contexte de déploiement du client (langage,<br />
24
2.2. ARCHITECTURE<br />
hardware) requiert la génération d’un nouveau stub, compatible avec la nouvelle configuration.<br />
Le référentiel des interfaces<br />
Le référentiel des interfaces garde trace des obj<strong>et</strong>s déployés sur l’ORB en utilisant la<br />
description de l’Interface Definition Language. C<strong>et</strong>te base de données contient les modules,<br />
méthodes, attributs, exceptions, types de données accessibles <strong>et</strong> facilite ainsi l’introspection<br />
de l’ORB afin de perm<strong>et</strong>tre pratiquement le mise en relation des références des stubs clients<br />
<strong>et</strong> de leur skel<strong>et</strong>on correspondant.<br />
L’interface d’invocation dynamique<br />
L’interface d’invocation dynamique offre une plus grande souplesse dans l’envoi de<br />
requêtes vers les serveurs. Son mécanisme est plus flexible <strong>et</strong> consiste à localiser dans<br />
un premier temps l’obj<strong>et</strong> distant désiré en spécifiant le nom de la méthode devant être<br />
invoquée, les paramètres désirés ainsi que la classe d’obj<strong>et</strong> que l’on désire ainsi adresser.<br />
Suite à c<strong>et</strong>te requête, <strong>et</strong> pour peu qu’un tel obj<strong>et</strong> existe, un stub <strong>et</strong> un skel<strong>et</strong>on sont générés<br />
respectivement du côté client <strong>et</strong> du côté serveur, perm<strong>et</strong>tant l’appel de méthodes distantes,<br />
au moyen de mécanismes similaires à ceux d’une invocation statique.<br />
Chaque implantation de l’ORB, avec plus ou moins de possibilités annexes, est laissée<br />
à la discrétion des vendeurs. Afin de rendre possible l’exploitation de CORBA sur des<br />
réseaux de grande échelle ou dans des environnements où sont déployés des implantations<br />
différentes de l’ORB, l’OMG définit un certain nombre d’adapteurs inter-ORB dont le plus<br />
important est IIOP : Intern<strong>et</strong> Inter-Orb Protocol. IIOP définit simplement comment un<br />
ORB est à même d’échanger des informations avec un autre ORB.<br />
2.2.3 Le mécanisme de marshallisation<br />
L’activation de méthodes distantes suppose la possibilité de fournir à ces méthodes <strong>et</strong><br />
de recevoir de celles-ci des obj<strong>et</strong>s. IDL définit deux modes de transfert des obj<strong>et</strong>s : IN<br />
<strong>et</strong> OUT, un obj<strong>et</strong> IN allant du stub vers le skel<strong>et</strong>on <strong>et</strong> un obj<strong>et</strong> OUT représentant une<br />
valeur de r<strong>et</strong>our. Ce transfert d’obj<strong>et</strong>, totalement transparent pour l’utilisateur, s’effectue<br />
au moyen d’un mécanisme dit de marshallisation.<br />
25
2.2. ARCHITECTURE<br />
La marshallisation est le procédé par lequel l’état d’un obj<strong>et</strong> ou un obj<strong>et</strong> même est<br />
transformé afin d’être transféré sur le bus d’obj<strong>et</strong> distribué. Dans le cas de CORBA, les<br />
obj<strong>et</strong>s arguments ne pouvant être passés par valeur, l’ORB devra gérer un jeu de références<br />
perm<strong>et</strong>tant d’un côté de la transaction d’énumérer les valeurs des attributs d’un obj<strong>et</strong> <strong>et</strong>,<br />
à l’autre bout du transport, de reconstituer un obj<strong>et</strong> cohérent à l’interface IDL de l’obj<strong>et</strong><br />
marshallisé <strong>et</strong> présentant le même état, à savoir : les mêmes attributs. L’obj<strong>et</strong> transféré<br />
n’est pas réellement transporté dans son intégralité, comme c’est le cas, nous le verrons<br />
plus loin, lors de l’utilisation du modèle RMI de Java.<br />
La marshallisation n’induit donc pas un vrai polymorphisme en ce sens que si un obj<strong>et</strong><br />
dérivé d’une classe donnée est transféré sur un canal du bus dévolu au transport d’un<br />
membre de la classe mère ; il commencera le processus comme obj<strong>et</strong> dérivé de la classe<br />
mère <strong>et</strong> sera reconstitué plus tard comme un obj<strong>et</strong> membre de la classe mère. En eff<strong>et</strong>,<br />
l’autre côté du canal est à même de reconstruire des obj<strong>et</strong>s de la classe mère, au vu de sa<br />
spécification IDL, <strong>et</strong> n’ aucune connaissance de ce qu’il s’agit en fait d’un obj<strong>et</strong> dérivé qui<br />
a en réalité transité sur l’ORB.<br />
Fig. 2.3 – CORBA ne perm<strong>et</strong> pas l’exploitation d’un vrai polymorphisme.<br />
Pour prendre un exemple plus ludique <strong>et</strong> plus simple (Fig. 2.3), imaginons une classe<br />
Chat, dérivant d’Animal, <strong>et</strong> qu’il existe un obj<strong>et</strong> serveur dont nous désirons activer une<br />
méthode. C<strong>et</strong>te méthode accepte en argument un membre de la classe Animal. Si nous<br />
envoyons un Chat, ce qui est cohérent du point de vue de l’IDL de la classe distante, le<br />
serveur recevra en fait, après reconstitution, un Animal car le processus de marshallisation<br />
examinera les attributs du Chat, vu comme un Animal, pour reconstituer un Animal du<br />
côté serveur, dégradant ainsi l’information. Ce point de vue peut se justifier par le fait que<br />
la spécialisation en Chat de l’obj<strong>et</strong> Animal peut n’être connu que par le client seul.<br />
26
2.2. ARCHITECTURE<br />
Nous verrons que ceci n’est pas du tout le cas de RMI, <strong>et</strong> donc de Jini, car un mécanisme<br />
supplémentaire, appelé code mobile, perm<strong>et</strong> la mise en commun des classes entre le client<br />
<strong>et</strong> le serveur, y compris celles qui ne sont connus que par un de deux protagonistes. Dans<br />
ce cas, l’envoi d’une sous-classe perm<strong>et</strong>tra de récupérer un membre de c<strong>et</strong>te sous-classe en<br />
bout de marshallisation même si à l’origine seule la super-classe est connue du serveur.<br />
2.2.4 Les Obj<strong>et</strong>s standards<br />
L’OMG a spécifié un ensemble d’obj<strong>et</strong>s standardisés à même d’être déployés sur le bus<br />
CORBA de manière à offrir des services spécifiques à de nombreux scénarios d’utilisation.<br />
Il s’agit d’abstractions aux fonctions systèmes de base, telles que la dénomination (Naming<br />
Service), la persistance des obj<strong>et</strong>s, le cycle de vie, la sécurité, la gestion des licences d’utilisation<br />
des obj<strong>et</strong>s,les événements, <strong>et</strong>c. L’ensemble formé de ces services ne sont pas toujours<br />
implémentes de manière complète par les ORB disponibles actuellement. Dans le cadre de<br />
la <strong>réalisation</strong> de réseaux de terrains <strong>et</strong> d’instrumentation distribuée, seuls trois services importants<br />
sont à même de remplir des fonctionnalités clés dans les processus d’interaction<br />
<strong>et</strong> de coopération intervenant entre les appareils d’une part <strong>et</strong> les clients logiciels d’autre<br />
part. Il s’agit des Naming Service, Trader Service <strong>et</strong> Event Service.<br />
Le Naming Service<br />
Ce service fournit un système de désignation perm<strong>et</strong>tant d’obtenir les références des<br />
obj<strong>et</strong>s répondant à un nom d’enregistrement donné. Les noms sont structurés selon un<br />
graphe de contextes de dénominations interconnectées, perm<strong>et</strong>tant ainsi la création d’un<br />
espace de nom réparti <strong>et</strong> éventuellement fort vaste. A l’intérieur de chaque contexte, chaque<br />
nom symbolique doit être unique, mais un même obj<strong>et</strong> peut utiliser plusieurs noms. Ceci<br />
perm<strong>et</strong> aux obj<strong>et</strong>s de s’enregistrer multiplement : sur base de noms différents ou dans des<br />
contextes différents. Ce mécanisme est en réalité assez pauvre dans un cadre dynamique,<br />
car un nom seul ne peut refléter les capacités des obj<strong>et</strong>s <strong>et</strong> rien ne précise si un obj<strong>et</strong> se<br />
présentant sous un nom donné est susceptible d’implanter une interface recherchée.<br />
Le Trader Service<br />
Le Trader Service présente un mécanisme plus puissant <strong>et</strong> plus exploitable que le Naming<br />
Service. Les serveurs s’y enregistrent en détaillant l’ensemble des propriétés qui les<br />
caractérisent, sous forme d’un ensemble d’associations clef-valeur, ainsi qu’en fournissant<br />
l’interface IDL qu’ils implantent. Les clients utilisent ce service en indiquant le type d’interface<br />
recherchée <strong>et</strong> des critères annexes : type des obj<strong>et</strong>s arguments, nombre d’arguments,<strong>et</strong>c.<br />
Le Trader Service résout les requêtes en parcourant l’ensemble du référentiel<br />
des enregistrements qu’il a collectés. Le client ayant obtenu ainsi l’ensemble des références<br />
des obj<strong>et</strong>s qu’il désire utiliser, la transaction peut commencer avec le serveur, par exemple<br />
en exploitant la Dynamic Invocation Interface.<br />
27
2.3. CONCLUSION<br />
l’Event Service<br />
Notons enfin l’existence d’un service de gestion des événements basé sur un modèle<br />
producteur–consommateur. Ce service perm<strong>et</strong> une propagation asynchrone des événements<br />
au moyen d’un canal réservé : le canal évènements. Les obj<strong>et</strong>s peuvent jouer deux rôles dans<br />
c<strong>et</strong>te interaction : ils sont soit producteurs <strong>et</strong> génèrent des évènements, soit consommateurs<br />
<strong>et</strong> cherchent à les acquérir. Les évènements sont transmis selon deux modes sur le canal : pull<br />
<strong>et</strong> push. Le mode de dépôt (push) est utilisé par les producteurs pour envoyer un événement<br />
vers les consommateurs. Les obj<strong>et</strong>s consommateurs concernés sont dès lors avertis de la<br />
présence d’un nouvel événement disponible sur le canal. Le mode de r<strong>et</strong>rait (push) perm<strong>et</strong><br />
à un obj<strong>et</strong> consommateur d’interroger le canal événement quant à l’existence d’un nouvel<br />
événement. Ainsi, par un mécanisme de scrutation, un obj<strong>et</strong> peut avoir une connaissance<br />
à tout moment de l’état actuel de la pile événements du canal local.<br />
2.3 Conclusion<br />
L’exploitation des mécanismes de base de CORBA, combinée aux services standards<br />
d’invocation dynamique, de collaboration avec le Trader Service <strong>et</strong> le Event Service perm<strong>et</strong><br />
la <strong>réalisation</strong> de systèmes distribués sur un modèle service–consommateur. Nous verrons<br />
plus loin dans ce mémoire que Jini propose la même démarche mais portée c<strong>et</strong>te fois dans<br />
le monde de Java. Il nous faut cependant apporter un bémol à c<strong>et</strong>te vision idyllique de<br />
CORBA en constatant qu’actuellement aucun vendeur d’ORB ne fournit simultanément<br />
l’ensemble des services requis pour le déploiement d’un système d’instrumentation flexible<br />
<strong>et</strong> présentant une fiabilité élevée.<br />
28
Chapitre 3<br />
JAVA <strong>et</strong> RMI<br />
Sommaire<br />
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />
3.2 La technologie Java . . . . . . . . . . . . . . . . . . . . . . . . . 30<br />
3.3 RMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />
3.3.1 Le modèle proposé par Java : RMI . . . . . . . . . . . . . . . . . 33<br />
3.3.2 Le transfert dynamique de code mobile . . . . . . . . . . . . . . 34<br />
3.4 Java hardware : le PicoJAVA . . . . . . . . . . . . . . . . . . . 36<br />
La solution que nous proposons pour l’implantation de réseaux d’instruments distribués<br />
est l’utilisation d’un nouveau modèle d’architecture distribuée connue sous le nom de Jini.<br />
d’un point de vue logiciel, Jini est une sur-couche de la plateforme Java <strong>et</strong> utilise massivement<br />
le système d’obj<strong>et</strong>s distribués de Java : RMI. Afin de présenter au mieux les possibilités<br />
étendues d’utilisation que perm<strong>et</strong> Jini, nous nous devons dans un premier temps<br />
de détailler ce qu’est la plateforme Java ainsi que de présenter de manière détaillée les<br />
mécanismes présents dans RMI.<br />
3.1 Introduction<br />
Le développement de la plateforme Java [13] est certainement une des grandes révolution<br />
de l’informatique actuelle. Le langage Java est apparu en 1995. Il est le fruit des recherches<br />
des ingénieurs de Sun Microsystems, désireux de m<strong>et</strong>tre en oeuvre un langage de haut<br />
niveau afin de programmer des périphériques embarqués. Très rapidement confrontés aux<br />
limitations de langages orientés obj<strong>et</strong>s tels que C++ <strong>et</strong> ADA, ceux-ci ont opté pour le<br />
développement d’un nouveau langage baptisé Oak, extrêmement lisible, purement orientéobj<strong>et</strong><br />
<strong>et</strong> surtout indépendant autant que possible du matériel sur lequel il serait amené à<br />
être déployé.<br />
29
3.2. LA TECHNOLOGIE JAVA<br />
3.2 La technologie Java<br />
La technologie Java regroupe deux concepts : Java est à la fois un langage de programmation<br />
<strong>et</strong> une plateforme. La plupart des langages perm<strong>et</strong>tent soit leur interprétation, soit<br />
leur compilation sur une machine donnée en vue de réaliser une exécution. Java a cela de<br />
singulier qu’il est à la fois compilé <strong>et</strong> à la fois interprété dans la plus grande majorité des<br />
cas. Avec le compilateur, il est possible de transformer le code écrit en langage Java en<br />
bytecode. Le bytecode Java est un code indépendant de la plateforme qui sera injecté dans<br />
un interpréteur présent sur le système local. La compilation n’ est requise qu’une fois, alors<br />
que l’interprétation aura lieu à chaque fois que le programme est exécuté. La figure 3.1<br />
illustre ce mécanisme.<br />
Fig. 3.1 – Schéma classique de mise en oeuvre de Java. Le code est compilé sous un format<br />
indépendant de la plateforme <strong>et</strong> est ensuite exécuté sur un interpréteur lié au système.<br />
La génération d’un bytecode qui sera par la suite interprété perm<strong>et</strong> de développer des<br />
applications sans se soucier de la plateforme finale de déploiement : il suffit en eff<strong>et</strong> qu’un<br />
interpréteur Java, connu sous le nom de Java Virtual Machine, soit présent sur la plateforme<br />
cible. De tels interpréteurs existent actuellement pour quasi toutes les combinaisons de<br />
système d’exploitation <strong>et</strong> de composante matérielle : du PC sous Windows jusqu’à la<br />
station multi-processeurs utilisant des CPU SPARC en passant par toutes les versions<br />
de Linux (x86,Alpha,Sparc, <strong>et</strong>c.). La figure 3.2 illustre le déploiement d’une application<br />
compilée en bytecode Java.<br />
On comprend donc tout l’intérêt d’un tel langage dans un environnement hétérogène de<br />
machines interconnectées entre elles au moyen d’une couche réseau. Nous verrons également<br />
dans le chapitre suivant que l’existence sur chaque machine d’un code commun, le bytecode,<br />
ouvre des perspectives nouvelles quant à l’utilisation d’obj<strong>et</strong>s distribués <strong>et</strong> aux possibilités<br />
de transfert de code d’une machine virtuelle à une autre. Enfin, un autre aspect non<br />
négligeable de nos jours est la possibilité de réaliser de manière extrêmement facile des<br />
interfaces graphiques (GUI : Graphical User Interfaces) au moyen d’un ensemble de classes<br />
prédéfinies en Java. On peut ainsi réduire drastiquement le temps consacré à l’élaboration<br />
de l’interface homme-programme puisque le canevas d’élaboration est le même quelle que<br />
soit la plateforme, évitant ainsi de devoir recourir à des bibliothèques propriétaires peu<br />
portables <strong>et</strong> souvent fort lourdes à maîtriser.<br />
30
3.2. LA TECHNOLOGIE JAVA<br />
Fig. 3.2 – Le bytecode produit par la compilation pourra être interprété sur une JVM sans<br />
se soucier des composantes matérielles du système.<br />
Portabilité<br />
Le choix du langage Java pour le développement des applications d’instrumentation<br />
distribuée est souvent mis en évidence dans la littérature [22] [23]. En eff<strong>et</strong>, de telles architectures<br />
sont caractérisées par la mise en présence de systèmes d’exploitation forts différents<br />
selon qu’il s’ agisse de stations client conviviales ou de machines noeuds du système de mesure<br />
choisies plutôt pour leur robustesse. Java perm<strong>et</strong> de réaliser des applications portables,<br />
interopérables entre toutes ces machines en utilisant un même modèle de développement,<br />
les mêmes outils <strong>et</strong> surtout en faisant appel à des compétences semblables, quel que soit<br />
l’aspect du problème abordé : client ou serveur.<br />
De plus, l’exploitation de techniques propres à Java, telles que les appl<strong>et</strong>s, perm<strong>et</strong> d’enrichir<br />
encore l’expérimentation, perm<strong>et</strong>tant ainsi aux utilisateurs d’accéder à des présentation des<br />
résultats via leur navigateur Intern<strong>et</strong> habituel. Rappelons ici que les appl<strong>et</strong>s sont de p<strong>et</strong>ites<br />
applications graphiques qui peuvent être exécutées dans un navigateur Intern<strong>et</strong> pour<br />
autant que celui-ci intègre une Java Virtual Machine. l’utilisateur, en se connectant sur le<br />
site contenant l’appl<strong>et</strong>, initie le chargement puis l’exécution de celle-ci dans le navigateur,<br />
perm<strong>et</strong>tant ainsi d’obtenir une présentation des données ou d’envoyer des commandes à<br />
un système distant.<br />
Interfaçage de code natif C ou C++<br />
Un autre aspect important du langage Java est sa capacité à pouvoir interagir avec du<br />
code natif de manière totalement transparente [19]. On entend par code natif tout type de<br />
code binaire compilé spécifiquement pour une machine donnée tournant sous un système<br />
d’exploitation donné. On pourrait citer comme exemple n’ importe quel programme compilé<br />
sous Windows/Intel ou n’ importe quelle bibliothèque mise à disposition sous Linux/Intel.<br />
Le langage d’origine du code natif n’ a pas d’importance puisqu’il s’ agit d’adresser du<br />
code relogeable ; néanmoins les outils mis couramment à disposition couramment ciblent<br />
plus particulièrement les langages C <strong>et</strong> C++.<br />
31
3.3. RMI<br />
Il faut être conscient qu’il s’ agit en quelque sorte d’une entorse faite au principe de<br />
portabilité mais la volonté de rester compatible avec les programmes existant auparavant<br />
explique ce qui a motivé les concepteurs de Java à développer c<strong>et</strong>te interface native connue<br />
sous le nom de JNI (Java Native Interface).<br />
Exploitation du code natif<br />
Le code natif a principalement deux utilités : l’exploitation des ressources locales de la<br />
machine au moyen d’un code plus rapide, plus puissant <strong>et</strong> le désir de pouvoir mener des<br />
actions sur des éléments du système qui ne sont pas repris dans la plateforme Java. A titre<br />
d’exemple, il pourrait s’ agir dans le premier cas de routines ultra-rapides de traitement<br />
digital du signal <strong>et</strong> pour le second de l’écriture dans les registres des cartes matérielles<br />
présentes sur l’ordinateur.<br />
Comme nous le verrons plus tard, c<strong>et</strong>te dernière technique a été mise en oeuvre dans le<br />
présent travail afin de perm<strong>et</strong>tre la prise de contrôle du bus GPIB par un programme<br />
Java au moyen des bibliothèques standard fournies par le constructeur de la carte. Notons<br />
que l’utilisation du langage C ou C++ standard jumelé avec un code soigné du point<br />
de vue de la portabilité, perm<strong>et</strong> néanmoins de déployer assez facilement de code natif<br />
venant de pair avec une application Java. De plus, dans le cas présent de l’instrumentation,<br />
des bibliothèques fortement standardisées existent pour un grand nombre de plateformes<br />
natives utilisant le langage C. Ce dernier point, plus propre à la <strong>réalisation</strong> pratique du<br />
système d’instrumentation sera traité dans la seconde partie de ce travail.<br />
Les extensions de la plateforme Java<br />
Une autre particularité de la plateforme Java est l’existence d’un grand nombre d’extensions,<br />
perm<strong>et</strong>tant par exemple l’utilisation des ports de communication série ou parallèle,<br />
le déploiement sur des stations mobiles légères (PDA ou GSM), ou l’implantation de Java<br />
dans des systèmes embarqués peu coûteux <strong>et</strong> présentant des ressources mémoire <strong>et</strong> calcul<br />
limitées. Ce large éventail d’ajouts à la plateforme commune perm<strong>et</strong> de considérer que<br />
l’utilisation de Java est un choix excellent <strong>et</strong> durable dans le temps, tant du point de vue<br />
de l’exploitation de l’électronique embarquée, de plus en plus présente autour de nous, que<br />
du point de vue du programmeur d’applications complexes orientées utilisateur.<br />
3.3 RMI<br />
Nous avons exposé dans le chapitre 2 le système d’obj<strong>et</strong>s distribué CORBA. Les concepts<br />
introduits par l’OMG dans le cadre de la mise en oeuvre de CORBA découlant de principes<br />
généraux relatifs à la mise en oeuvre d’obj<strong>et</strong>s distribués, ceux-ci sont également le<br />
fondement de la Remote M<strong>et</strong>hode Invocation (RMI) de Java [3]. Nous présenterons dans<br />
un premier temps le modèle RMI, puis nous exposerons une technique de partage de classes<br />
entre le client <strong>et</strong> le serveur connue sous le nom de chargement dynamique du code mobile.<br />
32
3.3. RMI<br />
3.3.1 Le modèle proposé par Java : RMI<br />
Comme nous l’avons évoqué, la Remote M<strong>et</strong>hod Invocation (RMI) de Java s’ apparente<br />
au schéma classique de distribution d’obj<strong>et</strong>s sur un bus réseau, à c<strong>et</strong>te exception près que<br />
le but recherché n’ est pas ici d’interfacer tous les langages possibles mais bien de concevoir<br />
des applications distribuées issues d’un même langage : Java. Ces applications seront<br />
donc ameneés à résider sur des machines virtuelles [14] différentes <strong>et</strong> non sur des plateformes<br />
différentes. C<strong>et</strong>te différence apparaîtra fondamentale dans le paragraphe suivant.<br />
La figure 3.3 présente les éléments d’une application écrite au moyen de RMI.<br />
Fig. 3.3 – Protocoles mis en oeuvre par RMI<br />
Dans un premier temps, Le serveur appelle le registry afin d’associer un nom symbolique<br />
avec l’obj<strong>et</strong> qu’il m<strong>et</strong> à disposition sur le bus. Le client peut alors entamer un processus de<br />
recherche <strong>et</strong> interroger le registry sur la présence ou non d’un nom de service disponible.<br />
En cas de succès, il obtient alors une référence sur l’obj<strong>et</strong> correspondant <strong>et</strong> est à même<br />
d’invoquer sur ce dernier une méthode particulière.<br />
L’ensemble des méthodes disponibles auprès du serveur est décrite au moyen d’une<br />
interface connue du client <strong>et</strong> du serveur. C<strong>et</strong>te approche est semblable à celle proposeé<br />
par CORBA au travers de l’IDL. Rappelons à c<strong>et</strong> eff<strong>et</strong> qu’une interface est un formalisme<br />
énonçant le comportement d’une obj<strong>et</strong>, mais ne réalisant pas l’implémentation de la classe.<br />
Il s’agit donc d’un ”contrat” que s’engage à remplir la classe implémentant l’interface, dont<br />
la <strong>réalisation</strong> finale est discrétionnaire.<br />
Comme nous le verrons dans la section suivante, des serveurs Web sont également<br />
utilisés par RMI afin de perm<strong>et</strong>tre le transfert de bytecode entre le client <strong>et</strong> le serveur.<br />
Insistons bien ici sur le fait qu’il ne s’agit pas de la marshallisation proprement dite d’obj<strong>et</strong>s,<br />
tels que les paramètres des méthodes activées, mais bien de transférer, le besoin échéant,<br />
des classes depuis un intervenant jusqu’à l’autre. Ce mécanisme n’a pas d’équivalent en<br />
CORBA <strong>et</strong> est appelé transfert dynamique de code mobile.<br />
33
3.3. RMI<br />
3.3.2 Le transfert dynamique de code mobile<br />
Le transfert dynamique de code mobile perm<strong>et</strong> de transférer du bytecode, ou plus simplement<br />
du code Java, d’une instance d’une classe qui n’est pas définie sur la machine<br />
virtuelle recevant ce code depuis la machine virtuelle qui fait référence à ce code. Ainsi,<br />
les interfaces, les comportements accessibles uniquement sur une plateforme sont rendus<br />
accessibles sur une autre plateforme, éventuellement distante.<br />
L’exploitation de c<strong>et</strong>te technique perm<strong>et</strong> à RMI la conservation d’un vrai polymorphisme<br />
tout au long du dialogue client-serveur, ce qui n’était pas possible en CORBA.<br />
On entend par vrai polymorphisme le fait que la manipulation de la classe à travers des<br />
processus de généralisation <strong>et</strong>/ou de spécialisation ne dégrade pas son comportement. Une<br />
classe ayant subit une généralisation en un membre de sa classe mère peut toujours être vu<br />
comme un élément de sa classe d’origine. Ceci n’est pas possible dans d’autres langages,<br />
tels que C++.<br />
Reprenons ici l’exemple du Chat envoyé à travers un ORB qui est à même de marshalliser<br />
un Animal. C<strong>et</strong>te transaction est exposée sur la figure 3.4. Si nous effectuons<br />
c<strong>et</strong>te opération au moyen de RMI, le comportement Chat n’étant pas connu de la machine<br />
distante, celle-ci entamera un transfert de code mobile avec la machine d’origine de la<br />
transaction afin d’obtenir le bytecode lui perm<strong>et</strong>tant d’avoir une connaissance de la classe<br />
Chat. Ce transfert est totalement transparent <strong>et</strong> automatique, l’utilisateur n’ayant aucune<br />
intervention à fournir lors de l’exécution ou de la programmation.<br />
Notons enfin que l’utilisation de la technique de transfert dynamique de code mobile<br />
perm<strong>et</strong> la même flexibilité que l’interface d’invocation dynamique de CORBA, en ce sens<br />
que si un client désire invoquer des méthodes sur un serveur dont il n’a pas connaissance a<br />
priori, il pourra obtenir la référence du stub du serveur auprès du rmiregistry <strong>et</strong> entamer<br />
un téléchargement du code de ce dernier (fig. 3.5). Ayant acquis le stub, il pourra alors<br />
l’utiliser tout le temps de la transaction avec le serveur. Insistons sur le fait, crucial pour<br />
la compréhension des mécanismes implantés par Jini, que contrairement à CORBA, il ne<br />
s’agit pas ici de construire dynamiquement le stub du côté client mais bien d’en déplacer<br />
une copie depuis le serveur Web de l’obj<strong>et</strong> distant.<br />
34
3.3. RMI<br />
A cat instance<br />
Animal<br />
Cat<br />
A cat instance<br />
Animal<br />
Cat<br />
Client Server<br />
Marshalling Marshalling<br />
Client<br />
Dynamic Stub Invocation<br />
ORB<br />
HTTP upload of<br />
Cat’ s class bytecode<br />
RMIbus RMIbus<br />
IIOP<br />
Server<br />
Dynamic Skel<strong>et</strong>on Invocation<br />
ORB<br />
A cat instance<br />
Cat<br />
An Animal Instance<br />
Animal<br />
Fig. 3.4 – RMI (au-dessus) conserve le comportement d’une classe marshallisée contrairement<br />
CORBA (dessous). Ceci est rendu possible par le transfert du bytecode de la classe<br />
Chat de la machine client à la machine serveur.<br />
Client Virtual Machine Server Virtual Machine<br />
Client<br />
Web server<br />
Server Object<br />
Client Virtual Machine Server Virtual Machine<br />
Client<br />
Web server<br />
Server’ s Stub<br />
Aks for location of the Stub<br />
Server Object<br />
RmiRegistry<br />
Web server<br />
RmiRegistry<br />
Web server<br />
Server’ s Stub<br />
Fig. 3.5 – Une copie du stub du serveur est transférée dans un premier temps auprès du<br />
rmiregistry. Le client utilise alors la référence du stub afin d’en obtenir une instance locale<br />
par téléchargement du bytecode.<br />
35
3.4. JAVA HARDWARE : LE PICOJAVA<br />
3.4 Java hardware : le PicoJAVA<br />
L’existence de machines virtuelles logicielles sur un nombre important de plateformes<br />
ne doit pas nous faire perdre de vue que Java n’ est pas qu’un langage. En eff<strong>et</strong>, le produit<br />
de la compilation d’un obj<strong>et</strong> Java n’ est autre qu’un fichier binaire composé d’une<br />
suite de symboles appelés bytecode. Ce code binaire est progressivement lu par le logiciel<br />
d’interprétation <strong>et</strong> induit des actions dans une ”machine virtuelle”. C<strong>et</strong>te machine a<br />
la structure d’un système à microprocesseur : elle comprend une pile, des registres, une<br />
mémoire, des compteurs, <strong>et</strong>c. De ce point de vue, les symboles binaires du bytecode se<br />
comportent donc comme les instructions élémentaires qu’un processeur est amené à lire<br />
séquentiellement.<br />
On comprend aisément qu’une telle machine logicielle peut être réalisée de manière<br />
matérielle : c’ est le but de la spécification PicoJAVA [12]. C<strong>et</strong>te spécification remplace<br />
la machine virtuelle par un système à processeur réalisant, matériellement, les mémoires,<br />
pointeurs <strong>et</strong> piles décrits par la spécification de la machine virtuelle Java (Java Virtual<br />
Machine).<br />
L’existence de telles machines perm<strong>et</strong> donc la <strong>réalisation</strong> de systèmes embarqués complexes<br />
destinés à exécuter du code développé sur la plateforme Java. Des prototypes compl<strong>et</strong>s<br />
existent déjà, implantant les dernières spécification Java <strong>et</strong> livrés avec les outils sur<br />
lesquels sont classiquement basés le développement de tels systèmes : environnement de<br />
débogage, logiciel d’optimisation, sonde JTAG pour l’analyse des signaux du processeur,<br />
<strong>et</strong>c. Les figures 3.6 <strong>et</strong> 3.7 présentent un boîtier réalisé par la société Ajile.<br />
De tels composants pourraient à court terme être utilisés dans des PDA, des appareils<br />
de mesure ou même être intégrés dans des routeurs afin de remplir certaines fonctionnalités<br />
que requièrent, comme nous le verrons plus tard, tout réseau basé sur l’architecture Jini.<br />
Notons enfin que les performances de ces appareils sont plus que satisfaisantes, grâce à<br />
un décodage d’instructions réalisé en hardware.<br />
36
3.4. JAVA HARDWARE : LE PICOJAVA<br />
Fig. 3.6 – Le AJ-80 est un processeur PicoJAVA implantant la dernière spécification Java.<br />
Réalisé par Ajile, il convient parfaitement à l’utilisation de Java en milieu industriel <strong>et</strong><br />
mobile.<br />
Fig. 3.7 – Le AJ-80 peut être assemblé sur carte de faible taille afin de lui adjoindre des<br />
ports d’entrée/sortie standard ainsi qu’un connecteur réseau.<br />
37
Chapitre 4<br />
Architecture Jini<br />
Sommaire<br />
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38<br />
4.2 Architecture <strong>et</strong> principe . . . . . . . . . . . . . . . . . . . . . . 39<br />
4.3 Le modèle d’interaction dynamique . . . . . . . . . . . . . . . 42<br />
4.3.1 Interrogation du Lookup par les clients . . . . . . . . . . . . . . 42<br />
4.3.2 Le concept de Leasing . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
4.1 Introduction<br />
L’architecture Jini [9] [18] a été introduite par Sun Microsystem Laboratories en 1999<br />
<strong>et</strong> complète la vision de la plateforme Java dont l’idée première était de créer un environement<br />
à même de perm<strong>et</strong>tre à des systèmes embarqués de communiquer <strong>et</strong> d’échanger des<br />
données entre eux de manière flexible <strong>et</strong> transparente afin de bâtir des infrastructures de<br />
services orientés consommateur.<br />
Jini se présente sous la forme d’une extension de la plateforme Java, disponible librement<br />
sur l’Intern<strong>et</strong>. Compte tenu de la jeunesse de c<strong>et</strong>te technologie, de nouvelles<br />
implémentations sont régulièrement mises à disposition sur le site officiel de Jini, mais<br />
les concepts <strong>et</strong> les classes clés sont quant à eux finalisés <strong>et</strong> gelés de manière à perm<strong>et</strong>tre au<br />
développeurs d’exploiter c<strong>et</strong>te technologie dès maintenant, sans crainte d’apparition d’incomptatibilités<br />
dans le futur.<br />
Jini se veut avant tout une spécification pour l’interopérabilité dynamique entre plateformes<br />
Java distribuées sur réseau, n’imposant par là même auncun choix quant au proto-<br />
38
4.2. ARCHITECTURE ET PRINCIPE<br />
cole final utilisé pour l’ implémentation des éléments de communication. Néanmoins, l’utilisation<br />
de RMI comme moyen d’exploitation des obj<strong>et</strong>s distribués rend le développement<br />
<strong>et</strong> le déploiement du code plus aisé, c’est pourquoi les deux versions de Jini disponibles<br />
actuellement (1.0 <strong>et</strong> 1.1) utilisent, elles, abondament RMI. N’oublions pas à c<strong>et</strong> eff<strong>et</strong> que<br />
Java perm<strong>et</strong> l’exploitation du bus CORBA, largement utilisé dans l’industrie, <strong>et</strong> donc que<br />
Jini n’apparait en rien comme fermé des standards actuels. Des recherches ont permis de<br />
montrer qu’il était possible de ”présenter” de manière totalement transparente des services<br />
CORBA comme étant des services Jini, perm<strong>et</strong>tant ainsi à c<strong>et</strong>te technologie d’encapsuler<br />
l’architecture CORBA.<br />
4.2 Architecture <strong>et</strong> principe<br />
Jini repose sur un modèle d’interaction faisant apparaître un certain nombre de rôles <strong>et</strong><br />
de mécanismes clés. On distinguera de manière simplifiée trois acteurs constituant le bus<br />
Jini :<br />
1. Le Service. Il s’agit d’un obj<strong>et</strong> distribué qui est capable d’accomplir un travail donné.<br />
Le Service propose ses capacités <strong>et</strong> invite les autres à les exploiter. Il peut être vu<br />
comme un fournisseur de comportement, de méthodes.<br />
2. Le Client cherche à utiliser un Service spécifique, répondant à ses besoins sur le<br />
moment. Il se pose en consommateur des ressources disponibles.<br />
3. Le Lookup qui orchestre les dialogues entre Clients <strong>et</strong> Services, garde trace des Services<br />
disponibles sur le réseau <strong>et</strong> perm<strong>et</strong> au client des interrogations afin de chercher<br />
le Service le plus adéquat. Il gère également toute la dynamicité du réseau : disparition<br />
des Services, apparition de nouveaux membres sur le bus, modification de rôle<br />
d’un des membres, <strong>et</strong>c.<br />
En plus de ces éléments de base, des concepts accessoires viennent se greffer afin, par<br />
exemple, d’enrichir la définition des Services, de gérer la robustesse des transactions ou<br />
encore d’introduire des mécanismes d’envoi d’évènements. Ils seront vu dans les sections<br />
qui suivent.<br />
L’architecture Jini repose sur un modèle d’interaction entre Services <strong>et</strong> Clients orchestré<br />
par un Service particulier appelé Lookup. Dans un premier temps, un ensemble de Services<br />
<strong>et</strong> de Clients sont disposés sur le réseau <strong>et</strong> cherchent à interagir. Pour ce faire, ils doivent<br />
tout d’abord découvrir un ou plusieurs Service de Lookup. Soit ils possèdent l’adresse IP<br />
de ce service <strong>et</strong> ils peuvent donc prendre contact avec lui sans difficulté, soit ils peuvent<br />
utiliser une technique d’envoi de paqu<strong>et</strong>s en multicast, pour tout le sous-réseau, <strong>et</strong> attendre<br />
la réponse d’un éventuel Lookup présent (Fig. 4.1).<br />
Pendant c<strong>et</strong>te transaction, les Clients comme les Services agissent en temps que consommateurs<br />
du Service de Lookup. On constatera tout au long du détail des mécanismes de<br />
Jini que chaque intervenant n’est pas amené à jouer un rôle unique, mais se présentera<br />
tantôt comme client, tantôt comme service.<br />
39
4.2. ARCHITECTURE ET PRINCIPE<br />
Consumer Provider<br />
Lookup<br />
Service<br />
Consumer<br />
L L<br />
Lookup<br />
Service<br />
Provider<br />
discovery discovery<br />
Lookup<br />
Service<br />
Consumer<br />
announcement announcement<br />
L<br />
Fig. 4.1 – Découverte du Lookup par les Clients <strong>et</strong> les Services.<br />
Consumer Provider<br />
Lookup<br />
Service<br />
Consumer<br />
L L<br />
L<br />
register<br />
Lookup<br />
Service<br />
Provider<br />
discovery discovery<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
Fig. 4.2 – mise à disposition du Proxy par le service<br />
Dans un second temps, ayant connaissance du Lookup, le service m<strong>et</strong> en dépôt chez le<br />
Lookup une portion de code appelée proxy (Fig 4.2). Il s’agit simplement d’une instance<br />
d’un obj<strong>et</strong> RMI qui est téléchargé du service vers le Lookup. Le transfert de code s’effectue<br />
selon les mécanismes implantés par RMI (chargement dynamique du code mobile) au<br />
40
4.2. ARCHITECTURE ET PRINCIPE<br />
Consumer Provider<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
L L<br />
lookup<br />
L<br />
register<br />
Lookup<br />
Service<br />
Provider<br />
discovery discovery<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
Fig. 4.3 – Recherche des proxys du Lookup par le client<br />
moyen du serveur Web présent sur la plateforme du service.<br />
Le ou les clients se posent en consommateur des services présents sur le bus <strong>et</strong> peuvent<br />
entrer en contact avec ceux-ci à l’aide du Lookup. Leur but est d’obtenir une copie du<br />
Proxy mis en dépôt par le service dont ils désirent exploiter les possibilités.<br />
Pour ce faire, ils fournissent au Lookup un ensemble de désidératas qui perm<strong>et</strong>tront de<br />
déterminer quels sont les proxys qui peuvent se révéler utiles (Fig 4.3).<br />
A nouveau, les mécanismes exposés dans le chapitre traitant de RMI seront mis en<br />
oeuvre afin de télécharger une copie du proxy depuis le Lookup jusqu’au Client.<br />
Nous n’avons jusqu’à présent toujours pas précisé la nature même du proxy, à savoir<br />
sa fonctionnalité finale. Comme nous l’avons dit, le Proxy est un morceau de code qui<br />
se déplace de manière transparente de la machine virtuelle du Service jusqu’à la machine<br />
virtuelle du Client. En soi, aucune contrainte n’est imposée sur celui-ci, si ce n’est qu’il doit<br />
être capable d’effectuer ce déplacement en utilisant RMI <strong>et</strong> donc être développé comme un<br />
obj<strong>et</strong> distribué au sens de RMI. Trois types d’approches sont dès lors possibles par rapport<br />
au proxy :<br />
– il est le service recherché par le Client. Auquel cas il s’agit d’un morceau de bytecode<br />
pris comme un programme compl<strong>et</strong>.<br />
– il est un moyen de recontacter le service qui l’a mis à disposition. Dans ce cas, le<br />
proxy est un Stub servant de pont de communication entre le Client <strong>et</strong> le Service.<br />
– Il est hybride : à la fois stub <strong>et</strong> application. Un tel proxy peut par exemple servir à<br />
41
4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />
partager les besoins en ressources entre la machine client, plus puissante, <strong>et</strong> acquérir<br />
des informations auprès du service, plus léger.<br />
C<strong>et</strong>te approche laisse bien entendu une très grande liberté quant au rôle final que le proxy<br />
remplira. Quand bien même sa signification pourrait être fixée, une latitude très large est<br />
laissée à l’implantation finale.<br />
4.3 Le modèle d’interaction dynamique<br />
4.3.1 Interrogation du Lookup par les clients<br />
Nous avons puisque les Clients pouvaient effectuer des requêtes auprès du ou des lookup<br />
afin d’obtenir une copie du Proxy des services qui les intéressent. Alors que CORBA<br />
perm<strong>et</strong> d’effectuer des recherches sur base d’un nom symbolique ou de l’énumération d’un<br />
certain nombre de propriétés (méthodes, attributs), Jini proposé un modèle basé sur les<br />
comportements des obj<strong>et</strong>s Proxy. Ainsi, les Clients formulent leurs requêtes en présentant<br />
une ou plusieurs interfaces que les Proxy recherchés devront implémenter. Afin d’affiner<br />
encore plus la recherche, une ou plusieurs classes d’attributs secondaires – dérivées par<br />
convention de la classe Entry – peuvent être fournis.<br />
Les proxy qui implémenteront toutes les interfaces fournies par le Client <strong>et</strong> dont les<br />
Entry auront exactement les mêmes attributs que les Entry fournies par le Client seront<br />
alors r<strong>et</strong>ournés.<br />
Ce mécanisme impose donc que le client <strong>et</strong> le service conviennent des interfaces communes.<br />
On parlera ici de well known interfaces : les interfaces connues de tous. Notons enfin<br />
que l’utilisation d’interfaces pour la recherche perm<strong>et</strong> l’exploitation de toutes les techniques<br />
sous-jacentes à la conception par les méthodes des obj<strong>et</strong>s. Ainsi, si un proxy implémente<br />
une interface qui est une sous-classe de celle fournie par le client, le lookup considérera le<br />
proxy comme un résultat valide pour la requête. Pour prendre un exemple plus parlant, si<br />
un client cherche un instrument de mesure <strong>et</strong> qu’un voltmètre est présent sur le bus à ce<br />
moment, celui-ci sera r<strong>et</strong>ourné car l’interface voltmètre est une sous-classe d’instrument de<br />
mesure <strong>et</strong> donc le voltmètre aura le comportement recherché par le client.<br />
C<strong>et</strong>te logique puissante peu sembler fort contraignante a priori, vu que toutes les interfaces<br />
doivent être normalisées entre les constructeurs avant l’exploitation des possibilités<br />
Jini. Les différences mais donc également les spécificités que peuvent apporter les constructeurs<br />
semblent diminuées. Nous montrerons dans la section 7.2.2 qu’il n’en est rien si nous<br />
combinons le mécanisme de recherche de Jini avec les capacités d’instropection dynamique<br />
des classe offerte par Java.<br />
Terminons ce paragraphe en signalant que le client peut s’enregistrer auprès du lookup<br />
afin de recevoir des événèments liés au changement d’état des services disponibles. Ces<br />
services sont bien entendu ceux qui répondent au désidératas exprimés client, i.e. ceux qui<br />
42
4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />
réalisent les interfaces requises par celui-ci. La terminologie Jini fait état de trois transitions<br />
différentes. On parlera de transition<br />
1. no match to match lorsqu’un nouveau service, non connu jusqu’à présent, s’enregistre<br />
auprès du lookup <strong>et</strong> correspond aux demandes du client.<br />
2. match to no match si un service connu venait à disparaître, soit intentionnellement,<br />
soit par expiration du délai de bail de son proxy.<br />
3. match to match portant sur un service déjà existant mais dont le proxy s’est modifié.<br />
Il s’agit par exemple de la mise à disposition d’une nouvelle classe proxy ou de la<br />
modification des attributs secondaires – les Entry – associés à ce proxy.<br />
La figure 4.4 montre que l’apparition d’un nouveau fournisseur de service entraine la<br />
réexécution du schéma que nous avons détaillé plus haut.<br />
Consumer L Provider<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
lookup<br />
discovery<br />
3<br />
S<br />
event<br />
usage<br />
usage<br />
4<br />
2<br />
register<br />
register<br />
Lookup<br />
Service<br />
Provider<br />
Lookup<br />
Service<br />
Consumer<br />
discovery<br />
1<br />
announcement<br />
Fig. 4.4 – A l’apparition d’un nouveau service, le lookup génère un évènement auprès du<br />
client afin que celui-ci puisse bénéficier du nouveau proxy.<br />
43
4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />
4.3.2 Le concept de Leasing<br />
Le transfert du proxy effectué, les compétences des services présents sur le bus peuvent<br />
être librement exploitées par les clients possédant les proxy qu’ils requiéraient. Mais c<strong>et</strong>te<br />
distribution de code à travers le réseau soulève la problématique de la robustesse de l’architecture<br />
ainsi mise en place. La plupart des approches relatives à la conception <strong>et</strong> à la<br />
mise en oeuvre de systèmes distribués, faisant intervenir des obj<strong>et</strong>s ou non, postulent que<br />
le réseau est transparent.<br />
Transparent signifie ici qu’il n’est pas un paramètre critique de l’interaction entre client<br />
<strong>et</strong> serveur : la latence est faible ou inexistante, les machines sont stables <strong>et</strong> sont peu susceptibles<br />
de présenter une panne ou de ”disparaître” soudainement du réseau, les méthodes<br />
invoquées sur les obj<strong>et</strong>s distants n’échouent pas. Force est de constater qu’à long terme ces<br />
préceptes se révèlent être faux. L’interaction dynamique entre noeuds d’une communauté<br />
d’appareils hétérogènes implique que ceux ci peuvent apparaître ou disparaître à tout moment.<br />
l’activation d’une méthode sur un obj<strong>et</strong> distant peut potentiellement échouer ; il<br />
suffit de penser par exemple à l’appel d’une méthode de mesure du potentiel dans un calibre<br />
largement supérieur à celui que pourrait supporter le voltmètre. Jini intègre c<strong>et</strong>te<br />
vision en offrant deux mécanismes afin d’assurer la robustesse des interactions.<br />
Le premier mécanisme perm<strong>et</strong> de traiter avec la partie relative à l’activation des méthodes<br />
sur un obj<strong>et</strong> serveur. En cas d’échec de l’appel à la méthode ou en cas de problème lors<br />
de la <strong>réalisation</strong> de la méthode, une exception est j<strong>et</strong>ée. Ainsi le client sera non seulement<br />
averti de l’insuccès de l’invocation distante, mais il sera de plus obligé de traiter l’exception<br />
éventuelle. En eff<strong>et</strong>, les mécanismes syntaxiques du langage Java imposent, lorsqu’une<br />
méthode est déclarée comme pouvant potentiellement j<strong>et</strong>er une exception, de prévoir une<br />
portion de code qui sera inconditionnellement exécutée. C’est donc la responsabilité du<br />
développeur d’agir en conséquence.<br />
Le second mécanisme,plus subtil, assure une connaissance continue des obj<strong>et</strong>s présents<br />
dans la communauté Jini. Fondamentalement, un Service peut quitter le réseau local de<br />
deux manières : soit proprement, en faisant part de son départ, soit suite à un impondérable<br />
(crash matériel, déconnexion du réseau). Un Service quittant le réseau proprement le fera<br />
en annonçant son intention au Lookup en charge de son ou ses Proxy (Fig. 4.5). Le Lookup<br />
décidera alors d’invalider les Proxy mis en dépôt par le Service <strong>et</strong> avertira, au moyen<br />
d’évènement distribués, les Clients faisant usage de ces Proxy qu’il ne convient plus de les<br />
utiliser plus longtemps (Fig 4.6). Les Clients pourront alors envisager de détruire ou non<br />
les Proxy invalides.<br />
Le deuxième mécanisme est utilisé afin de prévenir qu’un Service disparaisse du réseau<br />
local, sans avertir de son départ, m<strong>et</strong>tant ainsi l’équilibre de l’architecture en péril. Ce<br />
mécanisme est connu sous le nom de Leasing. Lors de la mise en dépôt du Proxy, le Service<br />
<strong>et</strong> le Lookup conviennent du temps pendant lequel le Proxy sera mis à disposition ainsi<br />
que d’une fréquence à laquelle ils prendront régulièrement contact. La transaction prend la<br />
44
4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />
forme d’un dialogue au cours duquel chacun des acteurs expose ses désidératas ; la décision<br />
finale revenant au Lookup seul. Pour fixer les idées, le service de Lookup fourni par Sun<br />
autorise qu’un Proxy soit mis en dépôt pour un temps infini, pour autant que le Service<br />
puisse être recontacté au plus tard toutes les cinq minutes.<br />
Si, le délai passé, le Service ne peut être contacté ou qu’il ne désire plus renouveller le<br />
bail de son Proxy, ce dernier sera détruit <strong>et</strong> les clients avertis de l’invalidité manifeste des<br />
Proxy liés à ces Services. (Figs. 4.7 <strong>et</strong> 4.8).<br />
Enfin, un dernier mécanisme important perm<strong>et</strong> aux clients de s’assurer que le Service<br />
offre le même comportement. Si le Service venait à changer la configuration de son Proxy<br />
– en fournissant un nouveau au lookup par exemple – ou d’une de ses Entry, un évènement<br />
spécifique est envoyé par le Service au Lookup <strong>et</strong> celui-ci le propagera à tous les clients<br />
utilisant le Proxy.<br />
45
4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />
Consumer Provider<br />
Lookup<br />
Service<br />
Consumer<br />
lookup<br />
discovery<br />
L<br />
unregister<br />
Lookup<br />
Service<br />
Provider<br />
Lookup<br />
Service<br />
Consumer<br />
discovery<br />
Fig. 4.5 – Le service annonce son intention de quitter<br />
Consumer L usage Provider<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
lookup<br />
discovery<br />
S<br />
event<br />
register<br />
Lookup<br />
Service<br />
Provider<br />
Lookup<br />
Service<br />
Consumer<br />
discovery<br />
announcement<br />
Fig. 4.6 – L’annonce est répercutée auprès des clients consommateurs du service<br />
46
4.3. LE MODÈLE D’INTERACTION DYNAMIQUE<br />
Consumer<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
lookup<br />
discovery<br />
Lookup<br />
Service<br />
Provider<br />
Fig. 4.7 – Le service disparaît de manière impromptue mais son Proxy vit toujours sur la<br />
plateforme du Lookup<br />
Consumer L<br />
Lookup<br />
Service<br />
Consumer<br />
announcement<br />
lookup<br />
discovery<br />
S<br />
event<br />
usage<br />
???<br />
Lookup<br />
Service<br />
Provider<br />
Fig. 4.8 – Le lookup, ne pouvant renouveler le bail du proxy, l’invalide <strong>et</strong> avertit les clients<br />
47
Deuxième partie<br />
Réalisation d’un système<br />
d’instrumentation distribuée<br />
48
Chapitre 5<br />
Positionnement de JINI par rapport<br />
aux solutions actuelles<br />
Sommaire<br />
5.1 CORBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.1.2 Aspects communs . . . . . . . . . . . . . . . . . . . . . . . . . . 50<br />
5.1.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . 51<br />
5.1.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2 UPNP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2.2 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />
5.2.3 Éléments de distinction . . . . . . . . . . . . . . . . . . . . . . . 53<br />
5.3 IEEE 1451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53<br />
5.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54<br />
Les chapitres précédents ont longuement exposé la problématique des systèmes d’instrumentation<br />
actuels ainsi que les différentes techniques utilisables actuellement pour la<br />
<strong>réalisation</strong> d’applications distribuées exploitant les possibilités des langages de haut niveau.<br />
Dans ce chapitre, nous nous efforcerons de comparer la technologie Jini, préconisée comme<br />
solution, aux technologies existantes afin d’en faire ressortir les éléments novateurs <strong>et</strong> d’affirmer<br />
l’intérêt de Jini dans le cadre de la <strong>réalisation</strong> d’un système hybride instrument de<br />
mesure–PC.<br />
49
5.1. CORBA<br />
5.1 CORBA<br />
5.1.1 Introduction<br />
Les mécanismes de CORBA ont été détaillés dans le deuxième chapitre. Il y a été<br />
essentiellement question des processus de découverte dynamique des obj<strong>et</strong>s présents sur le<br />
bus ainsi que de la possibilité d’interfacer dynamiquement les obj<strong>et</strong>s serveurs.<br />
De toutes les solutions actuelles, CORBA est celle qui se rapproche le plus de Jini :<br />
celles-ci partagent une optique globalement commune <strong>et</strong> des mécanismes à peu de choses<br />
près similaires. Certaines différences, plus subtiles, laissent penser que l’utilisation de Jini<br />
offre des possibilités plus vastes <strong>et</strong> plus riches que ce que perm<strong>et</strong> CORBA actuellement.<br />
Nous présenterons dans un premier temps les aspects communs des deux technologies pour<br />
enfin isoler les éléments clés qui constituent la différence de mise en oeuvre que propose<br />
chacune des deux approches.<br />
5.1.2 Aspects communs<br />
Jini, à l’instar de CORBA, est une architecture basant ses mécanismes d’interaction<br />
dynamique sur la séparation de compétences en un certain nombre de services. Jini m<strong>et</strong> en<br />
oeuvre principalement deux services : le démon 1 d’activation RMI <strong>et</strong> le Lookup.<br />
Le démon d’activation RMI sert à assurer la sécurité des transactions sur le réseau<br />
d’obj<strong>et</strong>s distribués. Des règles peuvent être définies par l’utilisateur qui serviront à valider<br />
ou invalider toute exploitation des obj<strong>et</strong>s distants. De plus, ce programme est à même<br />
d’assurer un persistence des obj<strong>et</strong>s : c’est lui qui conserve l’ensemble des proxy collectés<br />
par le lookup mais il peut servir, le cas échéant, de mécanisme de sérialisation d’un obj<strong>et</strong><br />
afin de le réactiver ultérieurement. On parle d’obj<strong>et</strong> activable que l’on m<strong>et</strong> en veille. Pour<br />
rapprocher ce démon des mécanismes de CORBA, on peut dire qu’il remplit à la fois le<br />
rôle du service de persistence <strong>et</strong> du service de sécurité.<br />
Le lookup interagit avec le démon RMI <strong>et</strong> est quant à lui chargé de la détection des<br />
services <strong>et</strong> de désservir les recherches des clients. Il agit de ce point de vue un peu comme<br />
le Naming Service ou le Trader Service de CORBA : les clients peuvent y effectuer des<br />
requêtes <strong>et</strong> accéder ainsi aux obj<strong>et</strong>s serveurs. Seule l’implantation finale de la mise en<br />
oeuvre de ces recherches montre des différences fondamentales entre le point de vue adopté<br />
par CORBA <strong>et</strong> celui de Jini.<br />
Enfin, l’utilisation d’évènements est présent dans les deux architecures. Jini impose<br />
qu’une exception soit traitée lors de l’activation d’une méthode distante alors que CORBA<br />
propose l’envoi d’évènements via le Event Service. Néanmoins, une approche raisonnable<br />
1 le démon est largement utilisé afin de traduire le mot anglais daemon. Ce terme peut paraitre relativement<br />
peu approprié pour celui qui ne le côtoie pas régulièrement <strong>et</strong> doit être vu comme un programme<br />
agent vivant en tâche de fond <strong>et</strong> dont le but est d’assister le système dans la gestion des tâches.<br />
50
5.1. CORBA<br />
du point de vue de l’implantation des obj<strong>et</strong>s CORBA, consiste à imposer que chaque<br />
méthode j<strong>et</strong>te une exception lorsqu’une erreur prend place. De plus, en demandant au<br />
service d’évènements de distribuer directement aux clients concernés les messages envoyés<br />
par les serveurs, on arrive au même niveau de robustesse que ce que Jini propose pour<br />
l’interaction client-service.<br />
5.1.3 Éléments de distinction<br />
Les différences fondamentales entre Jini <strong>et</strong> CORBA tiennent essentiellement au modèle<br />
de déploiement totalement duaux que proposent ces architectures. CORBA suppose un<br />
déploiement sur des machines hétérogènes, présentant des langages différents <strong>et</strong> des modèles<br />
de données incompatibles. Jini existe par dessus la plateforme Java <strong>et</strong> perm<strong>et</strong> l’interaction<br />
d’obj<strong>et</strong>s Java distribués sur des machines virtuelles Java. C’est donc l’exploitation de ce<br />
langage <strong>et</strong> de c<strong>et</strong>te plateforme unique pour tous les acteurs qui rend Jini fortement différent<br />
de CORBA.<br />
La notion d’obj<strong>et</strong> distribué de CORBA est intimement liée à la présence massive de<br />
pointeurs. Les obj<strong>et</strong>s, qu’ils soient locaux ou distants sont accessibles via ces pointeurs.<br />
Un obj<strong>et</strong> serveur utilisé par un client ne vit donc pas sur la machine locale. En Jini, le<br />
mécanisme est contraire : les services m<strong>et</strong>tent à disposition des proxy qui sont transportés<br />
de manière transparente jusque sur la plateforme du client. L’obj<strong>et</strong> vit donc sur la machine<br />
virtuelle du client <strong>et</strong> devient ainsi un obj<strong>et</strong> local. Il peut donc être sérialisé sur les<br />
périphériques de stockage de masse du client <strong>et</strong> être réexploité même après disparition du<br />
service qui l’a émis. Ce phénomène est rendu possible grâce à l’utilisation de RMI comme<br />
modèle pour les obj<strong>et</strong>s distribués <strong>et</strong> serait complètement impossible à réaliser en CORBA.<br />
Le système de bail (leases) utilisé dans Jini contribue à la stabilité <strong>et</strong> la propr<strong>et</strong>é du<br />
système tout entier. Un serveur disparaissant dans CORBA ne se révellerait invalide qu’au<br />
moment d’un appel infructueux. Auncun mécanisme ne garantit le suivi des obj<strong>et</strong>s distants<br />
en terme d’existence ou de possibilité de les atteindre. Les références de ces obj<strong>et</strong>s ne sont<br />
également pas n<strong>et</strong>toyées sur le bus tout entier. Jini offre un manière flexible de conserver<br />
le contact avec les services. Ceux-ci ne peuvent s’enregistrer pour une durée illimitée<br />
auprès du lookup <strong>et</strong> toute disparition d’un service entraîne automatiquement la propagation<br />
d’évènements à travers tout le bus afin d’avertir les clients consomateurs de ce service<br />
que les proxy qu’ils possèdent pourraient mener à un comportement erroné. Le système est<br />
donc sous contrôle permanent <strong>et</strong> se ”n<strong>et</strong>toie” régulièrement.<br />
Notons à charge de Jini qu’il n’y a actuellement aucun regroupement de services sous<br />
formes de sphères de compétences comme il existe dans CORBA pour chaque corps de<br />
métier. Notons que de tels obj<strong>et</strong>s pourraient se développer dans des versions utlérieures<br />
de Jini sous la pression des compagnies désireuses d’exploiter les possibilités nouvelles de<br />
c<strong>et</strong>te technologie.<br />
51
5.2. UPNP<br />
5.1.4 Conclusion<br />
CORBA <strong>et</strong> Jini présentent fondamentalement les mêmes aspirations pour l’interaction<br />
entre obj<strong>et</strong>s sur un bus distribué. Seuls les modèles d’implantation <strong>et</strong> de déploiement<br />
marque la différence entre les technologies. Jini tire bénéfice de son utilisation dans un<br />
environement fortement dynamique <strong>et</strong> mobile, mais exclusivement constitué de plateformes<br />
Java.<br />
Jini <strong>et</strong> CORBA ne sont cependant pas incompatibles en ce sens que le modèle RMI<br />
de Java perm<strong>et</strong> d’interfacer IIOP de CORBA [24] perm<strong>et</strong>tant la présentation de serveurs<br />
CORBA sous forme de services Jini. [20]<br />
5.2 UPNP<br />
5.2.1 Introduction<br />
Le modèle Universal Plug and Play [10] a été introduit par la société Microsoft en<br />
1999. Nous l’évoquons ici car il fait partie, au même titre que IEEE 1451, d’une nouvelle<br />
vague de standards pour l’exploitation flexible <strong>et</strong> transparente des appareils dans le monde<br />
informatique. Nous présentons ici de manière succinte les principes de c<strong>et</strong>te nouvelle norme<br />
<strong>et</strong> apportons un bref point de comparaison avec la technologie Jini.<br />
5.2.2 Principes<br />
UPNP a pour seul but de perm<strong>et</strong>tre une forme d’interaction légère entre appareils d’une<br />
part <strong>et</strong> entre ordinateurs d’autre part. Il s’agit d’une version plus globale du standard<br />
très connu Plug and Play perm<strong>et</strong>tant de connecter tout type d’appareillage informatique<br />
sans besoin de configuration préalable. Un périphérique compatible UPNP est à même de<br />
s’insérer dans un réseau, d’obtenir une adresse IP, de propager ses capacités <strong>et</strong> de découvrir<br />
celles des autres appareils également présents. Enfin, le périphérique est à même de quitter<br />
le réseau aisément, sans laisser d’état incertain derrière lui.<br />
UPNP utilise principalement des techniques <strong>et</strong> des standards issus de la technologie<br />
Intern<strong>et</strong> : IP, TCP, UDP, HTTP <strong>et</strong> XML. Comme il est courant sur l’Intern<strong>et</strong>, les interactions<br />
sont basées sur des protocoles déclaratifs, exprimés en XML <strong>et</strong> publiés via HTTP.<br />
Un autre avantage de UPNP est la disparition complète de la notion de gestionnaire de<br />
périphérique. Ces derniers sont remplacés par des protocoles communs <strong>et</strong> connus de tous,<br />
indépendants du langage <strong>et</strong> du système d’exploitation. Certains périphériques plus évolués<br />
<strong>et</strong> plus puissants devraient être à même d’incorporer une composante Web, perm<strong>et</strong>tant ainsi<br />
d’accéder à certaines fonctionnalités, par exemple de configuration, à travers un navigateur<br />
Intern<strong>et</strong>.<br />
52
5.3. IEEE 1451<br />
5.2.3 Éléments de distinction<br />
La notion d’interface est plus contraignante ici que celle définie par Jini. En eff<strong>et</strong>,<br />
les proxy de Jini étant des instances de classes, une analyse plus fine peut être réalisée<br />
par le client en utilisant le mécanisme d’introspection de Java. Ainsi, les proxy sont-ils<br />
plus évolutifs car même s’ils utilisent une interface connue, donc si on est assuré d’y voir<br />
implémenté un ensemble minimum de possibilités connues, il est toujours possible d’augmenter<br />
ces possibilités en les découvrant au vol.<br />
Les proxy sont déplacés du service vers le client, perm<strong>et</strong>tant ainsi une approche hybride<br />
où le code est exploité à la fois du côté PC <strong>et</strong> du côté appareil. Dans le cas par exemple du<br />
DSP (Digital Signal Processing), on peut réaliser des proxy prenant les points de mesure<br />
sur l’appareil, en réseau, <strong>et</strong> implantant sur le PC l’algorithme de post-traitement. Une<br />
telle approche n’est pas possible avec UPNP car les périphériques sont seulement capables<br />
d’énumérer leurs caractéristiques.<br />
Enfin, UPNP spécificie un standard perm<strong>et</strong>tant d’intégrer les appareils PNP actuels<br />
<strong>et</strong> connectés sur un PC via USB par exemple. Une telle approche, connue sous le nom de<br />
surrogate, est également envisagée en Jini, afin de perm<strong>et</strong>tre aux appareils les plus anciens<br />
de participer à la communauté d’appareils Jini. Il s’agit en fait simplement d’incorporer<br />
dans les gestionnaires de périphériques existant sur le PC un service contrôlant l’appareil<br />
<strong>et</strong> le proposant sur le réseau. C’est ce principe qui sera appliqué dans le cadre du présent<br />
travail, lors de l’implantation du système de mesure.<br />
On peut dire en conclusion que UPNP a une vision à plus court terme <strong>et</strong> plus réduite en<br />
terme d’implantation de code associé au périphérique. UPNP offre l’avantage de requérir<br />
peu de ressources <strong>et</strong> d’être plus directement en contact avec les standards existants, tel<br />
que PNP.<br />
5.3 IEEE 1451<br />
La proposition en cours de normalisation IEEE 1451, a été détaillée au point 1.3.2. de ce<br />
travail. Celle-ci m<strong>et</strong> en oeuvre un modèle basé sur l’échange de messages entre actuateurs<br />
<strong>et</strong> noeuds de contrôle afin d’énumérer l’ensemble des possibilités de l’appareil. Une telle<br />
approche ne présente aucun aspect obj<strong>et</strong> <strong>et</strong> est semblable à celle adoptée par UPNP. Nous<br />
pouvons donc adopter la même approche que celle nous avons détaillée pour UPNP <strong>et</strong> nous<br />
rendre à l’évidence que c<strong>et</strong>te technologie est importante mais a une vision moins large que<br />
Jini.<br />
53
5.4. CONCLUSION<br />
5.4 Conclusion<br />
Pour palier aux limitations actuelles d’interfaçage des instruments de mesure ou des<br />
appareils en général, de nouveaux standards émergent <strong>et</strong> sont actuellement en cours de<br />
normalisation. Les architectures telles que Jini <strong>et</strong> CORBA offrent des possibilités plus<br />
intéressantes, puisque basées sur la technique des obj<strong>et</strong>s en adoptant une mise en oeuvre<br />
différente. Dans le cas très spécifique des systèmes d’instrumentation distribuées, Jini nous<br />
semble présenter un réel avantage sur CORBA, de par la possibilité d’incorporer du code<br />
mobile dans l’appareil afin de réaliser les opérations de post-traitement ou de fournir une<br />
interface graphique spécifique à l’appareil.<br />
Enfin, comme nous le verrons, Jini est la seule technologie offrant une approche réaliste<br />
des environements de terrain, en intégrant les aspects relatifs à la connexion ou la déconnexion<br />
brusque des appareils <strong>et</strong> en perm<strong>et</strong>tant la mise au point de stratégies efficaces dans le but<br />
d’assurer la stabilité de l’architecture déployée.<br />
54
Chapitre 6<br />
Contrôle local des instruments de<br />
mesure en Java<br />
Sommaire<br />
6.1 Contrôle local des instruments GPIB . . . . . . . . . . . . . . 55<br />
6.2 l’interface standard IEEE 488 pour Java . . . . . . . . . . . . 56<br />
La <strong>réalisation</strong> du système d’instrumentation virtuelle basé sur Jini <strong>et</strong> Java repose sur<br />
un modèle de développement incrémental : il s’ agira dans un premier temps de réaliser le<br />
contrôle purement local des instruments de mesure au moyen de bibliothèques standards <strong>et</strong><br />
de code écrit en C. Ce code natif sera ensuite interfacé avec des classes Java au moyen de<br />
la Java Native Interface (JNI) dont les principes ont été détaillés dans la première partie<br />
de ce travail. On adjoint enfin ces classes de contrôle à un service Jini, complétant ainsi<br />
notre approche <strong>et</strong> réalisant pratiquement la distribution de l’instrument sur le réseau local<br />
ou global.<br />
6.1 Contrôle local des instruments GPIB<br />
Le contrôle local des instruments GPIB se base sur une bibliothèque de fonctions de<br />
très bas niveau mis à disposition librement par National Instruments. C<strong>et</strong>te bibliothèque<br />
existe tant pour Windows que pour l’ensemble des plateformes Unix <strong>et</strong> Linux. Le code<br />
ainsi réalisé sur c<strong>et</strong>te base restera hautement portable pour peu qu’ on prenne soin à n’<br />
utiliser que des fonctions basiques.<br />
Il existe deux modes principaux d’exploitation du bus GPIB : l’initialisation du bus <strong>et</strong><br />
des instruments ainsi que l’envoi de messages <strong>et</strong> l’attente de réponses vers <strong>et</strong> depuis les<br />
instruments proprement dits.<br />
55
6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />
6.2 l’interface standard IEEE 488 pour Java<br />
Le bus IEEE488 pouvant être considéré comme un port de communication à part<br />
entière, nous avons rapproché tant que possible notre modèle de description <strong>et</strong> d’utilisation<br />
du bus en Java de celui proposé dans l’extension standard relative au ports d’entrée/sorties.<br />
C<strong>et</strong>te extension, connue sous le nom de Java Communication API (JavaComm) offre actuellement<br />
la possibilité de traiter avec les ports séries <strong>et</strong> parallèles de n’ importe quel<br />
système. l’approche r<strong>et</strong>enue par Sun consiste à<br />
1. énumérer tous les ports présents au moyen d’une classe d’énumération gardant trace<br />
de tous les ports trouvés<br />
2. les initialiser<br />
3. perm<strong>et</strong>tre d’instancier une classe par port repris dans l’énumération du premier point<br />
<strong>et</strong> d’ainsi prendre le contrôle d’un instrument présent sur le bus<br />
4. m<strong>et</strong>tre à disposition des méthodes dans la classe du port relatives à l’exploitation de<br />
ses capacités (envoi, écoute, création d’un stream pour y injecter des données, <strong>et</strong>c. )<br />
Nous avons adopté exactement la même approche afin de nous conformer au standard de<br />
la JavaComm <strong>et</strong> de proposer ce gestionnaire de périphérique comme complément à l’extension<br />
existante. Notre implantation comporte 5 classes qui sont décrites ci-dessous ainsi<br />
que sur la figure 6.1.<br />
GPIBDeviceIdentifier.java C<strong>et</strong>te classe est la première à devoir être instanciée.<br />
Elle se charge de prendre le contrôle du bus GPIB <strong>et</strong> de le réinitialiser. Dans un<br />
second temps, elle détecte <strong>et</strong> énumère tous les périphériques présents <strong>et</strong>, pour chaque<br />
appareil, garde trace de toutes les informations connues (identification, position sur<br />
le bus,<strong>et</strong>c.) . Il s’agit ici d’une réprésentation passive de l’instrument vu que celui-ci<br />
ne peut être encore contrôlé à ce point. On peut obtenir un instance de la classe<br />
GPIBDevice, représentant un périphérique GPIB, par l’appel à la méthode open().<br />
GPIBDevice.java Chaque instance de c<strong>et</strong>te classe représente un périphérique présent<br />
sur le bus IEEE488. Via les méthodes de c<strong>et</strong>te classe, nous sommes à même d’envoyer<br />
des messages à l’appareil ou d’obtenir des mesures.<br />
GPIBDriver.java La <strong>réalisation</strong> de certaines méthodes requiert l’utilisation de code<br />
natif comme nous l’avons vu. C<strong>et</strong>te classe abstraite décrit les fonctionnalités que tout<br />
gestionnaire natif du bus doit implémenter. Un fichier de configuration placé dans un<br />
lieu standard perm<strong>et</strong> de spécifier le nom d’une classe à charger, celle-ci implémentera<br />
le gestionnaire natif du bus sur le système local.<br />
WindowsGPIBDriver.java Sous-classe de GPIBDriver, c<strong>et</strong>te classe implémente les<br />
méthodes natives perm<strong>et</strong>tant l’initialisation <strong>et</strong> l’envoi de messages sur le bus. C’ est<br />
la seule qui comporte du code natif.<br />
La figure 6.2 présente le modèle suivant lequel l’utilisateur a accès à un appareil<br />
spécifique. La prise en charge du bus GPIB par le code Java, au travers de la carte<br />
56
6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />
contrôleur présente sur le PC, est initiée dès l’instantiation de la classe GPIBDeviceIdentifier.<br />
Le constructeur de c<strong>et</strong>te classe débute le dialogue avec le bus par la création d’une<br />
instance d’une classe implantant l’interface GPIBDriver. C<strong>et</strong>te classe, e.g. WindowsGPIB-<br />
Driver, comporte tout le code natif nécessaire afin d’interagir avec le bus. C’ est vers c<strong>et</strong>te<br />
classe que seront concentrés les appels de bas niveaux aux instruments du bus. Une classe<br />
d’énumération, associée à la classe d’identification, perm<strong>et</strong> de passer en revue l’ensemble<br />
des périphériques qui auront été détectés lors de l’initialisation du bus IEEE 488 par le<br />
GPIBDriver. Le périphérique est présenté au travers de la classe GPIBDeviceIdentifier,<br />
ce qui perm<strong>et</strong> d’obtenir des renseignements sans devoir réellement prendre le contrôle du<br />
périphérique. Enfin, la prise en charge proprement dite du dit périphérique se fera par l’instanciation<br />
d’une classe GPIBDevice. Créer une instance de c<strong>et</strong>te classe initialise <strong>et</strong> prend<br />
le contrôle de l’appareil correspondant, mais prend également en charge tous les appels<br />
nécessaires à la gestion des états d’erreur éventuel de l’appareil (e.g. erreurs de timeout).<br />
La classe GPIBDevice offre des méthodes perm<strong>et</strong>tant de communiquer efficacement avec<br />
l’instrument qu’ elle représente. A c<strong>et</strong> eff<strong>et</strong>, plusieurs types de messages sont disponibles :<br />
– demande de ferm<strong>et</strong>ure du port de communication<br />
– réinitialisation de l’instrument<br />
– envoi d’un chaîne de caractères <strong>et</strong> acquisition du message de réponse<br />
C<strong>et</strong>te interface réduite découle des principes mêmes de l’utilisation du bus GPIB :<br />
seuls des messages <strong>et</strong> des textes sont transférés sur les fils. Les changements d’état du<br />
bus sont traités de manière totalement transparente pour l’utilisateur : des exceptions<br />
sont levées lors de la communication afin d’effectuer une correspondance cohérente entre<br />
le changement d’état d’un fil d’erreur <strong>et</strong> le modèle événementiel de Java. La figure 6.3<br />
présente un diagramme de séquence montrant une utilisation de c<strong>et</strong>te interface afin de<br />
recueillir la tension aux bornes d’un voltmètre numérique. Il est ici important de noter que<br />
”demander la tension” n’ a aucun sens dans le modèle GPIB. Il faut donc, pour tout modèle<br />
d’appareil, m<strong>et</strong>tre en correspondance les méthodes que conceptuellement tout voltmètre<br />
pourrait présenter avec le code de la chaîne de caractère à envoyer sur le bus de manière à<br />
réaliser la demande proprement dite. Ainsi, ”demander la tension” se dira ”VOLT :10 :100”<br />
dans le langage de l’appareil repris sur la figure.<br />
57
6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />
58<br />
Fig. 6.1 – Classes utilisées pour la mise en oeuvre d’une interface de communication relative<br />
au bus GPIB
6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />
Fig. 6.2 – Modèle d’initialisation du bus GPIB en Java<br />
59
6.2. L’INTERFACE STANDARD IEEE 488 POUR JAVA<br />
Fig. 6.3 – Envoi de commandes à destination de l’instrument au moyen de la classe GPIB-<br />
Device<br />
60
Chapitre 7<br />
Utilisation de JINI dans le cadre de<br />
l’instrumentation virtuelle<br />
Sommaire<br />
7.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />
7.2 Interfaçage des instruments de mesure . . . . . . . . . . . . . 62<br />
7.2.1 Interfaces standardisées . . . . . . . . . . . . . . . . . . . . . . . 62<br />
7.2.2 Introspection dynamique des capacités des instruments . . . . . . 65<br />
7.3 Exploitation du réseau . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.3.1 Les domaines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.3.2 Instrumentation distante . . . . . . . . . . . . . . . . . . . . . . . 67<br />
7.4 Les apports propres à Jini . . . . . . . . . . . . . . . . . . . . . 68<br />
7.4.1 Robustesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68<br />
7.4.2 Interfaces graphiques . . . . . . . . . . . . . . . . . . . . . . . . . 69<br />
7.1 Introduction<br />
Afin de montrer également que notre approche peut parfaitement s’intégrer dans un<br />
environnement de prise de mesure actuel, tel que LabVIEW, nous avons réalisé une application<br />
offrant les mêmes possibilités de programmation visuelle, d’interfaçage utilisateur,<br />
<strong>et</strong>c. que présentent les logiciels disponibles sur le marché. C<strong>et</strong>te application présente un<br />
module de gestion prenant entièrement en charge le bus Jini <strong>et</strong> interagissant avec celui-ci<br />
au moyen d’un nombre extrêmement restreint de méthodes. Ainsi, nous montrerons que<br />
l’intégration de Jini dans les solutions existantes ne requiert pas la reconversion complète<br />
ou partielle de l’application <strong>et</strong> qu’il est réellement envisageable de développer une sorte<br />
61
7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />
de ”plugin” intégré à l’application lui perm<strong>et</strong>tant de tirer avantage des futurs instruments<br />
compatibles Jini.<br />
7.2 Interfaçage des instruments de mesure<br />
7.2.1 Interfaces standardisées<br />
Nous avons exposé dans la première partie de ce travail le besoin d’un ensemble commun<br />
d’interfaces perm<strong>et</strong>tant de décrire <strong>et</strong> donc de posséder une connaissance a priori sur<br />
les capacités de chacun des services présents dans une architecture Jini. Nous proposons<br />
à c<strong>et</strong> eff<strong>et</strong> une hiérarchie de classes propre à l’instrumentation afin de représenter les possibilités<br />
de chaque appareil ainsi que la manière dont ils peuvent s’ organiser entre eux.<br />
C<strong>et</strong>te hiérarchie est présentée à la figure 7.1 <strong>et</strong> n’ est pas exhaustive, tant la diversité<br />
des appareils <strong>et</strong> des types de mesures est grande. Les possibilités de chaque appareil, relatives<br />
à son aptitude à gérer les différentes formes d’ondes sont représentées à la figure 7.2.<br />
En adoptant de double modèle, basé sur une séparation des formes d’ondes <strong>et</strong> des aptitudes,<br />
nous atteignons un niveau de flexibilité élevé. En eff<strong>et</strong>, les possibilités de recherche<br />
s’ en trouvent enrichies : on pourra, par exemple, vouloir ne chercher que les instruments<br />
capables de traiter les signaux alternatif, ou visualiser tous les générateurs puis raffiner aux<br />
seuls capables de générer des formes d’ondes particulières. Du point de vue informatique,<br />
il suffira que le proxy proposé par le service implémente chacune de ces interfaces.<br />
La figure 7.3 montre comment ces diverses interfaces peuvent se combiner afin de<br />
définir les possibilités d’un appareil donné. Il s’agit ici d’un multimètre Hewl<strong>et</strong>t-Packard<br />
HP34401A qui est à même de mesurer des tensions, des courants,des impédances <strong>et</strong> des<br />
fréquences dans les modes continu autant qu’alternatif. De plus, il implémente une logique<br />
de déclenchement (triggering). Le HP34401A réalisera donc chacune des interfaces relatives<br />
à ces capacités car il est la réunion de toutes ces compétences.<br />
62
7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />
Fig. 7.1 – Diagramme de classes pour les interfaces standardisées entre appareils<br />
63
7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />
Fig. 7.2 – Diagramme de classes pour les interfaces représentant les formes d’ondes que<br />
chaque appareil est à même de traiter.<br />
64
7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />
Fig. 7.3 – Exemple d’appareil virtuel en Java. Le comportement de l’appareil est défini<br />
comme étant la réunion de chacune de ses capacités de base, menant à une <strong>réalisation</strong><br />
multiple d’interfaces.<br />
7.2.2 Introspection dynamique des capacités des instruments<br />
Comme nous l’avions déjà évoqué dans l’étude théorique de l’architecture Jini, le besoin<br />
de normalisation des interfaces qu’implémentera chaque appareil peut être vu comme<br />
fortement limitatif <strong>et</strong> peu évolutif, ne laissant pas de place aux spécificités que chaque<br />
constructeur pourrait être désireux d’implémenter. Nous allons montrer qu’en réalité ces<br />
interfaces n’ imposent qu’une ébauche des capacités mises à disposition par les services <strong>et</strong><br />
que, quoique nécessaire lors du processus de découverte, ces interfaces ne sont pas, à notre<br />
sens, une finalité en soi. l’utilisation du mécanisme d’introspection inhérent à la plateforme<br />
Java conjointement utilisée avec le modèle flexible d’interfaces connues pour l’instrumentation<br />
nous a permis de développer un utilitaire d’exploration des instruments connectés<br />
au réseau. C<strong>et</strong> outil présente les appareils selon trois modes de classification : le type de<br />
mesures qu’ils sont capables d’effectuer, leur localisation ainsi que le fabriquant du senseur<br />
ou de l’actuateur.<br />
Pour rappel, l’introspection est un mécanisme par lequel il est possible de connaître<br />
le nom d’une classe, l’ensemble des interfaces qu’elle implémente ainsi que les méthodes<br />
qui nous sont accessibles. Ainsi, en cherchant tous les instruments de mesure présents<br />
sur le réseau, en cherchant à connaître les interfaces que leurs proxy implantent, nous<br />
65
7.2. INTERFAÇAGE DES INSTRUMENTS DE MESURE<br />
pouvons établir une classification sans même nous soucier des interfaces standards que<br />
nous avons évoquées : l’introspection nous énumérera les interfaces implémentées. De même,<br />
l’énumération des attributs venant avec le proxy pourra-t-il faire apparaître ceux qui sont<br />
relatifs à la localisation <strong>et</strong> au nom du vendeur, <strong>et</strong> nous pourrons exploiter c<strong>et</strong>te information<br />
pour la construction de la vue principale de notre explorateur, présentée sous forme d’un<br />
arbre (Fig. 7.4).<br />
Fig. 7.4 – L’utilisation de l’introspection dynamique perm<strong>et</strong> d’offrir à l’utilisateur un vue<br />
très précise <strong>et</strong> confortable de tous les appareils disponibles sur le réseau local.<br />
Enfin, nous avons pu m<strong>et</strong>tre en évidence que l’introspection des méthodes accessibles<br />
sur le proxy perm<strong>et</strong> également de construire une interface locale pour un instrument<br />
éventuellement plus riche que celle décrite par dans l’interface connue. En eff<strong>et</strong>, soit la<br />
classe proxy de l’appareil implémentera simplement l’interface, soit elle se conformera au<br />
standard <strong>et</strong> ajoutera certains membres propres au constructeur ou la gamme d’appareil.<br />
Ces membres seront découverts sur le client par introspection en cours d’exécution <strong>et</strong>, s’<br />
il s’ agit par exemple d’utiliser un mode de programmation visuelle similaire à LabVIEW,<br />
on pourra aisément modifier l’icône <strong>et</strong> y ajouter les connecteurs relatifs à ces méthodes.<br />
L’utilisation de ce mécanisme peut s’ avérer relativement coûteux en temps si on se place<br />
du point de vue du traitement des données en temps réel, mais il enrichit grandement les<br />
possibilités offertes par l’utilisation de Jini comparativement à d’autres modèles beaucoup<br />
plus statiques <strong>et</strong> moins évolutifs. Ce dernier point pourrait donc s’ avérer être un avantage<br />
décisif quant à un choix à long terme pour l’établissement de mécanismes de communication<br />
entre appareils à grande échelle.<br />
66
7.3. EXPLOITATION DU R ÉSEAU<br />
7.3 Exploitation du réseau<br />
7.3.1 Les domaines<br />
Nous avons exploité la notion de domaine contrôlé par le Lookup Service afin de propager<br />
les services fournis par les appareils à travers un réseau plus large. Rappelons que le<br />
Lookup est en service <strong>et</strong> qu’à ce titre il sera ”détecté” par les autres Lookup sur le même<br />
sous-réseau que ce premier. Ainsi, le déploiement hiérarchique au sens du réseau des machines<br />
responsable de la prise en charge du Lookup local perm<strong>et</strong> de créer des connexions de<br />
bout en bout entre deux sous-réseaux voisins mais non connectés directement. Les Lookup<br />
ainsi mis en présence m<strong>et</strong>tent en commun l’information qu’ils ont collectée sur l’ensemble<br />
des services qui se sont enregistrés auprès d’eux. C<strong>et</strong>te information s’ échange ainsi de<br />
machine en machine, pour autant que celles-ci soient en charge du même domaine <strong>et</strong> que<br />
la politique de sécurité en vigueur pour chacun des services de Lookup le perm<strong>et</strong>te, ce que<br />
nous a permis de constituer par propagation une infrastructure de prise de mesure à grande<br />
échelle.<br />
L’intérêt d’une telle technique repose également sur la robustesse qu’elle engendre.<br />
En eff<strong>et</strong>, si une passerelle entre deux sous-réseaux venait à tomber en panne, ou même<br />
qu’un service de lookup subisse une panne, l’information pourrait toujours emprunter un<br />
chemin alternatif éventuellement placé de manière redondante à c<strong>et</strong> eff<strong>et</strong>. Le déploiement<br />
des domaines, loin d’être simplement vu comme un mécanisme de sécurité, doit être pris<br />
en considération lors de la mise en service du réseau local basé sur Jini. Nous avons pu<br />
constater que celui-ci nous garantira ainsi une robustesse ainsi qu’une flexibilité accrues.<br />
7.3.2 Instrumentation distante<br />
Les services <strong>et</strong> clients désireux de prendre part à la communauté Jini locale se doivent<br />
dans un tout premier temps d’avoir connaissance d’un ou plusieurs Lookup au travers<br />
desquels ils déposeront leur proxy s’ils se posent en services ou effectueront leurs recherches<br />
s’ils se posent en clients. A c<strong>et</strong>te fin, nous avions vu qu’il existe deux techniques : la<br />
détection dynamique sur le sous-réseau local <strong>et</strong> l’attribution statique.<br />
La détection dynamique se basant sur un envoi de messages encapsulés dans des paqu<strong>et</strong>s<br />
UDP en propagation multicast, ceux-ci seront à même de m<strong>et</strong>tre en contact le service avec<br />
tout Lookup présent dans le champ accessible à de tels paqu<strong>et</strong>s, c’est à dire au minimum<br />
le sous-réseau local. Un propagation plus étendue dépend des directives appliquées lors du<br />
passage de chaque passerelle. Celle-ci peut décider de diminuer le temps de vie du paqu<strong>et</strong><br />
(TTL : Time To Live), le supprimant lorsque ce paramètre est nul, ou bien de le filtrer ou<br />
encore de ne pas le modifier. Nous exploitons c<strong>et</strong>te technique d’investigation dynamique<br />
de manière à filer un tissu local d’instruments sans besoin de configuration. On parlera de<br />
réseau local d’instrumentation [11] [8].<br />
Le fait de pouvoir fournir l’adresse d’un lookup est une vue plus statique de l’interaction<br />
services-clients. C<strong>et</strong>te approche perm<strong>et</strong> par exemple d’utiliser les capacités d’un lookup<br />
67
7.4. LES APPORTS PROPRES À JINI<br />
situé hors du sous-réseau local <strong>et</strong> éventuellement fort distant. De nombreuses expériences<br />
d’instrumentation ont pour but d’exploiter les réseaux à grande échelle <strong>et</strong> plus particulièrement<br />
l’Intern<strong>et</strong> afin de réaliser de l’instrumentation à distance [16].<br />
Nous voyons donc que Jini, de par sa capacité d’utilisation des ressources locales <strong>et</strong><br />
globales rejoint les deux exploitations actuelles qui sont faites du réseau dans le cadre de<br />
la prise de mesure assistée par ordinateur. Jini propose ainsi une solution utilisable quel<br />
que soit le modèle de déploiement final envisagé.<br />
7.4 Les apports propres à Jini<br />
7.4.1 Robustesse<br />
La robustesse d’un système d’actuateurs ou de capteurs est primordiale, voire critique<br />
dans certains cas. Il s’agit d’être à même d’attester à tout moment l’état de bon fonctionement<br />
des appareils. Si un capteur tombe en panne, est défectueux ou si la mesure<br />
demandée ne peut s’effectuer, il est impératif d’avoir connaissance du problème dans un<br />
délai approprié.<br />
Jini possède un mécanisme que nous pourrions utiliser à c<strong>et</strong> eff<strong>et</strong> : il s’agit de la gestion<br />
des exceptions distantes (remote exceptions) <strong>et</strong> de la notion de bail du proxy (leases). La<br />
gestion des exceptions distantes nous offre la possibilité d’exécuter un segment de code<br />
spécifique lorsqu’une méthode activée sur un obj<strong>et</strong> distant a levé une exception. C<strong>et</strong>te<br />
méthode représentant en fait une commande envoyée à l’instrument, nous nous assurons<br />
ainsi que celles-ci prennent place correctement dans le processus de mesure. C<strong>et</strong>te technique<br />
traitant la problématique du client, il nous reste à envisager la partie liée au service ; à<br />
savoir la détection de la disparition de l’instrument pour quelque raison que ce soit.<br />
Le service de son côté peut subir deux types de déficiences principales : la panne du<br />
réseau sur lequel il est connecté <strong>et</strong> la panne de l’appareil lui-même. Nous venons de montrer<br />
que les mécanismes d’exception gèrent l’envoi de commandes vers le service ainsi que sa<br />
<strong>réalisation</strong>. La panne de réseau n’échappe pas à ce cas de figure <strong>et</strong> toute panne du réseau<br />
sera instantanément détectée. Seule subsiste la problématique de la disparition de l’appareil<br />
<strong>et</strong> donc de l’invalidation de sa disponibilité pour les clients chargés de la collection des<br />
mesures. Nous proposons comme solution l’exploitation du mécanisme de bail. En ajustant<br />
correctement les paramètres de fréquence de vérification <strong>et</strong> de temps maximum de vie du<br />
proxy, on peut s’assurer que le départ d’un appareil ne laissera pas d’incohérence quant<br />
aux éléments disponibles sur le réseau. Ces paramètres étant choisis par l’utilisateur, il sera<br />
possible de s’appuyer sur des modèles statistiques ou des simulations afin de déterminer<br />
les valeurs critiques assurant un sécurité optimale de l’ensemble de l’expérimentation.<br />
Jini présente intrinsèquement tous les mécanismes nécessaires à la <strong>réalisation</strong> d’un<br />
système stable <strong>et</strong> sur lequel nous sommes à même d’imposer les contraintes de robustesse<br />
que nous désirons.<br />
68
7.4. LES APPORTS PROPRES À JINI<br />
7.4.2 Interfaces graphiques<br />
Jini est basé sur la plateforme Java <strong>et</strong> utilise abondament RMI afin, par exemple, de<br />
transporter les proxy ainsi qu’éventuellement toutes les classes requises sur la machine virtuelle<br />
du client afin d’exploiter les capacités de ce dernier. Un groupe de travail issu de la<br />
société Artima [1] a proposé la mise au point d’une approche unifiée perm<strong>et</strong>tant la mise<br />
en oeuvre d’interfaces graphiques issues du service.<br />
Parallèlement à cela, de nombreux logiciels livrés avec les instuments de mesure proposent<br />
la visualisation des informations sous la forme d’une interface interactive semblable<br />
au panneau frontal de l’appareil. Ainsi, de la même manière qu’il agirait manuellement sur<br />
les boutons de l’appareil, l’utilisateur peut agir avec sa souris sur l’interface graphique, les<br />
deux approches menant au même résultat.<br />
Nous avons combiné ces deux techniques afin de proposer des interfaces graphiques<br />
spécifiques à chaque appareil, accessibles à travers Java <strong>et</strong> Jini <strong>et</strong> issues de l’appareil. L’interface<br />
graphique éventuelle apparait ainsi comme un attribut de l’appareil, accompagnant<br />
le proxy dans son déplacement vers le client. Le client peut alors choisir à tout moment<br />
d’instancier la ou les classes constituant l’interface. En réalité, seul un constructeur d’interface<br />
(User Interface Factory) est couplé avec le proxy afin de ne pas avoir à instancier<br />
celle-ci du côté service, ce qui serait coûteux en ressource. Les interfaces réalisées dans le<br />
cadre de ce travail perm<strong>et</strong>tent par exemple de configurer les attributs secondaires de l’appareil<br />
– localisation, commentaire spécifique à la mesure – ou de présenter le panneau avant<br />
de ce dernier. Les figures 7.5 <strong>et</strong> 7.6 présentent deux interfaces perm<strong>et</strong>tant de configurer un<br />
voltmètre Hewl<strong>et</strong>t-Packard HP-34401A.<br />
Le proj<strong>et</strong> initié par les chercheurs de chez Artima propose uniquement un ensemble<br />
d’interfaces afin de rendre possible la détection de la présence d’une interface graphique attribut<br />
du proxy. Ces interfaces perm<strong>et</strong>tent d’envoyer tous les types de primitives graphiques<br />
existant dans Java : du simple panneau à intégrer dans une application jusqu’à une application<br />
complète. On peut ainsi imaginer d’inclure dans chaque appareil des éléments qui<br />
s’insèreraient dans les applications afin de rendre compte des interactions spécifiques avec<br />
chaque type d’instrument. Ces éléments graphiques étant simplement des obj<strong>et</strong>s distribués,<br />
ils interagissent de manière totalement transparente avec l’application client s’intégrant<br />
alors très aisément dans tout type d’application. On pourrait même imaginer la standardisation<br />
d’un ensemble d’interfaces qui seraient toujours présentes, quel que soit le type<br />
d’instrument, <strong>et</strong> les incorporer d’office dans les futurs logiciels client utilisant Jini.<br />
69
7.4. LES APPORTS PROPRES À JINI<br />
Fig. 7.5 – L’interface graphique envoyée par le service Jini perm<strong>et</strong> de présenter la face<br />
avant de l’appareil<br />
Fig. 7.6 – La configuration de l’appareil peut s’effectuer à l’aide de l’interface qu’il m<strong>et</strong> à<br />
disposition, s’approchant ainsi tant que possible des aspects spécifiques au constructeur.<br />
70
Chapitre 8<br />
Intégration de Jini dans les solutions<br />
actuelles<br />
Sommaire<br />
8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71<br />
8.2 Implantation d’une interface de programmation visuelle intégrant<br />
Jini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />
8.3 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75<br />
8.1 Motivation<br />
Dans le premier chapitre de ce travail nous avons largement exposé les intérêts de<br />
l’instrumentation virtuelle <strong>et</strong> plus particulièrement de l’utilité de disposer de logiciels perm<strong>et</strong>tant<br />
la <strong>réalisation</strong> de programmes complexes liés au traitement du signal. Afin de<br />
réduire au maximum les difficultés que soulève la programmation d’interfaces de contrôle,<br />
la technique de la programmation par fils est utilisée. Le programme se présente alors<br />
sous la forme d’une interface graphique faite de fils <strong>et</strong> d’icônes disposées selon le flux de<br />
traitement des informations.<br />
De nombreux logiciels m<strong>et</strong>tent en oeuvre ce type de programmation mais le plus universellement<br />
adopté est sans conteste LabVIEW. Il suffit pour s’en convaincre de voir la<br />
place que lui réserve les industriels ainsi que les universités dans leurs programmes de formations.<br />
LabVIEW a c<strong>et</strong> avantage qu’il est un logiciel ouvert perm<strong>et</strong>tant à l’utilisateur<br />
d’incorporer ses propres routines. Celles-ci peuvent être écrites dans le langage graphique<br />
de LabVIEW (G-Programming) ou résider dans une bibliothèque de fonction écrite dans<br />
un langage tel que C ou FORTRAN.<br />
71
8.2. IMPLANTATION D’UNE INTERFACE DE PROGRAMMATION VISUELLE<br />
INTÉGRANT JINI<br />
Compte tenu de la quasi-universalité de c<strong>et</strong>te approche, la <strong>réalisation</strong> d’un système<br />
d’instrumentation distribuée au moyen de quelque technique que ce soit, y compris Jini, se<br />
doit donc de s’intégrer tant que possible dans les modèle offerts par ces logiciels.<br />
Nous tenterons de prouver dans les sections qui suivent qu’il est possible d’intégrer<br />
totalement Jini dans les solution existantes, tel LabVIEW, sans recourir à une modification<br />
en profondeur du code. Ainsi, il est possible d’exploiter dans un futur proche les appareils<br />
utilisant Jini en installant sur le logiciel client une couche de gestion de Jini en relation<br />
avec les éléments de programmation visuelle.<br />
8.2 Implantation d’une interface de programmation<br />
visuelle intégrant Jini<br />
La <strong>réalisation</strong> d’une telle interface, en imposant la contrainte de ne pas avoir à repenser<br />
le logiciel existant, nous a conduit à intégrer la gestion de Jini dans un logiciel<br />
annexe, existant en parallèle du premier, <strong>et</strong> à définir un ensemble minimal de messages<br />
entre c<strong>et</strong>te couche <strong>et</strong> le logiciel. Ces messages sont au nombre de deux : ajouter ou supprimer<br />
un périphérique. Le fait que le nombre de message soit très p<strong>et</strong>it rend plus aisée<br />
l’implantation de l’adaptateur entre l’application <strong>et</strong> Jini mais impose donc qu’un traitement<br />
conséquent soit effectué à l’interface entre le logiciel local <strong>et</strong> le réseau.<br />
L’adaptateur Jini veillera à découvrir les instruments présents sur le bus, gèrera les<br />
évènement émis par les services ou le lookup <strong>et</strong> téléchargera tous les proxy des appareils<br />
afin de les m<strong>et</strong>tre à disposition de l’utilisateur. L’introspection dynamique des classes perm<strong>et</strong><br />
de préparer les icônes, les habillant, liant chaque connecteur à une méthode particulière<br />
de l’obj<strong>et</strong> proxy, avant de les placer dans la boite à outils.<br />
Afin de prouver la faisabilité de ce concept, qui est crucial pour la viabilité d’une solution<br />
basée sur Jini dans la cadre de l’instrumentation, nous avons réalisé une application légère<br />
semblable à LabVIEW. Celle-ci est présentée à la figure 8.1 <strong>et</strong> est constitué de quatre<br />
éléments principaux :<br />
– une barre de fonctions, visible sur le dessus, contenant les fonctions mises à disposition<br />
de l’utilisateur. La fonction principale est un élément graphique indiquant le nombre<br />
présenté à son entrée sur un panneau ayant l’apparence d’un afficheur numérique à<br />
LEDs.<br />
– une boite à outils, située à gauche, dans laquelle les appareils sont classés selon trois<br />
catégories : les interfaces qu’ils réalisent, leurs localisations <strong>et</strong> leurs constructeurs.<br />
C<strong>et</strong> élément est l’adaptateur Jini ; celui-ci communique avec le panneau de programmation<br />
par ajout ou r<strong>et</strong>rait d’appareils à la demande de l’utilisateur.<br />
– le panneau de programmation, au centre, sur lequel l’utilisateur dispose les icônes <strong>et</strong><br />
les connecte afin de spécifier le programme de manière graphique<br />
72
8.2. IMPLANTATION D’UNE INTERFACE DE PROGRAMMATION VISUELLE<br />
INTÉGRANT JINI<br />
– le panneau d’affichage, en bas, qui présente les paramètres à l’utilisateur. Il servira<br />
par exemple ici à afficher la tension mesurée.<br />
Fig. 8.1 – L’application JINILab qui présente la même interface que LabVIEW<br />
Au lancement de l’application, une couche de gestion du bus Jini est instanciée en parallèle.<br />
Celle-ci s’intègre dans le logiciel m<strong>et</strong>tant à disposion un navigateur d’instruments.<br />
Elle initie son cycle de vie par la recherche du lookup local, au moyen de paqu<strong>et</strong>s de propagation<br />
envoyés sur le sous-réseau, <strong>et</strong> collecte les proxy de tous les instruments présents<br />
sur le bus à c<strong>et</strong> instant. Du point de vue de l’interrogation par le client que nous avons<br />
évoquée dans le chapitre relatif à Jini, il s’agit de trouver tous les proxy implantant l’interface<br />
générique InstrumentationDevice. Comme il s’agit de l’interface dont dérivent tous les<br />
instruments, nous avons l’assurance que le lookup renverra l’ensemble de appareils dont il<br />
a connaissance.<br />
73
8.2. IMPLANTATION D’UNE INTERFACE DE PROGRAMMATION VISUELLE<br />
INTÉGRANT JINI<br />
Commence alors un travail d’introspection systématique du comportement du proxy.<br />
Nous avons choisi d’en isoler les interfaces qu’il implante mais également deux sous-classes<br />
de la classe Entry qu’il contiendra éventuellement : les classes Location <strong>et</strong> Vendor qui perm<strong>et</strong>tent<br />
d’avoir une connaissance de la localisation ainsi que du nom du constructeur. Le<br />
proxy est alors inséré dans les trois arbres – comportement, lieu <strong>et</strong> vendeur – du navigateur.<br />
L’utilisateur peut décider d’utiliser les fonctionalités particulières de l’appareil en cliquant<br />
à droite <strong>et</strong> en accédant ainsi à un menu construit lors de la phase d’introspection.<br />
Ce menu perm<strong>et</strong>tra d’instancier, le cas échéant, une des interfaces graphiques convoyées<br />
avec le proxy, mais il perm<strong>et</strong>tra également de placer l’icône de l’instrument sur le plan de<br />
programmation. La figure 8.3 montre que l’intégration de l’interface de l’appareil s’intègre<br />
parfaitement avec le logiciel de base.<br />
Une fois l’icône placée sur le bureau, il est possible de raccorder un de ses connecteur<br />
avec un élément existant du plan de programmation. Dans la cas présenté à la figure 8.4<br />
il s’agit de l’entrée d’un afficheur graphique présentant sur le panneau de visualisation la<br />
valeur de mise à ses bornes. Ce composant a été sélectionné dans les outils standards du<br />
logiciel présents sur la barre du haut. La valeur à présenter est obtenue en connectant au<br />
moyen d’un fil l’entrée de l’afficheur avec la borne de prise de tension de l’icône modélisant<br />
ici un multimètre Hewl<strong>et</strong>t-Packard HP34401A. Notons ici que les connecteurs présentés<br />
par le composant graphique sont eux aussi créés par introspection. Il ne faut donc à aucun<br />
moment installer un quelconque gestionnaire ou ensemble d’icônes particuliers pour accéder<br />
à toutes les fonctionalités offertes par l’instrument.<br />
La gestion des erreurs<br />
La gestion des exceptions se fait à deux niveaux : dans le logiciel, lors de l’appel<br />
d’une méthode sur l’obj<strong>et</strong> distant <strong>et</strong> au niveau de la couche de gestion de Jini, lorsqu’un<br />
évènement est propagé.<br />
les évènements propagés par le lookup concernent la modification de la composition du<br />
bus ( match to no match, no match to match ) ou le changement de comportement d’un<br />
obj<strong>et</strong> déjà connu du client. Le changement d’attribut ou l’apparition d’un périphérique<br />
modifiera l’arbre de présentation dynamique des instruments alors que la disparition d’un<br />
élément du bus entrainera l’envoi d’un message à destination du logiciel de programmation<br />
graphique. Il s’agit du message relatif au r<strong>et</strong>rait d’une icône de l’ensemble de celles<br />
accessibles. Un message d’erreur accompagnera éventuellement c<strong>et</strong>te action.<br />
Dans la cas ou l’activation de la méthode distante échoue, un message est produit afin<br />
d’avertir l’utilisateur <strong>et</strong> l’expérimentation est suspendue. Comme il s’agira plus que probablement<br />
d’un appareil ayant subit une panne, il y a de fortes chances que c<strong>et</strong>te première<br />
alerte sera suivie d’un r<strong>et</strong>rait de l’icône, lorsque le lookup aura confirmé l’invalidation du<br />
bail du proxy. A titre examplatif <strong>et</strong> pour clore c<strong>et</strong>te description de notre logiciel, la figure<br />
8.5 présente une session typique de présentation d’erreur.<br />
74
8.3. CONCLUSIONS<br />
8.3 Conclusions<br />
L’intégration de Jini dans des logiciels existants, tels LabVIEW, est cruciale pour les<br />
industriels désireux d’exploiter c<strong>et</strong>te technologie. Nous avons montré à partir d’un exemple<br />
simple qu’il est possible d’adopter un modèle pour l’implantation <strong>et</strong> le déploiement d’une<br />
couche logicielle se greffant sur les solution existantes. C<strong>et</strong>te couche prennant en charge<br />
toute la mise en oeuvre de Jini existe en parallèle du logiciel <strong>et</strong> communique avec celui-ci<br />
au moyen d’une interface extrèmement réduite. Dès lors, peu ou pas de remodélisation ou<br />
de recompilation de l’application n’est nécessaire pour y intégrer harmonieusement Jini.<br />
75
8.3. CONCLUSIONS<br />
Fig. 8.2 – Instanciation de l’interface graphique fournie par l’appareil dans le contexte de<br />
l’application. C<strong>et</strong>te interface est propre à chaque périphérique est générée par l’appareil<br />
sur la plateforme du programme client.<br />
76
8.3. CONCLUSIONS<br />
Fig. 8.3 – Un autre exemple de panneau frontal fourni par l’appareil <strong>et</strong> qui peut être incorporé<br />
dans l’application client à la demande, sans besoin d’installer le moindre programme<br />
utilitaire associé au périphérique.<br />
77
8.3. CONCLUSIONS<br />
Fig. 8.4 – Réalisation d’une application simple présentant la tension au bornes d’un<br />
voltmètre modélisé par l’icône verte.<br />
78
8.3. CONCLUSIONS<br />
Fig. 8.5 – Les exceptions lors des appels de méthodes se doivent d’être gérées en Jini,<br />
assurant que l’utilisateur sera informé de la moindre erreur<br />
79
Chapitre 9<br />
Conclusion <strong>et</strong> perspectives<br />
L’intégration des instruments de mesure dans les systèmes électroniques <strong>et</strong> informatiques<br />
requiert l’intervention de technologies spécifiques liées à la problématique du contrôle<br />
des appareils distants. Les moyens mis en oeuvre actuellement n’offrent pas de solution<br />
globale, tant du point de vue de l’intégration des réseaux, que de celui de l’interaction<br />
spontanée <strong>et</strong> dynamique d’appareils entre eux.<br />
Nous avons établi dans un premier temps un état de l’art en la matière montrant<br />
qu’aucune des technologies présentes en instrumentation ne perm<strong>et</strong>tait une intégration des<br />
modèles basés sur les obj<strong>et</strong>s. De tels modèles sont une nécessité car ils perm<strong>et</strong>tent une<br />
réusabilité du code accrue ainsi que l’adoption d’un schéma de développement hautement<br />
flexible. Les extensions de ces modèles perm<strong>et</strong>tant le déploiement à travers le réseau <strong>et</strong><br />
l’interaction entre obj<strong>et</strong>s nous a semblé la meilleure approche pour le développement d’un<br />
système d’instrumentation distribuée.<br />
A ce moment, le choix d’un formalisme d’implantation conditionne la conceptualisation<br />
des éléments clés du système. Nous avons étudié deux grandes architectures actuelles de<br />
mise en oeuvre d’obj<strong>et</strong>s distribués : CORBA <strong>et</strong> Jini. Quoique semblables en apparence<br />
<strong>et</strong> présentant des caractéristiques comparables, l’approche de Jini nous a semblé la plus<br />
appropriée au vu des besoins spécifiques de l’instrumentation de terrain intégrant une composante<br />
réseau.<br />
L’architecture Jini perm<strong>et</strong>tant le déplacement de code du service vers le client, nous<br />
avons montré que lorsqu’appliquée plus particulièrement aux instruments de mesure, elle<br />
était à même de perm<strong>et</strong>tre la construction de systèmes distribuant la puissance de calcul<br />
entre tous les prenants parts du bus <strong>et</strong> exploitant ainsi la puissance des PC présents.<br />
La notion de gestionnaire de périphérique disparaît également à partir du moment où<br />
l’ensemble des logiciels de gestion de l’instrument est intégré à même ce dernier. Des interfaces<br />
élaborées <strong>et</strong> conviviales peuvent ainsi être mises à disposition par le service afin que<br />
le client puisse affecter la configuration de l’appareil, sans avoir recours à la mise en oeuvre<br />
80
d’un quelconque logiciel propriétaire. Le niveau d’abstraction atteint perm<strong>et</strong> également<br />
d’interchanger les appareils entre eux sans besoin de reconfiguration, atteignant ainsi une<br />
flexibilité inexistante actuellement.<br />
Des mécanismes de protection <strong>et</strong> de robustesse faisant directement part intégrante du<br />
modèle Jini montrent combien c<strong>et</strong>te technologie va à la rencontre des prérequis de mise en<br />
oeuvre de c<strong>et</strong>te technologie dans des processus critiques.<br />
La possibilité d’intégration d’une telle solution dans les logiciels industriels d’automation<br />
<strong>et</strong> de contrôle a été demontrée par la <strong>réalisation</strong> d’un logiciel de pilotage de nos<br />
instruments. Un couche de gestion propre à Jini a été développée <strong>et</strong> mise en relation avec le<br />
logiciel, montrant qu’il est possible de voir l’architecture Jini comme un ajout déployable<br />
à côté des grands standards industriels, tel LabVIEW.<br />
Mais nous n’avons assurément pas exploité toutes les possibilités liées à Jini <strong>et</strong> au<br />
déplacement dynamique de code entre noeuds du réseau. Le fait qu’un appareil présente<br />
à la fois un comportement donné mais qu’il puisse fournir du code propre à sa mise en<br />
oeuvre est déjà pour le moins une approche totalement nouvelle. Il est évident qu’il serait<br />
extrèmement intéressant de compléter celle-ci par l’ajout de services spécifiques, existant<br />
purement sous forme de logiciels distribués. De tels réseaux seraient constitués d’une part<br />
des appareils connectés à ceux-ci – instruments, PC, systèmes embarqués – <strong>et</strong> d’autre part<br />
d’agents intelligents interagissant avec les services <strong>et</strong> les client de manière à former une<br />
configuration adaptative à même de répondre aux besoins locaux.<br />
81
Bibliographie<br />
[1] Jini forum at artima. http ://www.artima.com/jini/.<br />
[2] National instrument’s site in gpib. http ://www.ni.com/gpib.<br />
[3] Remote M<strong>et</strong>hod Invocation Specification.<br />
[4] Site officiel de l’object management group. http ://www.ni.com/gpib.<br />
[5] V. Piuri A. Ferrero. A simulation tool for virtual laboratory expirements in a www<br />
environement. IEEE Transactions on Instrumentation and Measurement, 48(3), 1999.<br />
[6] S. Deering. Ieee-488 general purpose instrumentation bus manual. Technical report,<br />
Anthony J. Caristi, Feb. 1989.<br />
[7] B.E. Segee D.J. Rawnsley, D.M. Hummels. A virtual instrument bus using n<strong>et</strong>work<br />
programming. volume vol.1.<br />
[8] M. Dunbar. Plug-and-play sensors in wrireless n<strong>et</strong>works. IEEE Instrumentation and<br />
Measurement Magazine, March 2001.<br />
[9] W. Keith Edwards. Core Jini 2nd edition. Java Series. second edition edition, 2001.<br />
[10] UPNP Forum. Universal Plug and Play Device Architecture, 8 June 2000.<br />
http ://www.upnp.org/download/UPnPDA10 20000613.htm.<br />
[11] L. Nigro G. Fortino, D. Grimaldi. Multicast control of mobile measurement systems.<br />
IEEE Transactions on Instrumentation and Measurement, 47(5), 1998.<br />
[12] Ben Brosgol P<strong>et</strong>er Dibble Steve Furr David Hardin Mark Turnbull Greg Bollella,<br />
James Gosling. The Real-Time Specification for Java. Addison Wesley, 2001.<br />
[13] Guy Steele Gilad Bracha James Gosling, Bill Joy. The Java Language Specification,<br />
Second Edition. Addison Wesley, 2001.<br />
[14] Troy Downing Jon Meyer. The Java Virtual Machine. O’Reilly, 1997.<br />
[15] R. D. Shneeman K. B. Lee. Distributed measurement and control based on the ieee1451<br />
smart tranducer interface standards. IEEE Transactions on Instrumentation and Measurement,<br />
49(3), 2000.<br />
[16] F. Ferraris A. Ferrero C. Offeli M. Parvis V. Piuri L. Ben<strong>et</strong>azzo, M. Bertocco. A<br />
web-based distributed virtual educational laboratory. IEEE Transactions on Instrumentation<br />
and Measurement, 49(2), 2000.<br />
[17] V. Piuri L. Cristaldi, A. Ferrero. Programmable instruments, virtual instruments and<br />
distributed measurement systems. IEEE Instrumentation and Measurement magazine.<br />
82
BIBLIOGRAPHIE<br />
[18] Sing Li. Professional Jini. Programmer to Programmer. first edition edition, 2001.<br />
[19] Sheng Liang. The Java Native Interface Specification. Addison Wesley, 1999.<br />
[20] Jan Newmarch. Jan Newmarch’s Guide to JINI Technologies, 26 August 2000.<br />
http ://pandonia.canberra.edu.au/java/jini/tutorial/Jini.xml.<br />
[21] F. Cennamo P. Daponte P. Arpaia, A. Baccigaluppi. A distributed laboratory based<br />
on geographic n<strong>et</strong>work.<br />
[22] P. Daponte P. Arpaia, F. Cennamo and M. Savastano. A distributed measurement<br />
laboratory based on object oriented systems.<br />
[23] D. Grimaldi P. Daponte and L. Nigro. Distributed measurement systems : An object<br />
oriented architecture and a case study. Computer Standards Interfaces, 18(5).<br />
[24] Dan Harkey Robert Orfali. Client Server programming with Java and CORBA. Wiley<br />
Computing, 1998.<br />
[25] Jon Siegel. CORBA : Fundamentals and programming. Wiley Computing, 1996.<br />
[26] H. J. W. Spoedler. Virtual instruments and virtual environements. IEEE. Instrum.<br />
Meas. Mag., 2.<br />
[27] William A. Ruh Thomas J. Mowbray. Inside CORBA. Addison Wesley, 1997.<br />
83