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.xml
est 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/