![]() |
![]() |
![]() |
|
Exploration de Bundles JavaVersion 1.3 |
Construire des outils permettant d'analyser les structures de bundles en java.
Dans ce TP on appelle "paquet" ou "bundle" toute source de données permettant à la JVM de charger des classes. Cette notion est souvent très mal formalisée. C' est pourtant un élément important de l'environnement Java et permet une grande souplesse dans un contexte industriel de développement dans la mesure ou la notion de bundle permet de contrôler la provenance des classes formant une application. D'un point de vue concret c'est la notion de classpath qui est connue (typiquement la valeur du "classpath" est définie via la variable d'environment "CLASSPATH" ou via l'option de commande '-classpath' ou '-cp'). Un classpath est une séquence (de références vers) des bundles. Un bundle est avant tout une unité de déploiement. Dans le contexte de ce TP on prendre en compte 3 types de bundles :
Le tableau ci-dessous montre une séquence (factice) de 4 bundles correspondant typiquement au classpath suivant sous windows :
PRI\VIEWER\classes\;LIB\wDebug2-0.jar;PRI\LIB\wExtension1-3.zip;LIB\w2-0.jar
Il est souvent difficile à la lecture d'un classpath de savoir quels sont (1) les classes qui seront effectivement prises en compte lors de l'exécution, et (2) les paquetages mis effectivement à contribution. De même il peut être difficile de savoir si un bundle est nécessaire ou si sa position dans la séquence de bundle est importante ou non. L'objectif de ce TP vise à construire une librairie permettant de représenter les séquences de bundles, puis à construire des outils permettant l'exploration de tels séquences.
PRI\VIEWER\classes\ |
LIB\wDebug2-0.jar |
PRI\LIB\wExtension1-3.zip |
LIB\w2-0.jar |
fr |
com/coyot/Helper.class |
fr\imag\graph\Graph.class |
com/coyot/Helper.class |
imag |
com/coyot/Warning.class |
fr\imag\graph\readme.txt |
com/coyot/Warning.class |
app |
com/coyot/debug/Trace.class |
fr\imag\graph\Node.class |
com/acme/graph/Window$1.class |
Viewer.class |
com/coyot/debug/Console.class |
com\acme\graph\Node.class |
com/acme/graph/Graph.class |
Editor.class |
com\acme\graph\NodeItem.class |
com/help/index.html |
|
Editor$1.class |
com/acme/graph/Window$Map$1.class |
||
lib |
com/acme/graph/Window$Map.class |
||
gui |
com/help/preview.html |
||
TextGui.class |
com/help |
||
AWTGui.class |
com/help/overview.html |
||
SwingGui.class |
com/acme/graph/Node.class |
||
help.html |
com/acme/graph/Edge.class |
||
images |
com/acme/view/GraphRenderer.class |
||
helpIcon.gif |
com/acme/view/NodeRenderer.class |
||
close.Icon.gif |
com/acme/view/EdgeRenderer.class |
||
com |
com/acme/graph/Window.class |
||
acme |
|||
view |
|||
NodeColor.class |
|||
NodeRenderer.class |
Télécharger la dernière version de BUNDLEVIEWER se trouvant dans le répertoire ARCHIVES et décompresser cette archive dans le répertoire de votre choix.
Pour bien comprendre la signification des séquences de bundles, la première étape consiste à définir un jeu de test d'un programme décrit en Q4 qui pour la séquence de bundles
PRI\VIEWER\classes\;LIB\wDebug2-0.jar;PRI\LIB\wExtension1-3.zip;LIB\w2-0.jar
produit ce texte qui, pour chaque paquetage contenu dans les bundles, indique dans quel(s) bundle(s) se trouve chaque classe. Ce texte n'est qu'une représentation externe de ce que le programme qu'il s'agit de construire permet de représenter.
Le paquetage fr.imag.reflect.bundle est décrit par les spécifications fournies en UML. Créer des jeux de tests pour la classe Naming et implémenter cette classe.
L'objectif est d'automatiser le processus de production des différents élements logiciels en utilisant l'outil Ant. Pour cela il est nécessaire de définir une structure systématique des différents fichiers formant le logiciel. La structure peut être observée dans ce répertoire.Dans le répertoire bin la commande setvar permet de positionner les variables en fonction de l'environnement utilisé. Ant doit être installé, ainsi que JUnit. Dans le repertoire principal se trouve une version initiale du fichier build.xml. Compléter le fichier readme.txt se trouvant dans le fichier principal en fournissant les éléments nécessaires au développeur pour qu'il sache comment compiler, tester, exécuter etc. Il s'agit donc d'écrire la documentation du processus de production.
Les pécifications fournies en UML définissent dans le paquetage ConformityLevels différents niveau de conformités. Pour chaque niveau, produire d'abord des tests puis fournir une implémentation correspondante.