Glassfish 3 offre un module d’extension pour exécuter des opérations asadmin
avec ANT. Dans cet article, vous trouverez :
- Un exemple d’application web JSF 2.0 construit avec ANT
- Le paramétrage du module d’extension ANT avec Glassfish pour déployer cette application
Etapes préalables
Pour cet exemple, vous devrez avoir installé les composants suivants :
- Glassfish Server Open Source Edition 3.0.1; vous pouvez télécharger la distribution à l’URL suivante
- La dernière version de Apache Ant ; vous pouvez télécharger la distribution à l’URL suivante
- L’implémentation de référence de JSF 2.0 (aka le projet Mojarra)
glassfish-ant-tasks
; Pour ce dernier composant, lancez l’outilupdatetool
qui vient avec glassfish et ajouter l’add-on correspondant
Créez le projet HelloWorld/JSF
Le projet HelloWorld/JSF extrait du Tutorial Java EE 6 contient les 3 fichiers suivants stockés dans une arborescence créé pour l’occasion :
src
-> WEB-INF -> web.xml
-> java -> Hello.java
-> xhtml -> hello.xhtml
web.xml
contient la configuration de la servlet JavaServer Faces et de l’application web :
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>JSF HelloWorld</display-name>
<description>JSF HelloWorld Application</description>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>faces/hello.xhtml</welcome-file>
</welcome-file-list>
</web-app>
Hello.java
contient un ManagedBean qui affiche « Hello World » :
import javax.faces.bean.ManagedBean;
@ManagedBean
public class Hello {
final String world = "Hello World!";
public String getWorld() {
return world;
}
}
Enfin hello.xhtml
est un fichier Facelets qui affiche le contenu du Managed Bean via « Expression Language » :
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8"/>
<title>JavaServer Faces Hello World Application</title>
</head>
<body>
#{hello.world}
</body>
</html>
Script ANT et fichier .war
Positionnez la variable d’environnement JSF_HOME
qui correspondra au répertoire du projet Mojarra. Créez ensuite le fichier build.xml
à la racine du projet (au dessus du répertoire src
:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- Change the properties below to fit to your project context -->
<property name="app.name" value="project2"/>
<!-- Make sure the ENVIRONMENT variables are set correctly -->
<property environment="env"/>
<property name="jsf.home" value="${env.JSF_HOME}"/>
<property name="src.dir" value="src"/>
<target name="compile">
<mkdir dir="build/classes"/>
<javac srcdir="src/java" destdir="build/classes">
<classpath>
<pathelement location="${jsf.home}/lib/jsf-api.jar"/>
<pathelement location="${jsf.home}/lib/jsf-impl.jar"/>
</classpath>
</javac>
</target>
<target name="war" depends="compile">
<mkdir dir="build/war"/>
<war destfile="build/war/${app.name}.war"
webxml="src/WEB-INF/web.xml">
<fileset dir="src/xhtml"/>
<classes dir="build/classes"/>
</war>
</target>
</project>
Vous pourrez construire le fichier .war avec la commande ci-dessous :
ant war
Script ANT et déploiement Glassfish
La documentation produit « Chapter 3 Using Ant with GlassFishTM Server » présente plusieurs des concepts relatifs à l’utilisation de ANT avec ASADMIN. Malheureusement, le document contient également de nombreuses erreurs, à commencer par le nom du fichier .jar correspondant à l’extension ANT pour Glassfish inclus dans $GLASSHFISH_HOME/lib/ant/ant-tasks.jar
. Pour utiliser cette extension; procédez comme suit :
Modifier GLASSFISH_HOME, CLASSPATH et ANT_OPTS
Positionnez les variables GLASSFISH_HOME mais également ANT_OPTS et CLASSPATH avant de lancer la commande ant
comme ci-dessous :
export ANT_OPTS="-Djava.library.path=$GLASSFISH_HOME/lib/ant"
export CLASSPATH=$CLASSPATH:$GLASSFISH_HOME/lib/ant/ant-tasks.jar
Créer un fichier glassfish.txt
Il faut créer un fichier glassfish.txt qui contiendra le mot de passe de l’utilisateur admin de glassfish pour permettre le déploiement :
echo AS_ADMIN_PASSWORD=adminadmin > /tmp/glassfish.txt
Modifier build.xml pour inclure les directives de déploiement
Là encore, les informations et notamment les noms des classes sont imprécis. Voici un fichier qui fonctionne avec la version 3.0.1 :
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- Change the properties below to fit to your project context -->
<property name="app.name" value="project2"/>
<!-- Make sure the ENVIRONMENT variables are set correctly -->
<property environment="env"/>
<property name="asinstalldir" value="${env.GLASSFISH_HOME}"/>
<property name="jsf.home" value="${env.JSF_HOME}"/>
<property name="src.dir" value="src"/>
<target name="as-ant-init">
<taskdef name="sun-appserv-deploy"
classname="org.glassfish.ant.tasks.DeployTask" />
<taskdef name="sun-appserv-undeploy"
classname="org.glassfish.ant.tasks.UndeployTask" />
</target>
<target name="compile">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes">
<classpath>
<pathelement location="${jsf.home}/lib/jsf-api.jar"/>
<pathelement location="${jsf.home}/lib/jsf-impl.jar"/>
</classpath>
</javac>
</target>
<target name="war" depends="compile">
<mkdir dir="build/war"/>
<war destfile="build/war/${app.name}.war"
webxml="src/WEB-INF/web.xml">
<fileset dir="src/xhtml"/>
<classes dir="build/classes"/>
</war>
</target>
<target name="deploy" depends="as-ant-init, war"
description="Install Application to Servlet Container">
<echo message="Application Name: ${app.name}"/>
<sun-appserv-deploy passwordfile="/tmp/glassfish.txt"
host="localhost"
installDir="${asinstalldir}">
<component file="build/war/${app.name}.war"
contextroot="${app.name}"/>
</sun-appserv-deploy>
</target>
<target name="undeploy" depends="as-ant-init"
description="Install Application to Servlet Container">
<echo message="Application Name: ${app.name}"/>
<sun-appserv-undeploy name="${app.name}"
passwordfile="/tmp/glassfish.txt"
host="localhost"
installDir="${asinstalldir}">
</sun-appserv-undeploy>
</target>
</project>
Déployer et Desinstaller l’application
Ant vous permet désormais de déployer et désinstaller l’application à l’aide du script ci-dessous :
ant deploy
Pour désinstaller l’application, lancez :
ant undeploy