Author: afages Date: 2010-03-14 21:06:23 +0100 (Sun, 14 Mar 2010) New Revision: 241 Log: Modif rapport Added: trunk/src/site/doc/rapport/img/msm.png trunk/src/site/doc/rapport/img/ui.png Modified: trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/Messages.java trunk/src/site/doc/analyse/analyseBT.rst trunk/src/site/doc/analyse/msm.zargo trunk/src/site/doc/analyse/usecase.rst trunk/src/site/doc/rapport/rapport.rst Modified: trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/Messages.java =================================================================== --- trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/Messages.java 2010-03-14 17:57:25 UTC (rev 240) +++ trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/Messages.java 2010-03-14 20:06:23 UTC (rev 241) @@ -16,7 +16,7 @@ private static final String BUNDLE_NAME = "core.messages"; //$NON-NLS-1$ /** - * ressource bundle. + * resource bundle. */ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle .getBundle(BUNDLE_NAME); Modified: trunk/src/site/doc/analyse/analyseBT.rst =================================================================== --- trunk/src/site/doc/analyse/analyseBT.rst 2010-03-14 17:57:25 UTC (rev 240) +++ trunk/src/site/doc/analyse/analyseBT.rst 2010-03-14 20:06:23 UTC (rev 241) @@ -89,4 +89,4 @@ projet, issue de la spécification même de Google Inc. "BigTable: A Distributed Storage System for Structured Data" -lien : labs.google.com/papers/bigtable-osdi06.pdf +lien : http://labs.google.com/papers/bigtable-osdi06.pdf Modified: trunk/src/site/doc/analyse/msm.zargo =================================================================== (Binary files differ) Modified: trunk/src/site/doc/analyse/usecase.rst =================================================================== --- trunk/src/site/doc/analyse/usecase.rst 2010-03-14 17:57:25 UTC (rev 240) +++ trunk/src/site/doc/analyse/usecase.rst 2010-03-14 20:06:23 UTC (rev 241) @@ -7,7 +7,7 @@ BigTable (Hbase, HashMap...) en affichant les différentes tables graphiquement selon le plugin de la base. -**Scope :** MSM -GUI/IHM. +**Scope :** GUI - Plugin. **Level :** sous-fonctionnalité. @@ -48,7 +48,7 @@ BigTable (Hbase, HashMap...) en affichant les différents éléments (colonnes, types...) graphiquement selon le plugin de la base. -**Scope :** MSM -GUI/IHM +**Scope :** GUI - Plugin. **Level :** sous-fonctionnalité @@ -91,7 +91,7 @@ **Goal in context :** obtenir les données d'une table (son contenu) d'une base BigTable (Hbase, HashMap...) selon le plugin de la base. -**Scope :** MSM - GUI/IHM. +**Scope :** GUI - Plugin. **Level :** fonctionnalité. @@ -131,38 +131,37 @@ **Use case :** 3.Monitor. **Goal in context :** surveiller la base de sorte à vérifier l'activité des -noeuds (charge, espace disque...). +noeuds (charge, espace disque...). Ces informations peuvent varier (plugin). -**Scope :** MSM - GUI/IHM. +**Scope :** GUI - Plugin. **Level :** fonctionnalité. **Primary actor :** utilisateur de MSM. -**Trigger :** +**Trigger :** l'utilisateur souhaite afficher des informations précises +sur l'application en cours. -**Frequency :** peu souvent ~= 10/jour. +**Frequency :** constamment (temps-réel). **Pre-conditions :** - - PRE1 : + - PRE1 : l'application MSM est lancée. + - PRE2 : le plugin désiré est chargé. **Post-conditions :** - - POST1 : + - POST1 : les informations désirées sont affichées. **Main success scenario :** - 1) - 2) - 3) - 4) - 5) - 6) - 7) + 1) l'utilisateur charge le module de monitor désiré + 2) MSM récupère les informations + 3) MSM affiche les informations et les retourne à l'utilisateur + 4) l'utilisateur traite les données **Extensions :** **Performance :** la qualité du monitoring est tout aussi importante que -la temps-réel (actualité des données) de la tâche. +le temps-réel (actualité des données) de la tâche. 2.8 Import ---------- @@ -172,7 +171,7 @@ **Goal in context :** importer des données dans une base de données (tables, données). -**Scope :** MSM. +**Scope :** GUI - Plugin. **Level :** fonctionnalité. @@ -217,7 +216,7 @@ **Goal in context :** exporter des données dans un fichier depuis une base (tables, données). -**Scope :** MSM. +**Scope :** GUI - Plugin. **Level :** fonctionnalité. @@ -260,7 +259,7 @@ **Goal in context :** se connecter à une base de données BigTable préalablement choisie pour la rendre active dans MSM. -**Scope :** MSM - GUI/IHM. +**Scope :** GUI - Plugin. **Level :** fonctionnalité. @@ -281,8 +280,8 @@ 1) L'utilisateur désire se connecter 2) L'utilisateur choisit une base de données à laquelle se connecter - 3) En fonction de la base, MSM demande diverses informations de connexion -(utilisateur, mot de passe, port...) + 3) En fonction de la base, MSM demande diverses informations de connexion utilisateur, mot de passe, port...) + 4) L'utilisateur entre ces informations et se connecte 5) MSM renvoie le résultat de la connexion 6) L'utilisateur traite la base @@ -302,7 +301,7 @@ une nouvelle base de données BigTable (graphique et fonctionnalités) pour la rendre active dans MSM. -**Scope :** MSM - GUI/IHM. +**Scope :** GUI - Plugin. **Level :** fonctionnalité. @@ -321,9 +320,8 @@ **Main success scenario :** 1) Le développeur désire développer un plugin - 2) Le développeur implémente l'interface BigTable - 3) Le développeur implémente l'interface GUI en se servant de son - implémentation de BigTable + 2) Le développeur implémente l'interface Plugin + 3) Le développeur implémente son plugin 4) Le développeur crée un JAR du plugin **Extensions :** Added: trunk/src/site/doc/rapport/img/msm.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/doc/rapport/img/msm.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/src/site/doc/rapport/img/ui.png =================================================================== (Binary files differ) Property changes on: trunk/src/site/doc/rapport/img/ui.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/src/site/doc/rapport/rapport.rst =================================================================== --- trunk/src/site/doc/rapport/rapport.rst 2010-03-14 17:57:25 UTC (rev 240) +++ trunk/src/site/doc/rapport/rapport.rst 2010-03-14 20:06:23 UTC (rev 241) @@ -229,7 +229,7 @@ .. figure:: img/package.png :scale: 300% - Diagramme de package + Diagramme de packages En réalité, on veut donner la possibilité à un développeur d'intégrer la base et les fonctionnalités qu'il souhaite dans MSM. L'application doit @@ -246,13 +246,94 @@ 3.1 Msm (Core) -------------- -3.2 GUI -------- +.. figure:: img/msm.png + :scale: 400% + Diagramme de classes de conception du module msm + +Le coeur de MSM est constitué principalement d'une architecture à plugins. +Un PluginLoader étend un URLClassLoader. On construit un PluginLoader +en lui fournissant le chemin des plugins et le ClassLoader parent. + +Dans le processus de construction, on récupère chacun des plugins +correspondants à chaque fichier JAR présent dans le chemin passé en paramètre +dans le PluginLoader. On utilise ensuite un ServiceLoader de Java pour charger +chacun des plugins de chaque type (BigTable, Importer, Exporter, Monitoring). + +Finallement, on stocke chaque plugin dans une Map dont la clé est le nom +du plugin (un plugin doit implémenter la méthode getPluginName()). + +Le PluginLoader propose ensuite différents services permettant de récupérer, +d'utiliser les différents plugins. + 3.2 Plugin ---------- .. figure:: img/plugin.png :scale: 400% - Diagramme de classe de conception du module plugin + Diagramme de classes de conception du module plugin + +Un plugin est avant tout décrit via une interface *Plugin* permettant de +s'auto-décrire, se charger, se désactiver. Lorsqu'un plugin se charge, il +définit explicitement ses menus et ses actions associés au sein de +l'application qu'on leur fournit. Ceci permet notamment de ne pas avoir de +restrictions sur les possibilités d'extension de MSM puisque les +fonctionnalités de chaque plugin sont chargées peu importe ce dont il +s'agit. + +On trouve ensuite différentes interfaces prévues par défaut dans l'API de +l'application qui sont des types de plugins, notamment en ce qui concerne +l'importation, l'exportation, le monitoring et enfin la base en elle-même +grâce à l'interface BigTable extraite de l'analyse de la spécification Google +déjà étudiée. + +Hbase, BigHashMap, Cassandra... sont des plugins de type BigTable. +Un développeur voulant rajouter une nouvelle base doit donc implémenter cette +interface. + +3.3 GUI +------- + +.. figure:: img/ui.png + :scale: 400% + + Diagramme de classes de conception du module gui + +Comme dit précédemment, on utilise JAXX pour générer automatiquement une +classe SWING. En l'occurence, la classe MainUI faisant office de Vue dans +notre framework MVC. Cette vue est une frame composée de plusieurs composants +SWING associés à leur listener et modèles de données le cas échéant. +La vue ainsi générée implémente l'interface JaxxObject et est un type +d'application Jaxx. Il existe une uniquement instance de l'application, +implémentée grâce au pattern Singleton et récupérable via la méthode +getInstance() en statique. + +On trouve ensuite le contrôleur, ApplicationEngine qui connaît la vue du +module *gui*, l'interface BigTable du module *plugin* (une seule +implémentation de BigTable à la fois est possible, et ApplicationEngine +la connaît) et le PluginLoader du module *msm*. Il fait office de pivot +entre les trois modules. On y trouve les différentes méthodes appelées depuis +l'application MainUI ainsi qu'une méthode pour charger un plugin à partir +du PluginLoader. C'est également un singleton récupéré grâce à la méthode +statique getInstance(). + +3.4 Initialisation et lancement de MSM +-------------------------------------- + +Au lancement du programme principal, l'instance de MainUI est récupérée, +la configuration autour de Msm concernant notamment la localisation +(gérée par des classes i18n propres à Code Lutin et dont les dépendances +sont écrites dans le pom.xml du projet) également. + +Ensuite, on initialise l'application en récupérant l'instance de +ApplicationEngine. + +Ainsi, à chaque évènement de l'utilisateur capturée par l'application, +on fait appel au contrôleur ApplicationEngine (défini à chaque appel dans +le fichier MainUI.jaxx et donc généré tel quel dans MainUI) qui se charge +de faire le lien entre les différents plugins de son PluginLoader et +l'interface graphique, qu'il peut modifier à sa guise. + +.. Manuel utilisateur TODO +.. Manuel développeur TODO