Oracle SOA 12c : Intégration continue

Un article précédent vous présentait l’arrivée de Maven dans JDeveloper :
http://arkzoyd.wpengine.com/2014/11/17/oracle-soa-suite-12c-support-maven
Ici, ce billet montre comment utiliser ces fonctionnalités en dehors de JDeveloper pour mettre en place une intégration continue et industrialiser les développements Oracle SOA 12c.
L’intégration continue repose sur le fait d’automatiser les étapes suivantes :

  • Compilation des sources
  • Tests des sources
  • Construction des binaires
  • Déploiement sur serveur d’intégration

Pour illustrer comment automatiser ces actions avec Oracle SOA Suite 12c et Maven, nous réalisons les actions suivantes :

  • Lancement JDeveloper 12.1.3 (composite editor plugin)
  • Création d’une application de type SOA nommée SOAApplication (composite vide)
  • Création d’un projet de type SOA nommé SOAProject

Pour info, un autre article du blog présentait l’installation Oracle SOA Suite 12.1.3 :
http://arkzoyd.wpengine.com/2014/09/18/installer-configurer-oracle-soa-12c
L’arborescence visible dans JDeveloper est la suivante :
soa12cic01
On remarque immédiatement :

  • Un fichier pom.xml a automatiquement été créé au niveau de l’application (cf. « Application Resources »)
  • Un fichier pom.xml a automatiquement été créé au niveau du projet

Ces fichiers sont utilisés par Maven pour réaliser les opérations suivantes :

  • Compilation des composites SOA
  • Packaging des composites SOA (fichier de type SAR)
  • Déploiement des composites SOA
  • Lacement des tests unitaires des composites SOA

POM au niveau application :
soa12cic02
Ce fichier a pour vocation de faire de l’application SOA un module Maven parent regroupant autant de modules enfants que de composites SOA. Il permet ainsi de compiler, packager et déployer une application SOA en une seule opération.
POM au niveau projet :
soa12cic03
Ce fichier paramètre le build Maven d’un composite SOA :

  • Indique l’utilisation du plugin Maven pour SOA fourni par Oracle (oracle-soa-plugin)
  • Précise la configuration du plugin Maven pour SOA

Configuration du plugin :
soa12cic04
La configuration du plugin utilise des propriétés Maven (définies en début de POM et pouvant être surchargées au niveau de la ligne de commande) et comporte :

  • Le nom et la version du composite SOA correspondant
  • Les emplacements en entrée (source du composite) et en sortie (répertoire de destination)
  • Les informations de connexion au serveur sur lequel déployer le composite et lancer les tests unitaires correspondants

Ces configurations correspondent au paramétrage des scripts ANT fournis par Oracle qu’il fallait utiliser directement dans les versions précédentes (ant-sca-compile.xml, ant-sca-deploy.xml, etc.).
 
Nous allons désormais voir comment utiliser ces fichiers avec Maven.
 
Installation Maven:
 
Maven est fourni avec Oracle SOA Suite 12c et se trouve à l’emplacement suivant:
ORACLE_HOME/oracle_common/modules/org.apache.maven_3.0.5
 
Variables d’environnement:
set ORACLE_HOME=D:/path/to/fmw
set MAVEN_HOME=%ORACLE_HOME%/oracle_common/modules/org.apache.maven_3.0.5
set JAVA_HOME=%ORACLE_HOME%/jdk
set PATH=%PATH% ;%JAVA_HOME%\BIN ;%MAVEN_HOME%\BIN
Note: ORACLE_HOME et JAVA_HOME doivent être ajustées à votre installation / version
 
Settings Maven:
Le fichier de settings maven doit se trouver à l’emplacement suivant:
%USERPROFILE%\.m2\settings.xml
Vous pouvez notamment y renseigner un éventuel serveur proxy:
soa12cic05
Check :
Vous pouvez vérifier la configuration en lançant la commande suivante:
mvn -v
soa12cic06
 
 
Nous devons désormais ajouter les composants SOA Oracle à notre isntallation Maven.
 
Plugin Maven SOA de synchronisation:
Un unique plugin Maven permet d’installer tous les artefacts SOA à partir d’un ORACLE_HOME et se trouve dans le répertoire suivant:
ORACLE_HOME/oracle_common/plugins/maven/com/oracle/maven/oracle-maven-sync/12.1.3
 
A partir de ce répertoire, utiliser la commande suivante pour installer le plugin de synchronisation dans votre repository Maven:
mvn install:install-file -DpomFile=oracle-maven-sync.12.1.3.pom -Dfile=oracle-maven-sync.12.1.3.jar
 
A partir de ce répertoire, utiliser la commande suivante pour déployer le plugin dans votre repository distant et partagé (optionnel pour l’instant):
mvn deploy:deploy-file -DpomFile=oracle-maven-sync-12.1.3.pom -Dfile=oracle-maven-sync-12.1.3.jar -Durl=http://servername/archiva/repositories/internal -DrepositoryId=internal
Check :
mvn help:describe -Dplugin=com.oracle.maven:oracle-maven-sync -Ddetail
soa12cic07
 
Alimenter votre repo local à partir du plugin de synchronisation :
mvn com.oracle.maven:oracle-maven-sync:push -Doracle-maven-sync.oracleHome=/path/to/oracleHome -DtestingOnly=false
 
Alimenter votre repo distant et partagé (optionnel pour l’instant) :
mvn com.oracle.maven:oracle-maven-sync:push -DoracleHome=/path/to/oracleHome -DserverId=internal
 
Check :
mvn help:describe -Dplugin=com.oracle.soa.plugin:oracle-soa-plugin -Ddetail
 
Pour plus d’informations à ce sujet:
https://docs.oracle.com/middleware/1213/core/MAVEN/config_maven.htm#MAVEN314
 
Modification des POM dans JDeveloper:
Pour simplifier les opérations suivantes, nous modifions la version dans les POM d’application et de projets (1.0-SNAPSHOT => 1.0):
POM application:
soa12cic08
POM projet:
soa12cic09
 
Voici désormais les commandes à utiliser pour compiler / packager / déployer / etc.
 
Compile :
Pour compiler le composite:
mvn compile
soa12cic10
 
Package :
Pour packager le composite:
mvn package
soa12cic11
 
Deploy :
Pour déployer le composite (en ajustant les informations de connexion au serveur):
mvn pre-integration-test -DserverUrl=http://devsrvsoa001.nexity.net:8001 -Duser=weblogic -Dpassword=password
soa12cic12
 
Undeploy :
Pour annuler le déploiement du compoiste (en ajustant les informations de connexion au serveur):
mvn com.oracle.soa.plugin:oracle-soa-plugin:undeploy -DserverUrl=http://devsrvsoa001.nexity.net:8001 -Duser=weblogic -Dpassword=password
 
 
Considération vis-à-vis du MDS :
Si vous utilisez MDS, le fichier pom.xml du projet de composite doit-être modifié comme suit (renseigner appHome et oracleHome):
soa12cic13
Pour plus d’info, voir la note Oracle à l’emplacement suivant :
https://docs.oracle.com/middleware/1213/core/MAVEN/soa_maven_project.htm#MAVEN9003
 
Utilisation du POM parent pour centraliser les propriétés utilisées:
Les POM de projet / composite dépendent d’un POM parent présent à l’emplacement suivant:
%MAVEN_REPO%\com\oracle\soa\sar-common\12.1.3-0-0\sar-common-12.1.3-0-0.pom
soa12cic14
Les propriétés communes à tous les composites peuvent y être ajoutées comme ci-dessus pour simplifier les commandes à passer:
mvn pre-integration-test
mvn com.oracle.soa.plugin:oracle-soa-plugin:undeploy
 
Conclusion:
L’automatisation de build SOA et la mise en place d’une intégration continue sont donc désormais :

  • Plus facile et rapide car intégré au sein de l’IDE (pom.xml générés)
  • Plus standard (utilisation Maven)

 
Plus d’info :
https://docs.oracle.com/middleware/1213/core/MAVEN/soa_maven_project.htm
What’s next ?

  • OSB
  • Ajouter BPEL / Business Rules
  • Ajouter tests unitaires
  • Archiva / Hudson