26 février 2008

archiva passe sous Spring

Comme tous les outils de la communauté maven, Archiva (Maven Repoistory Manager) a été construit sur le conteneur Plexus. Qu'on aime ou pas sa philosophie assez spécifique, il faut constater que cet outil manque cruellement de documentation et est méconnu de nombreux développeurs, ce qui n'est pas le cas de Spring.

La liste de développement d'Archiva a réagit avec enthousiasme à la proposition de migrer sous Spring, malgré le gros effort que cela représente (il y a du plexus-* un peut partout).

Je développe un outil de transition, sous le doux nom de "plexus-spring", qui vise à exécuter des composants plexus dans un contexte Spring, en traduisant les fichiers de configuration plexus et les interfaces d'initialisation/destruction dans le vocabulaire Spring.

Après quelques errements dans les circonvolutions du code Spring, j'en suis venu à
  • Une transformation XSLT des descripteurs plexus en contextes spring
  • un namespace spécifique qui reprend dans spring les déclarations plexus.
  • une BeanFactory qui se charge de construire le composant plexus, en gérant l'injection directe dans les attributs.
  • Un BeanPostPorcessor vient compléter le tout pour gérer l'initialisation/destruction.
Et en bonus, une classe de test PlexusInSpringTestCase pour remplacer sans modification du code les PlexusTestCase.

Une idée apparemment bonne car on m'a tout de suite demandé le niveau de maturité de ce code pour l'appliquer sur Continuum ! Comme quoi plexus n'a pas vraiment que des admirateurs.

Udate 29/02 :
Je viens de démarrer pour la première fois mon application web Archiva, de la configurer et d'obtenir un premier Jar , tout ça avec Spring comme conteneur ! Il y aura probablement encore quelques ajustements à faire mais c'est très prometteur : grâce à plexus-spring, je n'ai eu aucune adaptation à faire au code d'Archiva !

1 commentaires:

Mathieu Larchet a dit…

Je rencontre un souci avec Archiva. Lorsque je l'utilise avec Tomcat, ce dernier ne s'arrête pas correctement.
C'est un bug récurrent avec le couple Spring / Quartz, où il faut impérativement spécifier la méthode 'destroy' de la SchedulerFactory.

Hors la configuration Plexus d'Archiva est obscure pour moi et je n'arrive pas à déterminer à quel endroit je peux 'patcher' cette fonctionnalité.

Si vous avez la moindre idée...