Deployer JavaEE avec Maven

Pour déployer simplement des applications JEE (EJB, Web app ou EAR) depuis maven. Il est possible d’utiliser Cargo. Cargo offre une couche d’abstraction au dessus des différents serveur d’application pour pouvoir les installer et y déployer des applications.

Dans le cadre des TP, nous l’utiliserons dans un premier temps pour déployer vers un ou plusieurs serveur glassfish.

Pour cela, il faut simplement indiquer dans chaque module les artefact à déployer (ici un EAR) :

    <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>${cargo.plugin.version}</version>
 
                <configuration>
                    <container>
                        <containerId>${integration.container.id}</containerId>
                        <type>remote</type>
                    </container>
                    <configuration>
                        <type>runtime</type>
                        <properties>
                            <cargo.hostname>${glassfish.hostname}</cargo.hostname>
                            <cargo.remote.username>${glassfish.remote.username}</cargo.remote.username>
                            <cargo.remote.password>${glassfish.remote.password}</cargo.remote.password>
                            <cargo.remote.port>${glassfish.remote.port}</cargo.remote.port>
                            <cargo.glassfish.domain.name>${glassfish.domain.name}</cargo.glassfish.domain.name>
                        </properties>
                    </configuration>
 
                    <!-- Deployables configuration -->
                    <deployables>
                        <deployable>
                            <groupId>fr.univ_tln.bruno.test.jee</groupId>
                            <artifactId>EAR</artifactId>
                            <type>ear</type>
                            <!--pingURL>optional url to ping to know if deployable is done or not</pingURL>
                            <pingTimeout>optional timeout to ping (default 20000 milliseconds)</pingTimeout-->
                        </deployable>
                    </deployables>
 
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.glassfish.deployment</groupId>
                        <artifactId>deployment-client</artifactId>
                        <version>3.2-b06</version>
                    </dependency>
                </dependencies>
 
            </plugin>

On peut fixer globalement une partie des paramètres du plugin dans un pom parent. En modifiant ces paramètres on peut aussi utiliser un autre serveur d’application.

        <glassfish.home.prefix>/usr/local/programs/</glassfish.home.prefix>
        <cargo.plugin.version>1.4.4</cargo.plugin.version>
        <glassfish.domain.name>domain1</glassfish.domain.name>
        <glassfish.home>${glassfish.home.prefix}/glassfish4</glassfish.home>
        <integration.container.id>glassfish4x</integration.container.id>

L’utilisation des profils permet de déployer simplement vers plusieurs serveurs (développement, test, production, …).

 <profiles>
         <profile>
            <id>glassfishlocal</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <cargo.hostname>localhost</cargo.hostname>
                <cargo.remote.username>XXX</cargo.remote.username>
                <cargo.remote.password>YYY</cargo.remote.password>
                <cargo.remote.port>8080</cargo.remote.port>
            </properties>
        </profile>
        <profile>
            <id>glassfishpanda</id>
            <properties>
                <cargo.hostname>arm-lsis-1</cargo.hostname>
                <cargo.remote.username>XXX</cargo.remote.username>
                <cargo.remote.password>YYY</cargo.remote.password>
                <cargo.remote.port>8080</cargo.remote.port>
            </properties>
        </profile>
 
    </profiles>

Dans l’exemple suivant le déploiement par défaut se fait dans un serveur local :

mvn cargo:deploy

pour déployer vers l’autre serveur, il suffit d’activer le profil :

mvn -P glassfishpanda cargo:deploy 

Pour rappel, l’utilisation de condition d’activation permet d’activer automatiquement un profil pour par exemple déployer automatiquement vers le serveur de production lors d’une release.