Projet PJEM
Projet de Programmation Java Embarqué

Méthodologies et Outils

Projet de M2PGI option SLE

Année Universitaire 2005-2006

Université Joseph Fourier

 

Contributeur(s) étape : Didier Donsez

Encadrement M2PGI/SLE 2005-2006 : Didier Donsez, Cristina Marin

PLAN

1      Développement 1

1.1   Automatisation. 1

1.2   Hiérarchisation en sous-projet 1

1.3   Version. 2

1.4   Normes de programmation. 2

1.5   Documentation. 2

1.6   Test 2

1.7   Traces. 2

1.8   Métriques. 2

1.9   Généricité des serveurs. 2

2      Déploiement 3

2.1   Automatisation. 3

2.2   Configurabilité. 3

2.3   Hiérarchisation. 3

2.4   Performance. 3

2.5   Arrêt (Shutdown) du serveur 4

2.6   Sécurité. 4

3      Distribution finale. 4

4      Conseils. 4

 

1      Développement

1.1   Automatisation

Un seul mot : « ANT »

1.2   Hiérarchisation en sous-projet

Vos développement doit être organisé en sous-projets et en packages.

1.3   Version

N’oubliez pas de versionner vos sources avec CVS ou Subversion (qui est installé sur les machines Unix)

Utilisez les tâches ANT relatives à CVS ou Subversion.

1.4   Normes de programmation

Il vous sera demander de respecter les normes de programmation de Java et C#.

Vous vérifiez le respect de ces normes avec des outils comme JavaStyle. Utilisez ANT.

1.5   Documentation

Vous produirez la documentation globale du projet JavaDoc et JavaSrc de votre projet. Utilisez ANT.

1.6   Test

Vous pourrez tester vos développements au moyen de JUNIT ou de Cactus. Utilisez ANT.

1.7   Traces

Il vous est demandé d'utiliser un "Logger" pour tracer votre code. VOUS NE DEVREZ PAS utilisez des System.out.println(…).

Plusieurs loggers sont disponibles : java.util.logging.Logger depuis J2SE 1.4, Apache Log4J ou bien ObjectWeb MonoLog

1.8   Métriques

Il vous sera demandé des métriques sur vos sources comme le loc (number of lines of code), nombre de classes, nombre de commentaires, nombre de packages, visibilité des attributs/méthodes/classes, ...

Il existe des outils comme JavaNCCS, JMetra. Utilisez ANT.

 

   <taskdef name="javancss"

            classname="javancss.JavancssAntTask"

            classpath="${CLASSPATH}"/>

 

   <javancss srcdir="${build.src}"

            generateReport="true"

            outputfile="${test.results.root}/javancss_metrics.xml"

            format="xml"/>

 

Remarquons qu’il existe plusieurs plugins Eclispe qui donne plusieurs métriques sur le projet en cours de développement. Vous pouvez utiliser celui-ci http://metrics.sourceforge.net/

1.9   Généricité

Faites en sorte que vos développements soient génériques et applicables à d’autres domaines d’application

2      Déploiement

Séparez bien le développement (les sources) du déploiement (paramêtrage, exécutables)

2.1   Automatisation

Lors de la démonstration finale, vous avez moins d’un quart d’heure pour déployer vos serveurs sur une dizaine de machine. Il vous faudra donc automatiser la procédure. Utilisez ANT.

 

Quelques tâches qui vous seront utiles

2.2   Configurabilité

Eviter d'avoir des chemins absolus dans vos fichiers de properties (class java.util.Properties)

Pensez à la portabilité des chemins (UNIX, Windows).

Evitez de fixer les adresses et noms (DNS) de serveurs.

2.3   Hiérarchisation

Vous aurez intérêt à organiser les serveurs à déployer en réservant un répertoire par serveur contenant un fichier de propriété et un java.policy interdisant l'accès à d'autres répertoires que les répertoires de travail et limitant les connexions réseaux, un build.xml (target start, stop, clean), un répertoire lib contenant les .jar signés nécessaires à l'exécution.

Chaque répertoire doit pouvoir être deployé sur une machine distante n'ayant pas de disque partagé (ie C: des PCs des salles de TP)

La partie J2EE de SensorBean est deployé sous la forme d'un .ear

2.4   Performance

Il vous sera demandé de mesurer les performances de vos serveurs Web (celui embarqué dans chaque passerelle OSGi et celui du serveur J2EE) avec Apache JMeter (http://jakarta.apache.org) et de donner des métriques pour des charges de travail qui vous définirez.

En phase d'évaluation de performance, pensez à désactiver vos loggers au moyen d'une variable static final (l'optimiseur de javac supprime le test et la section de code)

final static LOGGER=false;

...

if(LOGGER){

      logger....;

      // no bytecode inserted

}

2.5   Arrêt (Shutdown) du serveur

Un Ctrl-C n'est pas génial et pas tellement automatisable sous DOS

Prévoyez une procédure pour arrêter proprement vos serveur.

Remarque : la méthode addShutdownHook(Thread hook) de la classe java.lang.Runtime permet d’effectuer des traitements lors de la terminaison de la JVM.

 

Runtime.getRuntime().addShutdownHook(

  new Thread() {

    public void run() {

      System.out.println("Hook called");

    }

  }

);

2.6   Sécurité

Chaque serveur a son propre fichier java.policy qui limite des accès du serveur aux ressources de la machine : les fichiers de configuration sont en lecture seule, les répertoires de travail en lecture/écriture. On peut aussi limiter les connexions réseaux.

Les classes des objets d'une banque doivent être signées avec le certificat de l'équipe de développement de la banque.

La signature est automatisée par une tâche ANT (avant le déploiement).

3      Distribution finale

Comporte un build.xml avec une target dist et un petit manuel de configuration et d'administration dans un répertoire doc

4      Conseils

N'oubliez pas que ce qui est temporaire a tendance a être définitif !

Organisez vous en équipe avec des spécialités identifiées pour chaque membre (chef de projet, architecte, spécialiste méthodes, spécialiste outils (ANT), …

Gardez en mémoire les étapes suivantes.