SeamFramework.orgCommunity Documentation
Seam's mission is to provide a fully-integrated development platform for building rich, standards-based Internet applications tailored for traditional and cloud deployments.
The Seam 3 project is organized as a collection of modules and developer tooling tailored for Java EE 6 application development, built on top of the component model defined by JSR-299 Context and Dependency Injection (CDI). CDI is a JCP standard, you can find out more about it at http://jcp.org/en/jsr/summary?id=299.
Seam's modules leverage portable CDI extensions to build on the core Java EE functionality and integrate with JBoss and third-party projects. Together, these modules provide many of the popular features and integrations from Seam 2 (security, internationalization, JSF, rules, BPM) while also exploring new integrations and designs.
The developer tooling for Seam is provided by JBoss Tools and Seam Forge. JBoss Tools enhances Eclipse with features designed to help developers write, test and deploy enterprise Java applications. Seam Forge is an incremental project enhancement API and shell.
This guide steps you through the modules and select tooling, covering the purpose, APIs and usage scenarios for each. Collectively, this software should give you everything you need to develop comprehensive, robust and compelling enterprise applications.
The Seam 3 build is based on Maven 3. Each Seam module is a separate project, with its own release cycle. Each Seam module is a multi-module project contains the api, implementation, examples and documentation. Select modules are assembled together to create a Seam distribution, or stack release.
To keep the modules in sync, the Seam project publishes a special Maven POM known as a "Bill of Materials" (BOM), which we'll refer to as the Seam BOM. The Seam BOM defines the versions of all the Seam modules and third-party libraries that are used in the Seam stack using Maven's dependency management facility.
You can import these version definitions into your project by adding
the Seam BOM as a dependency with scope import
.
The benefit of doing so is that it relieves you from having to specify
the version of any Seam module explicitly. It also means you can
upgrade all your Seam modules at once by just updating the version of
the BOM.
Generally, the easiest way to accomplish this import is by first defining a property for the Seam BOM version:
<properties>
<seam.version>3.0.0.Final</seam.version>
</properties>
Then you add the following dependency declaration to the
dependencyManagement
section of your project's POM
file (or parent POM, if you use one).
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.seam</groupId>
<artifactId>seam-bom</artifactId>
<version>${seam.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
Then, it's a simple matter to declare which Seam module dependencies
your project requires by adding them inside the
dependencies
section. There's no need to specify a
version of the module as it gets inherited from the Seam BOM.
<dependency>
<groupId>org.jboss.seam.solder</groupId>
<artifactId>seam-solder</artifactId>
</dependency>
To see which version is going to get selected, use the dependency analysis tools in Maven:
mvn dependency:tree
You may upgrade an individual module by specifying the version explicitly. There's no crime in doing so. The Seam BOM is there as a convenience and a reference point for the recommended module version matrix. It's up to you how closely to follow it.
Each of the Seam modules also use the Seam BOM to keep the versions of related modules in sync. Once in a while, a module may specify a version of another module that's different from the Seam BOM. We usually try to get this worked out by the time we make a Seam stack release to fix the version matrix.
Refer to the Build System Architecture page on the Seam website for more detail about how the Seam 3 project is structured. Though, for the purpose of using Seam, how to import the module artifacts is likely all you need to know about the project's build.