SeamFramework.orgCommunity Documentation
GlassFish est un serveur d'application open source qui implément complètement Java EE 5. La dernière version stable est v2 UR2.
En premier, nous allons parler de l'environement FlassFish. Ensuite nous allons passer sur comment vous allez déployer l'exemple JEE5. Enfin, nous allons déployer l'application d'exemple JPA. Au final, nous allons vor comment obtenir une application générée par seam-gen pour une exécution sur GlassFish.
Tous les exemples et les informations de ce chapitre sont basés sur la dernière version de GlassFish au moment de son écriture.
Après le téléchargement de GlassFish, installez le:
$ java -Xmx256m -jar glassfish-installer-v2ur2-b04-linux.jar
Après l'installation, configurez GlassFish:
$ cd glassfish; ant -f setup.xml
Le nom de domaine créé est domain1.
Ensuite, nous démarrons le serveur JavaDB embarqué:
$ bin/asadmin start-database
JavaDB est une base de données embarqué qui est inclue dans dans GlassFish, tout comme HSQLDB est inclue dans JBoss AS.
Maintenant, démarrez le serveur GlassFish:
$ bin/asadmin start-domain domain1
La console web d'administration est disponible à l'adresse http://localhost:4848/. Vous pouvez accéder à la console web d'administration avec le nom d'utilisateur par défaut (admin) et le mot de passe (adminadmin). Nous allons utiliser la console d'administration pour déployer nos exemples. Vous pouvez aussi copier les fichiers EAR/WAR dans le dossier glassfish/domains/domain1/autodeploy pour les déployer, mais nous n'allons pas parler de cela.
Vous pouvez arrêter le serveur et la base de données en utilisant:
$ bin/asadmin stop-domain domain1; bin/asadmin stop-database
L'exemple jee5/booking est basé sur l'exemple de réservation d'hotel (qui s'exécute sur JBoss AS). Par défaut, il est aussi prévu de fonctionner sur GlassFish. Il ets localisé dans $SEAM_DIST/examples/jee5/booking.
Pour construire l'exemple, exécuter simplement la cible par défaut ant:
$ ant
dans le dossier examples/jee5/booking. Ceci va créer les dossiers dist et exploded-archives.
Nous allons déployer l'application dans GlassFish en utilisant la console d'administration de GlassFish.
Connectez vous sur la console d'administration à l'adresse http://localhost:4848
Accédez à Enterprise Applications dans le menu option sous Applications dans le menu à gauche.
En haut, le tableau Enterprise Application sélectionnez Deploy. Suivez l'assistant, en utilisant ces indications:
La préparation de l'installation de l'application
Navigers vers examples/jee5/booking/dist/jboss-seam-jee5.ear.
Sélectionnez le bouton OK.
Vous pouvez maintenant accéder à l'application sur http://localhost:8081/seam-jee5/.
Ceci est l'exemple de la réservation d'hotel en implémenté en POJOs de Seam et utilisant les transactions JPA avec d'Hibernate JPA. Il ne nécéssite par le support de EJB3 pour s'exécuter sur le serveur d'application.
Cet exemple à déjà à disposition les configurations et les scripts de compilation pour la plus part des containeurs y compris GlassFish.
Pour compiler l'exemple, utilisez la cible glassfish:
$ ant glassfish
Ceci va construire pour le containeur spécifique les dossiers dist-glassfish and exploded-archives-glasfish
Ceci est très similaire à l'exemple jee5 à voir Section 41.2.2, « Le déploiement de l'application dans GlassFish » exception faire que c'est un war et non un ear.
Connectez vous à la console d'administraiton:
http://localhost:4848
Accédez au Web Applications dans le menu d'option sous Applications dans le menu de gauche.
La préparation de l'installation de l'application
Navigez vers examples/jpa/dist-glassfish/jboss-seam-jpa.war.
Sélectionnez le bouton OK.
Vous pouvez maintenant accéder à l'application sur http://localhost:8081/jboss-seam-jpa/.
examples/jpa/resources-glassfish/WEB-INF/classes/GlassfishDerbyDialect.class est un truc pour contourner un bug de Derby dans le serveur GlassFish. Vous devez l'utiliser comme dialecte Hibernate, si vous utilisez Derby avec GlassFish. Configuration file changes
META-INF/persistence.xml — le principal changement nécéssaire est le datasource JNDI, le basculement vers la classe de scrutation du gestionnaire de transaction de GlassFish , et en changeant le dialecte d'hibernate pour GlassfishDerbyDialect.
WEB-INF/classes/GlassfishDerbyDialect.class — cette classe est nécesssaire pour que le dialecte d'Hibernate soit changé en GlassfishDerbyDialect
import.sql — tout comme pour le dialecte la colonne ID de Derby DB ne peut être remplie par ce fichier et a été retiré.
seam-gen est un outil très utile pour les développeurs qui rapidement ont une application opérationnelle et s'exécutant et fourni des fondations pour ajouter vos fonctionnalités. Par défautseam-gen va poduire des applications configurés pour s'exécuter sur JBoss AS. Ces instructions vont montrer les étapes nécéssaire poiyr les avoir pour GlassFish.
La première étape est de configurer seam-gen pour construire le projet de base. Ils ya plusieurs choix à faire plus bas, particulièrement poiyr le datasource et les valeurs d'hibernate que nous allons modifier une fois que le projet a été créé.
$ ./seam setup Buildfile: build.xml init: setup: [echo] Welcome to seam-gen :-) [input] Enter your Java project workspace (the directory that contains your Seam projects) [C:/Projects] [C:/Projects] /projects [input] Enter your JBoss home directory [C:/Program Files/jboss-4.2.3.GA] [C:/Program Files/jboss-4.2.3.GA] [input] Enter the project name [myproject] [myproject] seamgen_example [echo] Accepted project name as: seamgen_example [input] Do you want to use ICEfaces instead of RichFaces [n] (y, [n]) [input] skipping input as property icefaces.home.new has already been set. [input] Select a RichFaces skin [blueSky] ([blueSky], classic, ruby, wine, deepMarine, emeraldTown, japanCherry, DEFAULT) [input] Is this project deployed as an EAR (with EJB components) or a WAR (with no EJB support) [ear] ([ear], war) [input] Enter the Java package name for your session beans [com.mydomain.seamgen_example] [com.mydomain.seamgen_example] org.jboss.seam.tutorial.glassfish.action [input] Enter the Java package name for your entity beans [org.jboss.seam.tutorial.glassfish.action] [org.jboss.seam.tutorial.glassfish.action] org.jboss.seam.tutorial.glassfish.model [input] Enter the Java package name for your test cases [org.jboss.seam.tutorial.glassfish.action.test] [org.jboss.seam.tutorial.glassfish.action.test] org.jboss.seam.tutorial.glassfish.test [input] What kind of database are you using? [hsql] ([hsql], mysql, oracle, postgres, mssql, db2, sybase, enterprisedb, h2) [input] Enter the Hibernate dialect for your database [org.hibernate.dialect.HSQLDialect] [org.hibernate.dialect.HSQLDialect] [input] Enter the filesystem path to the JDBC driver jar [/tmp/seam/lib/hsqldb.jar] [/tmp/seam/lib/hsqldb.jar] [input] Enter JDBC driver class for your database [org.hsqldb.jdbcDriver] [org.hsqldb.jdbcDriver] [input] Enter the JDBC URL for your database [jdbc:hsqldb:.] [jdbc:hsqldb:.] [input] Enter database username [sa] [sa] [input] Enter database password [] [] [input] Enter the database schema name (it is OK to leave this blank) [] [] [input] Enter the database catalog name (it is OK to leave this blank) [] [] [input] Are you working with tables that already exist in the database? [n] (y, [n]) [input] Do you want to drop and recreate the database tables and data in import.sql each time you deploy? [n] (y, [n]) [propertyfile] Creating new property file: /home/mnovotny/workspaces/jboss/jboss-seam/seam-gen/build.properties [echo] Installing JDBC driver jar to JBoss server [copy] Copying 1 file to /home/mnovotny/workspaces/jboss/jboss-seam/seam-gen/C:/Program Files/jboss-4.2.3.GA/server/default/lib [echo] Type 'seam create-project' to create the new project BUILD SUCCESSFUL Total time: 4 minutes 5 seconds
Entrez $ ./seam new-project pour créer votre projet et ensuite cd /projects/seamgen_example pour aller dans la structure nouvellement créée.
Nous allons maintenant faire quelques modificaitions dans le projet généré.
resources/META-INF/persistence-dev.xml
Modifiez le jta-data-source pour le mettre à jdbc/__default. Nous allons utiliser Derby DB intégré dans GlassFish.
Modifiez les propriétés avec les suivantes. Les différences clefs sont brièvements décrites dans Section 41.3.3, « Ce qui est différent pour GlassFish v2 UR2 »:
<property name="hibernate.dialect" value="GlassfishDerbyDialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
Nous allons avoir besoin de modifier persistence-prod.xml aussi si vous voulez deployer dans GlassFish en utilisant le profile de prod.
resources/GlassfishDerbyDialect.class
Tout comme les autres exemples, nous allons avoir besoin d'inclure cette classe pour le support de la BD. Il peut être copie depuis l'exemple jpa dans le dossier seamgen_example/resources.
$ cp \
$SEAM_DIST/examples/jpa/resources-glassfish/WEB-INF/classes/GlassfishDerbyDialect.class \
./resources
resources/META-INF/jboss-app.xml
Vous pouvez effacer ce fichier car nous n'allons pas déployer vers JBoss AS (jboss-app.xmlest utilisé pour activer l'isolation du chargement des classes dans JBoss AS)
resources/*-ds.xml
Vous pouvez effacer ces fichiers nous n'allons pas déployer vers JBoss AS (ces fichiers définissent des sources de données dans JBoss AS, nous allons utiliser la source de données par défaut de GlassFish)
resources/WEB-INF/components.xml
Active l'intégration des transactions du containeur géré - ajoutez le composant <transaction:ejb-transaction/> et sa déclaration d'espace de nom xmlns:transaction="http://jboss.com/products/seam/transaction"
Modifiez le jndi-pattern à java:comp/env/seamgen_example/#{ejbName}
resources/WEB-INF/web.xml
Avez l'exemple jee5/booking, nous allons avoir besoin d'ajouter les références EJB references à web.xml. Techniquement, le type de référence n'est pas requi, mais nous l'ajoutons ici pour faire bonne figure. Notez que ces références nécéssitent la présence d'un élément vide local-home pour conserver la compatibilité avec un déploiement JBoss AS 4.x.
<ejb-local-ref
>
<ejb-ref-name
>seamgen_example/AuthenticatorAction</ejb-ref-name
>
<ejb-ref-type
>Session</ejb-ref-type
>
<local-home/>
<local
>org.jboss.seam.tutorial.glassfish.action.Authenticator</local
>
</ejb-local-ref>
<ejb-local-ref>
<ejb-ref-name
>seamgen_example/EjbSynchronizations</ejb-ref-name
>
<ejb-ref-type
>Session</ejb-ref-type>
<local-home/>
<local
>org.jboss.seam.transaction.LocalEjbSynchronizations</local>
</ejb-local-ref
>
Gardez à l'esprit que si vous déployer dans JBoss AS 4.x, et que vous avez défini les références EJB comme montrées ci-dessus dans votre web.xml, vous allez avoir aussi besoin de définir les noms JNDI locaux de chacun d'entre eux dans jboss-web.xml, comme montré ci-dessous. Cette étape n'est pas nécéssaire avec le déploiement dans GlassFish, mais elle est mentionnée ici dans le cas où vous voudriez aussi déployer lapplication dans JBoss AS 4.x (pas nécéssaire pour JBoss AS 5).
<ejb-local-ref
>
<ejb-ref-name
>seamgen_example/AuthenticatorAction</ejb-ref-name
>
<local-jndi-name
>AuthenticatorAction</local-jndi-name
>
</ejb-local-ref>
<ejb-local-ref>
<ejb-ref-name
>seamgen_example/EjbSynchronizations</ejb-ref-name
>
<local-jndi-name
>EjbSynchronizations</local-jndi-name>
</ejb-local-ref
>
Nous voulons prendre le composant POJO de Seam existant Authenticator et créer un EJB à l'extérieur de lui.
Renommer la classe en AuthenticatorAction
Ajoutez l'annotation @Stateless à la nouvelle classe AuthenticatorAction.
Créer un interface appelé Authenticator qui implémente AuthenticatorAction (EJB3 nécéssite pour les beans de session d'avoir un interface local). Annotez l'interface avec @Local, et ajoutez une seule méthode avec la même signature que authenticate dans AuthenticatorAction.
@Name("authenticator")
@Stateless
public class AuthenticatorAction implements Authenticator {
@Local
public interface Authenticator {
public boolean authenticate();
}
Vous avons déjà ajouté sa référence au fichier web.xml donc nous pouvons continuer.
Cette application a des besoins similaires à l'exemple jee5/booking.
Modifiez la cible par défaut à archive (nous n'allons pas couvrir le déploiement automatique vers GlassFish).
<project name="seamgen_example" default="archive" basedir="."
>
Nous alllons avoir besoin de GlassfishDerbyDialect.class dans notre jar d'application. Pour faire cela, trouvez la tâche jar et ajoutez la ligne GlassfishDerbyDialect.class comme montré ci-dessous:
<target name="jar" depends="compile,copyclasses" description="Build the distribution .jar file">
<copy todir="${jar.dir}">
<fileset dir="${basedir}/resources">
<include name="seam.properties" />
<include name="*.drl" />
<include name="GlassfishDerbyDialect.class" />
</fileset
>
</copy>
...
Maintenant nous allons avoir besoin d'ajouter les jars additionnel dans le fichier ear. Regarez dans la section <copy todir="${ear.dir}/lib"
> de la cible ear. Ajoutez ce qui suit à l'enfant de l'élément <fileset dir="${lib.dir}"
>.
Ajoutez les dépendances Hibernate
<!-- Hibernate and deps -->
<include name="hibernate.jar"/>
<include name="hibernate-commons-annotations.jar"/>
<include name="hibernate-annotations.jar"/>
<include name="hibernate-entitymanager.jar"/>
<include name="hibernate-validator.jar"/>
<include name="jboss-common-core.jar"/>
Ajoutez les dépendances des tierces parties.
<!-- 3rd party and supporting jars -->
<include name="javassist.jar"/>
<include name="dom4j.jar"/>
<include name="concurrent.jar" />
<include name="cglib.jar"/>
<include name="asm.jar"/>
<include name="antlr.jar" />
<include name="commons-logging.jar" />
<include name="commons-collections.jar" />
Vous pourrions finir avec quelquechose comme:
<fileset dir="${lib.dir}">
<includesfile name="deployed-jars-ear.list" />
<!-- Hibernate and deps -->
<include name="hibernate.jar"/>
<include name="hibernate-commons-annotations.jar"/>
<include name="hibernate-annotations.jar"/>
<include name="hibernate-entitymanager.jar"/>
<include name="hibernate-validator.jar"/>
<include name="jboss-common-core.jar" />
<!-- 3rd party and supporting jars -->
<include name="javassist.jar" />
<include name="dom4j.jar" />
<include name="concurrent.jar" />
<include name="cglib.jar" />
<include name="asm.jar" />
<include name="antlr.jar" />
<include name="commons-logging.jar" />
<include name="commons-collections.jar" />
</fileset
>
Compilez votre application en appelant ant dans le dossier de base de votre projet (par exemple /projects/seamgen-example). La cible de cette compilation sera dist/seamgen-example.ear.
Pour déployer l'application suivre les instructions ici Section 41.2.2, « Le déploiement de l'application dans GlassFish » mais utiliser les références pour ce projet seamgen-example au lieu de jboss-seam-jee5.
Vérifiez l'application sur http://localhost:8081/seamgen_example/