Bon une fois n'est pas coutume, me voila en train de pester sur JAVA EE. Dans la catégorie spec inutilisable en tant que tel, je vous présente la spécification JSR 88. Derrière ce nom barbare, se cache une API permettant de déployer des applications ou d'autres "objets" JAVA ( files JMS par exemple)
Pourquoi je gueule ? Ben d'abord, pour faire passer le temps :-D? Ensuite, pour donner un retour d'expérience sur cette fonctionnalité que je trouve pas assez exploitée
La documentation
ben d'abord, cette api n'est pas assez documentée. On peut trouver sur le net quelques exemples mais pas assez fournis. Pour développer un plugin MAVEN pour gérer le déploiement sur Oracle AS 10.1.3, j'ai personnellement du me pencher sur la documentation officielle de l'éditeur ( qui ne détaillait que l'implémentation de l'éditeur) et décompiler les classes qu'il utilisait dans ses scripts ANT
L'API
Cette API n'exempte pas l'utilisation des implémentations des serveurs. D'abord, elle est complètement obscure. Les classes ne sont pas du tout intuitives et imposent pas mal de debugging pour savoir comment obtenir des BONNES instances de Target et DeployableObject. Pour obtenir ces objets, on est presque obligé d'utiliser des objets provenant des implémentations des serveurs JAVAEE.
Par exemple sur Oracle AS :
public class DeployGoal extends BaseOC4JGoal {
/**
* Comment for <code>artifact</code>
*
* @parameter expression="${artifact}"
* default-value="${project.build.directory}/${project.artifactId}-${project.version}.ear"
*/
private File artifact = null;
/**
* @return the artifact
*/
public File getArtifact() {
return this.artifact;
}
/**
* @param _artifactPath
* the artifact to set
*/
public void setArtifact(File _artifactPath) {
this.artifact = _artifactPath;
}
/**
* @return the deploymentParameters
*/
protected HashMap<String, String> getDeploymentParameters() {
if (deploymentParameters == null) {
HashMap<String, String> parameters = new HashMap<String, String>();
//parameters.put("bindAllWebApps", getWebSite());
parameters.put("bindWebApp", getWebSite());
setDeploymentParameters(parameters);
}
return this.deploymentParameters;
}
/**
* @param _deploymentParameters
* the deploymentParameters to set
*/
protected void setDeploymentParameters(HashMap<String, String> _deploymentParameters) {
this.deploymentParameters = _deploymentParameters;
}
HashMap<String, String> deploymentParameters = null;
public void execute() throws MojoExecutionException, MojoFailureException {
if (getArtifact() == null && !getArtifact().exists())
throw new MojoFailureException("Artifact [" + getArtifact().getAbsolutePath()
+ "] doesnt exist!");
else
try {
doDeploymentGoal();
} catch (J2EEDeploymentException e) {
throw new MojoExecutionException(e.getMessage(), e);
}
}
/**
* @throws J2EEDeploymentException
*/
protected void doDeploymentGoal() throws J2EEDeploymentException {
getJ2eeDeploymentManager().deploy(getArtifact().getAbsolutePath(), getApplicationName(),
getDeploymentParameters(), true);
}
protected DeploymentManager getDeploymentManager() {
try {
if (deploymentManager == null) {
Oc4jDeploymentFactory oc4jDeploymentFactory = new Oc4jDeploymentFactory();
oc4jDeploymentFactory.handlesURI(getUrl());
DeploymentFactoryManager factory = DeploymentFactoryManager.getInstance();
factory.registerDeploymentFactory(oc4jDeploymentFactory);
setDeploymentManager(factory.getDeploymentManager(getUrl(), getUsername(),
getUserpassword()));
}
return this.deploymentManager;
} catch (DeploymentManagerCreationException e) {
getLog().error("The deploymentmanager is not available", e);
throw new RuntimeException(e);
}
}
}
Enfin, comble du paroxysme, on ne peut pas déployer une application avec cette API. La classe DeploymentManager permet de supprimer, mettre à jour mais pas de déployer. !!!!!!



