SeamFramework.orgCommunity Documentation

Chapitre 41. Seam avec le serveur d'application GlassFish

41.1. L'environement GlassFish et les informations de déploiement
41.1.1. Installation
41.2. L'exemple jee5/booking
41.2.1. Compilation de l'exemple jee5/booking
41.2.2. Le déploiement de l'application dans GlassFish
41.3. L'exemple de réservation jpa
41.3.1. La construction de l'exemple jpa
41.3.2. Le déploiement de l'exemple jpa
41.3.3. Ce qui est différent pour GlassFish v2 UR2
41.4. Le déploiement d'une application générée par seam-gen sur GlassFish v2 UR2
41.4.1. Exécution du configurateur seam-gen
41.4.2. Les modifications nécéssaires pour le déploiement dans GlassFish

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

Note

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.

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.

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

En utilisant Derby au lieur d'Hypersonic SQL DB

Pour que l'application fonctionne immédiatement avec GlassFish, nous avons utilisé la base de données Derby (aussi connu JavaDB) dans GlassFish. Cependant, nous recommandons particulièrement d'utiliser une autre base de données (par exemple HSQL). 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.

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
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
>

Cette application a des besoins similaires à l'exemple jee5/booking.