TOTD # 77: Running Seam examples with GlassFish

Seam is a full-stack solution to assemble complex web applications using simple annotated classes, a rich set of UI components, and very little XML. It integrates Ajax and Business Process Modeling with several Java EE technologies such as Java Server Faces (JSF), Java Persistence API (JPA), and Enterprise Java Beans (EJB 3.0).

GlassFish is a Java EE compliant application server so it's natural to pick GlassFish as your deployment platform for Seam applications :)

This blog is going to show how Seam samples can be easily run on GlassFish.
  1. Download Seam 2.1.1 GA from here and unzip.
  2. Build "examples/jpa" sample as:

    ~/tools/jboss-seam-2.1.1.GA/examples/jpa >ant glassfish
    Buildfile: build.xml

    glassfish:

    initcopy:

    initpoms:
         [echo] Setting up dependencies
        [mkdir] Created dir: /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms
         [copy] Copying 1 file to /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms
    [artifact:install] [INFO] Installing /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms/root.pom to . . .

    . . .

    init.war:

    war:
         [copy] Copying 27 files to /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jpa/exploded-archives-glassfish/jboss-seam-jpa.war
         [copy] Copying 7 files to /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jpa/exploded-archives-glassfish/jboss-seam-jpa.war/WEB-INF/lib

    noejb.war:
         [copy] Copying 18 files to /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jpa/exploded-archives-glassfish/jboss-seam-jpa.war/WEB-INF/lib
         [copy] Copying 2 files to /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jpa/exploded-archives-glassfish/jboss-seam-jpa.war
         [copy] Copying 4 files to /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jpa/exploded-archives-glassfish/jboss-seam-jpa.war

    distributable.war:

    noejb.archive:
          [jar] Building jar: /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jpa/dist-glassfish/jboss-seam-jpa.war

    BUILD SUCCESSFUL
    Total time: 5 seconds
  3. Deploy the sample as:

    ~/tools/jboss-seam-2.1.1.GA/examples/jpa >~/tools/glassfish/v2.1/glassfish/bin/asadmin deploy dist-glassfish/jboss-seam-jpa.war
    Command deploy executed successfully.

    The app is now accessible at "http://localhost:8080/jboss-seam-jpa" and here are some of the captured screenshots:







    Simple and easy!
  4. Build "examples/hibernate" as:

    ~/tools/jboss-seam-2.1.1.GA/examples/hibernate >ant glassfish
    Buildfile: build.xml

    glassfish:

    initcopy:

    initpoms:
         [echo] Setting up dependencies
         [copy] Copying 1 file to /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms
    [artifact:install] [INFO] Installing /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms/root.pom to /Users/arungupta/.m2/repository/org/jboss/seam/root/2.1.1.GA/root-2.1.1.GA.pom

     . . .

    distributable.war:

    noejb.archive:
          [jar] Building jar: /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/hibernate/dist-glassfish/jboss-seam-hibernate.war

    BUILD SUCCESSFUL
    Total time: 6 seconds

  5. Deploy the sample as:

    ~/tools/jboss-seam-2.1.1.GA/examples/hibernate >~/tools/glassfish/v2.1/glassfish/bin/asadmin deploy dist-glassfish/jboss-seam-hibernate.war
    Command deploy executed successfully.

    The app is now accessible at "http://localhost:8080/jboss-seam-hibernate" and has exactly similar snapshots as shown in "jboss-seam-jpa" sample. Simple and easy, yet again!
  6. Build "examples/jee5/booking" and deploy as:

    ~/tools/jboss-seam-2.1.1.GA/examples/jee5/booking >ant
    Buildfile: build.xml

    initcopy:

    initpoms:
         [echo] Setting up dependencies
         [copy] Copying 1 file to /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms
    [artifact:install] [INFO] Installing /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms/root.pom to /Users/arungupta/.m2/repository/org/jboss/seam/root/2.1.1.GA/root-2.1.1.GA.pom
         [copy] Copying 1 file to /Users/arungupta/tools/jboss-seam-2.1.1.GA/classes/poms

    . . .

    archive:
          [jar] Building jar: /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jee5/booking/dist/jboss-seam-jee5-booking.jar
          [jar] Building jar: /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jee5/booking/dist/jboss-seam-jee5-booking.war
          [jar] Building jar: /Users/arungupta/tools/jboss-seam-2.1.1.GA/examples/jee5/booking/dist/jboss-seam-jee5-booking.ear

    BUILD SUCCESSFUL
    Total time: 5 seconds
    ~/tools/jboss-seam-2.1.1.GA/examples/jee5/booking >~/tools/glassfish/v2.1/glassfish/bin/asadmin deploy dist/jboss-seam-jee5-booking.ear
    Command deploy executed successfully.

    The application is now accessible at "http://localhost:8080/seam-jee5-booking". Wow, that's simple and easy as well!
So we have deployed multiple Seam samples on GlassFish v2.1 - simple and easy!

Here are some more useful pointers realted to Seam and GlassFish:
  • Chapter 39 of the Seam Community Documentation even describes how to deploy an application created using seam-gen on GlassFish.
  • Dan Allen, the author of Manning's Seam in Action, presented a webinar at TheAquarium Online.
  • Several other Seam entries @ TA.
  • Deploying a seam-gen project to GlassFish (blog entry) - Here is a quote from the blog:

    GlassFish has a very sexy administrative console, but it also has a very sexy commandline tool known as asadmin. The asadmin tool gives you virtually unbounded control over the application server, including core tasks such as starting and stopping the application server, deploying and undeploying applications, and setting up database connection pools, amidst a plethora of other controls. You'll see that my modified seam-gen tool takes advantage of a handful of these commands.

    And another one ...

    GlassFish gives you efficiency through automation, which is undoubtedly the most effective way to become efficient. ... GlassFish volunteers itself to participate in a script and is the reason why I choose it as my preferred application server.
  • GlassFish support added to seam-gen: It is certainly exciting to know that there are targets like "gf-deploy-datasource", "gf-deploy-hibernate", and "gf-prepare" available to Seam developers out-of-the-box.
  • Sample Application using JSF, Seam, and Java Persistence APIs on GlassFish - detailed step-by-step blog explaining how to run Seam applications on GlassFish
The other samples in the bundle (that I tried) rely upon non-Java EE jars in the App Server's classpath. A slight build file tweaking can bundle those jars in the application itself and will allow to run them as well.

Are you deploying your Seam applications on GlassFish ?

Happy Seaming on GlassFish!

Please leave suggestions on other TOTD (Tip Of The Day) that you'd like to see. A complete archive of all the tips is available here.

Technorati: totd seam glassfish javaee javaserverfaces ejb jpa
Comments:

Sun's just been bought out by IBM and the general consensus is that NetBeans is probably going to be dropped like a stone...as you're arguably one of the experts on GlassFish, how is the merger going to affect this project as well? I cannot in any confidence recommend any Sun technology in the workplace with the company in limbo.

Posted by eru on April 03, 2009 at 09:47 AM PDT #

eru, Our company policy is to not comment on rumors.

Posted by Arun Gupta on April 03, 2009 at 01:20 PM PDT #

Do you happen to have a maven version of this? We wanted to move our Seam application from JBoss to Glassfish but had too many problems with dependencies and classpaths. Also the great embedded maven glassfish plugin really helps people getting started. It'd be nice to try this out simply by unzipping and typing "mvn glassfish:run."

Posted by Steven B on April 10, 2009 at 02:47 AM PDT #

Steven, good thought! I'm traveling next week so will try a maven version after I come back.

Posted by Arun Gupta on April 10, 2009 at 02:55 AM PDT #

thank you

Posted by neon on April 26, 2009 at 07:16 AM PDT #

thank you

Posted by neon tabela on April 26, 2009 at 07:16 AM PDT #

This example does not work on GlassFish :(

Posted by Jason on October 04, 2009 at 09:18 AM PDT #

Jason,

Which GlassFish version ?

Can you post more details to users@glassfish.dev.java.net ?

Posted by Arun Gupta on October 04, 2009 at 10:27 AM PDT #

Hi Arun,
thanks for reply. the email with more details subject: "Seam example does not work on GlassFish" was sent to users@glassfish.dev.java.net

Posted by Jason on October 05, 2009 at 09:53 PM PDT #

Hi again!
The email did sent, but I has received SPAM with offer:
"To subscribe to the list, send a blank message to:
users-subscribe@glassfish.dev.java.net"

I did not want get spams!

So more details I post here:

I did try install Seam example (jboss-seam/examples/jee5/booking/) as
at: http://blogs.sun.com/arungupta/entry/totd_77_running_seam_examples.

But Seam example does not work on GlassFish.
Crash while deploy:

[#|2009-10-06T15:35:53.079+0400|SEVERE|glassfish|null|_ThreadID=33;_ThreadName=Thread-3;|log4j:WARN
No appenders could be found for logger
(javax.servlet.ServletContextListener).|#]

[#|2009-10-06T15:35:53.080+0400|SEVERE|glassfish|null|_ThreadID=33;_ThreadName=Thread-3;|log4j:WARN
Please initialize the log4j system properly.|#]

[#|2009-10-06T15:35:53.716+0400|INFO|glassfish|javax.enterprise.system.core.classloading.com.sun.enterprise.loader|_ThreadID=33;_ThreadName=Thread-3;|org.jboss.seam.example.booking.User
actually got transformed|#]

[#|2009-10-06T15:35:56.561+0400|SEVERE|glassfish|org.apache.catalina.core.StandardContext|_ThreadID=33;_ThreadName=Thread-3;|PWC1306:
Startup of context /seam-jee5-booking failed due to previous errors|#]

...
..
Exception while loading the app : java.lang.Exception:
java.lang.IllegalStateException: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: java.lang.LinkageError: loader
constraint violation: loader (instance of
org/apache/felix/framework/ModuleImpl$ModuleClassLoader) previously
initiated loading for a different type with name
"javassist/bytecode/ClassFile"

Posted by Jason on October 05, 2009 at 10:02 PM PDT #

My Info:
glassfish-v3-preview-b66
jboss-seam-2.2.0.GA

Posted by Jason on October 05, 2009 at 10:05 PM PDT #

Jason, I tried with GlassFish v2.1, haven't tried with v3 yet. Can you post your question to users@glassfish.dev.java.net ?

Posted by Arun Gupta on October 08, 2009 at 03:56 AM PDT #

Jason, I'll try with v3 in 2 weeks otherwise you can also post your question to the forum at:

http://forums.java.net/jive/forum.jspa?forumID=56&start=0

and stay away from clogging your inbox.

Posted by Arun Gupta on October 08, 2009 at 03:58 AM PDT #

Hi Arun,

have you tried to deploy the seambay example and tested if the webservices are running?

The app itself was running very fast, but every times I try to use the webservice I get an:
java.lang.IllegalStateException: No event context active

Maybe you have an idea (the seam SOAPRequestHandler is called)?

Markus

Posted by Markus on December 29, 2009 at 12:32 AM PST #

Markus, I've not tried seambay example. Can you post your question to users@glassfish.dev.java.net ?

Posted by Arun Gupta on January 05, 2010 at 02:05 AM PST #

Post a Comment:
Comments are closed for this entry.
About

profile image
Arun Gupta is a technology enthusiast, a passionate runner, author, and a community guy who works for Oracle Corp.


Java EE 7 Samples

Stay Connected

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today