Déploiement facile avec Weblogic

De même que Goliath faisait Poids-Lourd vis-à-vis de David, Weblogic se présente de la même façon vis-à-vis de Tomcat. Ne donnerait-on pas jusqu'à son dernier lance-pierre pour pouvoir déployer aussi facilement que via le Tomcat Manager, la dernière version de notre web-app préférée sur un serveur Weblogic? Eh bien, gardez bien votre fronde dans votre poche arrière et laissez-moi vous guider sur le chemin du "easy-deploy" grâce à Maven.

Quelques mots

Comme bon nombre d'entre vous le sait déjà, Maven a grandement participé à la simplification de nos tâches quotidiennes en ce qui concerne la "logistique" autour de Java. Filtre de ressources, tests et packaging se sont trouvés simplifiés et accessibles à tous du bout des doigts par un "mvn MonActionFavorite" ... (oui, je sais, nous attendons toujours le fameux plugin "mvn coffe:make").

Maven revient à nous par l'intermédiaire du plug-in Weblogic (Téléchargeable ici) afin de nous permettre le déploiement à chaud et à distance d'une webapp sur un serveur Weblogic (démarré, bien sûr car c'est souvent là le plus long).

Mise en place de l'environnement

a) Java 'n Co

Un peu de ménage est nécessaire sur notre environnement de travail afin de pouvoir bénéficier d'un déploiement à distance. Tout d'abord, veillez à référencer votre JAVA_HOME correctement dans votre environnement système, et note à mes compatriotes développeurs sous Windows, SURTOUT, installez le avec un chemin loin des "Program Files" et autres. Rien de tel qu'un bon "C:\Dev\Jdk160" comme répertoire d'installation. Une raison autre que l'aspect "Joli", est que le plugin que nous allons utiliser semble avoir quelques soucis concernant les chemins d'accès comportant des espaces, ce qui vous vaudrait de très jolis messages "no protocol: and" lors de l'exécution du plugin.

N'oublions pas d'ajouter le répertoire JAVA_HOME\bin en complément dans la variable PATH ne notre OS.

b) Maven 'n Co

Dans la même optique, pour éviter tout problème de chemin d'accès aux librairies, notamment sous Windows, nous devons vérifier la présence de
la balise suivante dans le fichier "settings.xml" de configuration de Maven, présent par défaut dans le répertoire .m2, situé dans le répertoire
utilisateur (C:\Documents and Settings\MonCompte\.m2 sous Windows).

<settings>
	<localRepository>${HOMEDRIVE}/Docume~1/${USERNAME}/.m2/repository</localRepository>
	...
</settings>

Cette balise renseigne donc de façon explicite à Maven et ses plugins l'emplacement où se trouve notre dépôt de jars.

De plus, assurons nous d'avoir aussi le répertoire M2_HOME\bin de défini dans le PATH ne notre OS, où M2_HOME représente le répertoire d'installation de Maven (pourquoi pas un petit "C:\Dev\Maven209" ?)

c) Weblo 'n Co

Passons maintenant à la pièce principale : Weblogic, ou plutôt ses jars sans lesquels le plugin ne nous serait que de peu d'utilité. Nous devons à présent enregistrer ces jars dans notre dépôt local. Supposons que Weblogic soit installé dans le répertoire suivant : "E:\bea\weblogic92".

Installez alors les jars en utilisant les commandes suivantes :

mvn install:install-file -DgroupId=weblogic -DartifactId=weblogic -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\server\lib\weblogic.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=webservices -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\server\lib\webservices.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=xbean -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\server\lib\xbean.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=wlw-langx -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\server\lib\wlw-langx.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=weblogic-container-binding -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\server\lib\schema\weblogic-container-binding.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=wlw-util -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\common\lib\wlw-util.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=bcel -Dversion=5.1 -Dpackaging=jar -Dfile=E:\bea\weblogic92\javelin\lib\bcel.jar
mvn install:install-file -DgroupId=weblogic -DartifactId=javelinx -Dversion=9.2 -Dpackaging=jar -Dfile=E:\bea\weblogic92\javelin\lib\javelinx.jar

Fini ? Non pas tout à fait, il nous reste encore une étape pour Weblogic... Il faut lui dire d'écouter quand on lui parle (évident non ?). Le plugin nécessite l'activation du tunneling dans le serveur d'administration afin de lui donner les ordres et données nécessaires au déploiement. Voici ce qu'il faut faire :

  1. Se connecter en tant qu'Administrateur à la console du serveur Weblogic.
  2. Sélectionner "Environment" dans la console d'administration du serveur.
  3. Sélectionner "Server".
  4. Sélectionner le serveur désiré en cliquant sur son nom.
  5. Sélectionner l'onglet "Protocols".
  6. Sélectionner le sous onglet "HTTP" et descendre au niveau de l'option de "tunneling".
  7. Activer l'édition de configuration en cliquant sur le bouton "Lock & Edit" en haut à gauche de la page.
  8. Cocher la case pour l'option de "tunneling".
  9. Confirmer la configuration en cliquant sur le bouton "Activate Changes" en haut à gauche de la page.

... et voilà, Weblogic est à vos ordres.

Et mon projet dans tout ça ???

a) Des poms', Des poms', et des ...

Comme tout bon plugin, celui pour Weblogic nécessite sa déclaration dans le pom de notre projet, donc hop, la voici :

<project...>
	...
	<properties>
		...
	    <weblogic-maven-plugin-version>2.9.1</weblogic-maven-plugin-version>
	    <weblogic-version>9.2</weblogic-version>
	    <weblogic-bcel-version>5.1</weblogic-bcel-version>
	</properties>
	...
	<build>
		...
		<plugins>
			...
			<plugin>
		        <groupId>org.codehaus.mojo</groupId>
		        <artifactId>weblogic-maven-plugin</artifactId>
		        <version>${weblogic-maven-plugin-version}</version>
				<configuration>
					<adminServerHostName>127.0.0.1</adminServerHostName>
					<adminServerPort>7001</adminServerPort>
					<adminServerProtocol>http</adminServerProtocol>
					<userId>weblogic</userId>
					<password>weblogic</password>
					<upload>true</upload>
					<remote>true</remote>
					<verbose>false</verbose>
					<debug>false</debug>
					<targetNames>examplesServer</targetNames>
				</configuration>
		        <dependencies>
		            <dependency>
		                <groupId>com.sun</groupId>
		                <artifactId>tools</artifactId>
		                <version>1.5</version>
		                <scope>system</scope>
		                <systemPath>${java.home}/../lib/tools.jar</systemPath>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>weblogic</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>webservices</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>xbean</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>javelinx</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>bcel</artifactId>
		                <version>${weblogic-bcel-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>wlw-util</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>wlw-langx</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>org.apache.xmlbeans</groupId>
		                <artifactId>xmlbeans</artifactId>
		                <version>2.3.0</version>
		                <scope>provided</scope>
		            </dependency>
		            <dependency>
		                <groupId>weblogic</groupId>
		                <artifactId>weblogic-container-binding</artifactId>
		                <version>${weblogic-version}</version>
		                <scope>provided</scope>
		            </dependency>
		        </dependencies>
			</plugin>
		</plugins>
	</build>
	...
</project>

Et voila, nous sommes (enfin) prêts à déployer facilement et rapidement notre application sur notre serveur Weblogic.

Pour le faire, il ne nous reste plus qu'à packager notre application grâce à "mvn clean package", puis de demander son déploiement via "mvn weblogic:deploy", et après quelques instants notre application est déployée "à chaud" à distance.

Comment la supprimer alors ? Et bien "mvn weblogic:undeploy" est là pour le faire. Dorénavant, finis les clics interminables dans la console de Weblogic.

b) Oui mais ....

1) Pourquoi pas de redeploy ?

Effectivement, le plugin permet l'appel de la fonction 'redeploy' qui normalement se charge tout seul du cycle "undeploy-deploy". Malheureusement j'ai été pris au piège de cette commande qui, bien que se déroulant sans problème, ne me remplacait pas mon application, et donc me laissait dans l'illusion d'un déploiement rapide et sans problème... pour ne rien remplacer au final !!!

Donc oui je préfère perdre quelques secondes de plus mais m'assurer du bon déploiement de mes modifications plutôt que d'avoir un doute.

2) Comment déployer sur plusieurs serveurs ?

Eh bien Maven et son système de filtrage vous permettent de faire la manipulation sans peine. Imaginons 2 configurations : une de développement en local, et une d'intégration continue (Et pourquoi pas une petite visite d'un environnement d'intégration continue ?).

Dans la déclaration du plugin, il suffit de supprimer les 2 entrées suivantes :

				<configuration>
					<adminServerHostName>127.0.0.1</adminServerHostName>
					<adminServerPort>7001</adminServerPort>
					...
				<configuration>

Pour les définir dans votre section de filtrage, au sein de vos 2 profils.

	<profiles>
		<profile>
			<id>dev</id>
			<properties>
				<env>dev</env>
			</properties>
			<build>
				<plugins>
					<plugin>
				        <groupId>org.codehaus.mojo</groupId>
				        <artifactId>weblogic-maven-plugin</artifactId>
				        <version>${weblogic-maven-plugin-version}</version>
						<configuration>
							<adminServerHostName>127.0.0.1</adminServerHostName>
							<adminServerPort>7001</adminServerPort>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
		<profile>
			<id>integ</id>
			<properties>
				<env>integ</env>
			</properties>
			<build>
				<plugins>
					<plugin>
				        <groupId>org.codehaus.mojo</groupId>
				        <artifactId>weblogic-maven-plugin</artifactId>
				        <version>${weblogic-maven-plugin-version}</version>
						<configuration>
							<adminServerHostName>192.168.10.44</adminServerHostName>
							<adminServerPort>7001</adminServerPort>
						</configuration>
					</plugin>
				</plugins>
			</build>
		</profile>
		...
	<profiles>

Et le tour est joué !

Conclusion

Le plugin Weblogic, une fois configuré, vous permet donc de déployer à moindre coût vos applications à distance, tout en vous sauvant du temps et des clics... peut-être assez pour finaliser notre "mvn coffee:make" 😉

Bon Deploy !!!

6 commentaires

  1. Bonjour,

    Très bon tutoriel ! Pour ma part cette partie je viens de la creuser de mon côté pour finalement arrivé au même résultat. Mais ce tutoriel me confirme ce que j’ai mis en place.

    Par contre J’ai une petite question pour l’environnement local. J’essaye de mettre en place un déploiement à chaud façon Jetty, c’est à dire que toutes modifications dans les sources de ton projets sont déployée directement sur Weblogic sans avoir besoin de faire un mvn install et un mvn weblogic:undeploy et weblogic:deploy.
    As tu une solution ?

    Je viens d’arriver sur un projet qui utilise Weblogic et je ne maitrise pas encore ce serveur d’appli, ni le plugin maven qui lui est propore

    environnement :
    Maven2 JSF2 JPA Weblogic10.3.

    Merci d’avance.

  2. Bonjour,
    Je vous remercie pour ces informations cruciales. bon! je viens d’installer pour la 1ère fois Weblogic et je cherche comment déployer une application développée avec Oracle Forms/Reports 10g ? est ce que c’est la même chose que IAS 10g?

  3. I cherished up to you will obtain performed proper here. The cartoon is tasteful, your authored material stylish. nevertheless, you command get bought an nervousness over that you want be handing over the following. in poor health surely come further earlier once more as precisely the same just about a lot ceaselessly inside case you protect this increase.

  4. I cherished up to you will obtain performed proper here. The cartoon is tasteful, your authored material stylish. nevertheless, you command get bought an nervousness over that you want be handing over the following. in poor health surely come further earlier once more as precisely the same just about a lot ceaselessly inside case you protect this increase.

  5. Salut,

    Très bon tuto. Pour information si vous utilisez la plate-forme de build Jenkins, vous pouvez aussi vous appuyer sur le plugin weblogic-deployer-plugin. Le principal avantage étant de rendre agnostique le pom vis à vis de la plate-forme JEE utilisée. Il fournit entre autre la possibilité de déployer sur différentes cibles Weblo.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.