Tuxitecte

Maven + Alfresco : Jetty, Boostrap et Profil



Bonjour à tous !

Cette fois ci je vais vous présenter comment on peut "bootstapper" (initialiser) des données lors de l'installation de notre AMP et comment on peut le tester facilement.

1. Bootstrap

Tout d'abord, il y a plusieurs façons de créer un bootstrap
  • soit par des fichiers XML,
  • soit programmatiquement (via une sorte de patch...).

L'avantage de la première approche est sa simplicité ! En effet, un bootstrap XML n'est rien d'autre que l'équivalent de l'import/export disponible dans Alfresco Explorer. Vous savez les flèches vertes sur un dossier dans l'écran des détails... Bref... pour simplifier on exporte des noeuds sous format XML pour ensuite les (ré)intégrer dans une autre instance Alfresco. L'exemple typique est le passage d'un serveur de Test (responsabilité équipe de développement) vers un serveur de production (responsabilité équipe d'exploitation). Sur le serveur de DEV, l'équipe de développement a créé une arborecence projet spécifique qui doit être installé sur le serveur de PROD automatiquement. Ceci doit être effectué lors de la première installation de notre AMP sur le serveur de PROD.

La limite de cette approche vient du fait que seule la création d'objet est possible. On ne peut supprimer ou transformer...

L'avantage de la seconde approche est sa richesse ! En effet, on a accès à l'ensemble des services Alfresco plus (éventuellement) les services de notre projet. On peut donc effectuer tout ce que l'on veut.. On peut réorganiser une arborescence, effectuer une modification massive d'un ensemble d'objet ou encore transformer des contenus...

L'inconvénient : Il faut s'avoir coder :o/ et connaître en partie les services Alfresco.

Je vais m'intéresser par la suite à la première approche. Je m'intéresserai à la deuxième approche dans un prochain post..

1.1 Boostrap via XML
Donc en premier, je vais vous expliquer l'approche par un fichier XML.
Dans notre exemple de bootstrap, je veux créer 4 espaces : un espace BASE DOCUMENTAIRE + 3 sous-espaces PROJET 1, PROJET 2 et PROJET 3. Ces espaces ont été créés précédemment avec une instance d'Alfresco de TEST préalablement installé. Maintenant je veux le mettre en place sur mon projet et donc dans mon AMP pour que chaque instance installant cet AMP puisse aussi avoir ces répertoires.

1.2 Export
Tout d'abord j'exporte les répertoires de mon instance de TEST (via l'action export), puis je télécharge le fichier ACP généré en local afin d'extraire le fichier XML.
Mon fichier XML a pour nom spaces.xml (orginal...). Pour plus d'informations sur l'IMPORT/EXPORT : http://wiki.alfresco.com/wiki/Export_and_Import

1.3 Intégration dans le projet
Je vais ensuite déposer ce fichier dans le nouveau répertoire /alf-amp-osecm/src/main/config/bootstrap. Actuellement, ce fichier est orphelin et ne sera pas pris en compte. Il faut donc définir sa prise en compte par Alfresco (et donc par Spring...).
Pour cela, on va créer un nouveau fichier qui a pour nom boostrap-context.xml dans le répertoire /alf-amp-osecm/src/main/config/context



parent="module.baseComponent">












/${spaces.company_home.childname}
alfresco/module/fr.opensourceecm.alf-amp-osecm/bootstrap/spaces.xml






Pour résumer comment comprendre ce fichier ?
Litterallement, voilà ce qu'il veut dire :
On crée un bean Spring identifié par osecm.bootstrapSpaces héritant du bean module.baseComponent. Ce bean sert à Importer. Il s'applique pour le module fr.opensourceecm.alf-amp-osecm (notre AMP), à partir de la version 0.0.4. Le traitement du bean (donc de l'import) ne s'effectue qu'une seule fois (donc au premier démarrage du module). Il prend pour paramètre un "bootstrapViews" lié à notre fichier. Ce bootstrapView va nous permettre de créer notre arboresence en tant que sous-espace de {spaces.company_home.childname}.

C'est simple non ? ;o)

1.4 Création du projet
Maintenant que nous avons notre bootstrap, il n'y a plus qu'à le tester ! On effectue donc un package de notre AMP via la commande


mvn clean install

On peut ainsi retrouver dans le répertoire target de notre projet, le fichier alf-amp-osecm-0.0.4.amp qui sera alors possible d'intégrer dans Alfresco.war.
Effectuez un copier/coller du fichier alf-amp-osecm-0.0.4.amp vers le répertoire amps du répertoire d'installation d'un Alfresco.
Lancez ensuite le script d'installation des amps dans le répertoire d'installation d'un Alfresco : apply_amps.bat
A la fin de celui ci, vous avez un nouveau alfresco.war mis à jour avec votre module.
Vous pouvez maintenant lancer Alfresco et vérifier l'intégration du module !


2. Lancer et Tester Alfresco via Maven


Si vous avez suivi l'ensemble de mes posts sur l'intégration Alfresco/Maven, vous vous êtes rendu compte que cela pouvait prendre beaucoup de temps d'intégrer un AMP dans Alfresco... Copier/coller c'est bien mais c'est un peu rébarbatif à la longue...
L'idée pour améliorer ce processus serait de lancer une commande Maven pour démarrer un Alfresco...

Comment ?
Et bien via l'utilisation de nouveaux plugins : jetty et maven-war!

Jetty est un container HTTP leger (un peu du même style que Tomcat...) qui va nous permettre de lancer un Alfresco via Maven tandis que le plugin maven-war va nous permettre de créer le war de test de notre application.

Pour faire simplement, on désire créer un alfresco.war "déployé/explosé" dans un sous-répertoire de target (via le plugin maven-war) et qui sera ensuite lancé comme une application web (via le serveur Jetty).

Attention on y va !

2.1 Profil

En fait la majorité du travail de configuration s'effectue au niveau du pom.xml de notre projet AMP. On va créer ce que l'on appelle un PROFIL.
Un profil maven est un ensemble d'action rendu optionnel ou non par l'utilisateur lors de l'execution d'une commande Maven. On peut le voir comme une instruction conditionnelle commandée par l'utilisateur. Dans le cas présent, on cherche à démarrer un Alfresco afin de vérifier que le boostrap a fonctionné. On cherche aussi de manière générale à vérifier le fonctionnement de notre AMP.

Néanmoins, avant de créer notre profil, nous avons besoin de créer quelques fichiers de propriétés.


2.2 Le fichier jetty-env.xml
Avant toute chose, on définit le fichier jetty-env.xml. Il permet de configurer la connexion à la base de données via Jetty. Pour cela, on va créer un nouveau fichier jetty-env.xml dans le répertoire /alf-amp-osecm/src/test/properties/local/





jdbc/dataSource


jdbc:mysql://localhost/${alfresco.db.name}
${alfresco.db.username}
${alfresco.db.password}





2.3 Le fichier application.properties
Qui dit nouvel environnement dit forcément nouvelle configuration de l'entrepôt de données. Nous allons créer pour cela un nouveau fichier application.properties que nous allons ajouter dans le répertoire : /alf-amp-osecm/src/test/properties/local
Cet ensemble de clé/valeur va être ensuite utilisé dans le pom.xml en tant que référence ainsi que dans le fichier dev.properties


webapp.name=alfresco-jetty
alfresco.data.jetty=alf_data_jetty
alfresco.data.location=./alf_data_jetty
alfresco.db.driver=org.gjt.mm.mysql.Driver
alfresco.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
alfresco.db.url=localhost
alfresco.db.name=alfjetty
alfresco.db.username=alfresco33
alfresco.db.password=alfresco
webapp.log.level=error
webapp.log.dir=
module.log.level=debug

2.4 Le fichier dev.properties
Ici nous allons créer un fichier dev.properties que nous allons ajouter dans le répertoire : /alf-amp-osecm/src/test/properties/local Ce fichier va faire le lien entre les variables définies dans application.properties et la configuration alfresco défini dans le fichier dev-context.xml. Lors de la création de notre war, ce fichier va venir écraser le fichier dev.properties précédemment défini.


dir.root=${alfresco.data.location}
index.recovery.mode=AUTO
integrity.failOnError=true
db.test.name=${alfresco.db.name}
db.username=${alfresco.db.username}
db.password=${alfresco.db.password}
db.host=${alfresco.db.host}
db.port=${alfresco.db.port}
db.driver=${alfresco.db.driver}
db.url=jdbc:mysql://${db.test.host}:${db.test.port}/${db.test.name}
hibernate.dialect=${alfresco.hibernate.dialect}

2.5 Les propriétés
Maintenant nous pouvons attaquer la configuration de notre pom.xml. Tout d'abord nous allons déclarer une propriété : env Cette propriété est définie après le bloc de déclaration du projet et avant le bloc de déclaration des dépendances.



local
alfresco-jetty


2.6 Création du profil
Comme le titre l'indique, nous allons maintenant créer un bloc profil que l'on va appeller webapp. Son goal par défaut sera jetty:run-exploded (autrement dit lancement de l'application war déployé/explosé que l'on aura créé). Ce bloc est à ajouter en fin de notre pom.xml mais avant la balise fermante project.




webapp


src/test/properties/${env}/application.properties

jetty:run-exploded


... CF. POINTS SUIVANTS...





true
src/test/resources

alfresco/desktop/*.*



true
src/test/properties/${env}
alfresco/extension

dev.properties






org.alfresco.sdk
alfresco-community-war
3.3
war





A noter plusieurs points :
Tout d'abord on a ajouté un FILTRE via la fichier application.properties. Il va nous permettre d'utiliser l'ensemble des variables définies dans ce fichier dans le reste du pom.xml et plus précisément dans notre profil.

On a ajouté ensuite en tant que dépendance alfresco-community-war c'est à dire l'application Alfresco Explorer. Bien entendu, on l'aura préalablement ajouté à notre repository Maven local via la commande

call mvn install:install-file -Dfile=alfresco.war -DgroupId=org.alfresco.sdk -DartifactId=alfresco-community-war -Dversion=3.3 -Dpackaging=war


Après on a ajouté des testResource qui vont nous permettre
  • de ne pas prendre en compte les desktops actions présents dans l'AMP (Pour rappel ils sont simplement nécessaires pour les tests unitaires dans Eclipse)
  • de prendre en compte les paramètres de l'entrepôt de donnée spécifique à Jetty via le fichier dev.properties.


2.7 Configurer plugin maven-war
Le plugin maven-war va nous permettre de déployer le war alfresco et d'ajouter nos fichiers de configuration.



org.apache.maven.plugins
maven-war-plugin
2.0.2


it
package

exploded


true




false
${project.build.directory}/${webapp.name}

false

licenses/**


${project.build.testOutputDirectory}
WEB-INF/classes
true

**



src/test/properties/${env}
WEB-INF
true

jetty*






On note dans les ressources que l'on veut
  • Ajouter l'ensemble des fichiers de configuration de src/test/resource/alfresco/* (équivalent à ${project.build.testOutputDirectory})
  • Ajouter le fichier jetty-env.xml pour la prise en compte du paramètre JNDI de la base de données.


2.8 Configurer plugin jetty

Le plugin maven-jetty va nous permettre de lancer l'application alfresco et prendre en compte les sources de notre projet.



org.mortbay.jetty
maven-jetty-plugin
6.1.22


it
integration-test

run-exploded


/${webapp.name}
${project.build.directory}/${webapp.name}
10


8080
60000







mysql
mysql-connector-java
5.0.3
provided




On notera en dépendance le driver mysql.

2.9 Lancer l'application

Maintenant vous êtes fin prêt à lancer Alfresco via une commande Maven


mvn clean integration-test -P webapp


Pour information, on utilise un profil en ajoutant à la commande le paramètre -P suivi du nom du profil à prendre en compte. Si vous ne voulez pas jouer les tests, ajouter à la fin le paramètre -DskipTests=true.

Quelques minutes plus tard si tout se passe bien, vous pouvez ouvrir un navigateur internet et tapez l'adresse http://localhost:8080/alfresco-jetty/
Vous vous apercevez alors de la présence d'une arborescence BASE DOCUMENTAIRE!

Well Done !

3. Extras

Généralement, un test de bootstrap ne fonctionne pas du premier coup ! Or qui dit bootstrap dit forcément installation unique au premier démarrage. Si on veut retenter une nouvelle fois, il serait donc utile de remettre à zéro notre application.

Comme vous êtes familier avec les profils et la configuration de plugin, je vous propose en petit extra le profil clean-jetty qui vous permettra de mettre à zero le contexte jetty.
A vous de le placer judicieusement dans le fichier pom.xml et de l'améliorer!



clean-jetty



maven-clean-plugin
2.4

true


target

war/**


**



alf_data_jetty

oouser/**






org.codehaus.mojo
sql-maven-plugin
1.4



mysql
mysql-connector-java
5.0.3



org.gjt.mm.mysql.Driver
jdbc:mysql://localhost/
root
admin
true



drop-db-jetty
pre-clean

execute


true
drop database IF EXISTS alfjetty



create-db-jetty
clean

execute


true
create database alfjetty default character set utf8 collate utf8_bin









Rendez vous pour le prochain épisode qui sera consacré à la gestion des versions des AMPS + Patchs Java !

A++

PS : L'ensemble des sources du projet sont téléchargeables à cette adresse : http://www.box.net/shared/bpcx8kl7dn
Digg Google Bookmarks reddit Mixx StumbleUpon Technorati Yahoo! Buzz DesignFloat Delicious BlinkList Furl

0 commentaires: on "Maven + Alfresco : Jetty, Boostrap et Profil"

Enregistrer un commentaire