Running Seam 2.0 on Tomcat(EJB3) using Maven and Cargo

In this article I review a simple Seam 2.0.0.CR2 app that deploys to Tomcat 6.0.13 with JBoss Embedded Beta2.

It's great to see Seam move to Maven because tracking and installing all those dependencies in a local repository was a pain in the ass! This project is moving fast, and if you wanted to keep up with the latest version, it was a lot of work. So now that my life is easier, I thought I would make the Seam+EJB+Tomcat user's life a little easier also.

The following is included in this sample app:

  • Trinidad 1.0.2
  • JBoss RichFaces
  • JAAS
  • Drools
  • JBPM
  • And everything else that seam and Embedded/EJB3 provides out of box.

All you need to have is Maven 2.0.x installed. The rest is cake. During the installation Cargo will download a zip file from the JBoss Maven repository. This is the Tomcat 6.0.13 distro with Embedded already installed and setup. Nothing else has been added to it.


  1. Checkout the project and getting started directions Here

*Note - I used a stub for the datasource in TOMCAT_HOME/lib/deploy. Don’t forget that this deploy directory is supposed to be the same as JBoss AS deploy directory.

I used a few cool things in the maven pom setup:

  • It seems you can trick cargo into using the latest version of tomcat. The documentation says Tomcat5x is only supported for the container, but I didn’t have any problems using 6.0.x with the Tomcat5x containerId
  • The cargo.container.url can be local, there is an example in the web/pom.xml (at the bottom)…So once you have this downloaded in you target dir, I would copy it somewhere outside of target and change the cargo.container.url to point to it. It will save time from downloading and bandwidth. It would be cool to add it as a dependency and then unzip from your local maven repo, but I haven’t tried it yet.
  • Like I mentioned earlier, if you want to disable auto start of the Tomcat server you should disable this section of the cargo plugin in web/pom.xml

    <goals> <goal>start</goal> </goals> </execution>

    <execution> <id>deploy-app</id> <phase>install</phase> <goals>

    <goal>deployer-deploy</goal> </goals> </execution> </executions>

  • I have another version of this sample app that uses profiles to build either an EAR for JBoss or a WAR for Tomcat+Embedded. Michael Yuan recently touched on this subject about the EAR+Seam maven impl and did a great job breaking it down. I will try to post the sample app that lets you build a war for Tomcat or an EAR for JBoss all based on the maven profile i.e… mvn install -Ptomcat or mvn install -Pjboss This is the power of Maven2 and there is soo much more you can do with it.

btw, I haven't blogged since I've become an employee for JBoss, a division of Red Hat. I'm working on the JBoss Portal Team and I must say that the company is awesome, my team is awesome, and everyone I have met and talked to have been, you guessed it, AWESOME!