Monday, October 11, 2010

TPTP Architecture, l'Agent Controller and co

N.B. : Les informations présentées ici ne sont valables qu'à partir de la version 5.0 de Java

Suite à un premier billet sur le mise en place de l'Agent Controller du projet TPTP en voici un autre pour décrire un peu plus précisément son architecture. Au premier abord il n'est en effet pas évident de s'y retrouver entre les éléments mis en jeu.

Vue d'ensemble de l'architecture

L'architecture de TPTP est organisée autour de 3 éléments :
  • L'Agent : il s'agit d'un programme qui s’exécute dans le même processus que la JVM. Il est notifié des évènements internes au travers de la JVM Tool Interface (JVMTI). JVMTI est une interface qui permet de connaître l'état de la JVM et de contrôler de manière avancée l'exécution des applications Java qui y sont exécutées.
  • L'Agent Controller : Il s'agit d'un programme qui doit résider sur la même machine que la JVM. Il gère tout le processus de démarrage et de communication avec l'agent. Il fait office de médiateur entre les agents et les clients.
  • Le Client : Dans le cadre de TPTP il s'agit en général de l'IDE Eclipse. Il collecte les données au travers de l'Agent Controller, cependant il n'est pas nécessaire que les 2 résident sur la même machine.


Quelques règles :
  • Un Client peut se connecter à un ou plusieurs Agent Controllers
  • Un Agent Controller peut servir zéro ou plusieurs Clients
  • Un Agent peut servir zéro ou plusieurs Clients
  • Un Client, au travers de l'Agent Controller, peut interagir avec zéro ou plusieurs Agents
  • Un Agent Controller peut contrôler zéro ou plusieurs Agents mais un Agent ne peut être connecté qu'à un seul Agent Controller.
Invocation d'un Agent au sein de la JVM
  Généralités
Les agents sont chargés au démarrage de la JVM grace à l'option suivante :
 -agentlib:<agent-lib-name>=<options>
Ce qui suit -agentlib: est le nom de la bibliothèque à charger. La recherche de cette bibliothèque est dépendante du système d'exploitation que vous utilisez. Elle doit être dans un chemin cité dans la variable d'environnement PATH sous Windows ou LD_LIBRARY_PATH sous Unix.
Par exemple si l'option -agentlib:foo=opt1,opt2 est spécifiée alors la JVM tentera de charger la bibliothèque foo.dll à partir d'un répertoire se trouvant dans la variable d’environnement PATH sous Windows ou bien libfoo.so dans la variable LD_LIBRARY_PATH sous Linux ou Solaris.

  Charger l'agent de TPTP
Je reviendrai plus en détail sur l'agent mis à disposition par le projet TPTP mais voici à quoi va ressembler l'option qui va permettre son chargement : 

-agentlib:JPIBootLoader=JPIAgent[:[help]|[<option>=<value>,...]];<profiler>[:<option>=<value>,...]

        Exemple :
 -agentlib:JPIBootLoader=JPIAgent:server=standalone;CGProf
  • JPIBootLoader : C'est la bibliothèque qui va charger l'agent
  • JPIAgent : C'est l'agent pour les version 5 et 6 de Java.
  • profiler : Charge une bibliothèque spécialisée dans un type  de "profiling" donnée, CGProf permet par exemple de surveiller les temps d’exécution.
La fin de la ligne est composée d'options sur lesquels je reviendrai en détail plus tard....

1 comment:

  1. Bonjour,

    Article très intéressant. Juste une question : il faut démarrer l'agent à la main, l'agent controller ne permet pas de lancer l'agent de facon distance?
    Merci.

    ReplyDelete