Help

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

This document provides information about issues concerning the compatibility of Seam 3 with various application servers and other runtime environments.

Portability is a goal

Seam 3 is not just for JBoss AS. One of our main goals for Seam 3 is to deliver on the portability contract that CDI espouses, while at the same time providing strong integration with the container (CDI, Java EE, etc). It's a portable extension library built on top of CDI. Therefore, you should expect to be able to use it with any compliant CDI runtime.

Upgrading Weld in GlassFish 3.1

Several of the compatibility problems in GlassFish are resolved by Weld 1.1.1.Final. You can upgrade Weld in GlassFish by following these steps:

  1. Stop GlassFish 3.1 (if running)
  2. Download the Weld OSGi Bundle 1.1.1.Final
  3. Copy that jar to $GLASSFISH_HOME/glassfish/modules/weld-osgi-bundle.jar
  4. Start GlassFish 3.1

GlassFish Issues

Below are the compatibility issues in GlassFish that are causing Seam 3 to break (or require a workaround in Seam 3).

Alpha-bravo library visibility

Affects: GlassFish 3.1
Fixed in: GlassFish 3.1.1, GlassFish 3.1 + Weld 1.1.1.Final
Issue report: GLASSFISH-15735
Test case: JarToJarReverseAlphaVisibilityTest

Explanation:

  • in certain cases, types (classes) in one bean archive (jar) aren't visible to beans and extensions in another jar in a web module
  • visibility is dependent on the alphabetic order of the archive names
  • an archive named alpha.jar can see types in an archive named beta.jar, but not the other way around
  • extensions in an archive named alpha.jar can observe AnnotatedTypes from an archived named bravo.jar, but not the other way around

Consequence:

  • typed loggers and message bundles weren't being processed by Solder for any library (e.g., seam-servlet.jar) with a name that comes before seam-solder.jar in alphabetical order
  • the built-in Messages bean from seam-international.jar cannot be injected into bean in seam-faces.jar, because seam-faces.jar comes first in alphabetical order

Resolution:

  • went through modules and found a way to work around this issue on a case-by-case basis
  • worse case scenario, you can combine all the Seam bits into a single JAR

Library-to-application visibililty

Affects: GlassFish 3.1
Fixed in: GlassFish 3.1.1 Issue report: GLASSFISH-15721
Test case: VisibilityOfBeanInWebModuleFromBeanManagerInBeanLibraryTest

Explanation:

  • beans in WEB-INF/classes are not visibile to a BeanManager in a bean archive (jar) in the same web module

Consequence:

  • several Solder features aren't available on GlassFish (EL evaluator, default beans, generic beans, unwraps, service handler)

Resolution:

  • we've ensured Solder doesn't cause deployment issues
  • we need this issue to be resolved to unlock all Solder features

Intermittent interceptors

Affects: GlassFish 3.1, GlassFish 3.1.1
Issue report GLASSFISH-17184 Test case: EnableInterceptorTest

Explanation:

  • interceptors listed in beans.xml don't always get enabled (seemly random per deployment)

Consequence:

  • in the Seam booking example, the conversation for booking does not activate if the interceptor for @Begin/@End does not activate

Resolution:

  • at the moment, the only resolution is to redeploy the application

Missing typed logger and message bundle implementation classes

Affects: Seam <= 3.0.0.CR2 (fixed in Seam 3.0.0.CR3)
Issue report: SEAMSERVLET-30, SOLDER-62

Explanation:

  • currently two modules (Seam Solder and Servlet) use the typed logger and message bundle feature provided by Solder
  • the implementation class must be generated, either by a proxy or by an annotation processor
  • generation of proxies requires a system property to be set (jboss.i18n.generate-proxies)
  • the annotation processor wasn't finished prior to Seam 3.0.0.CR2

Consequence:

  • you were getting unsatisfied dependency errors with ServletLog and/or AnnotatedMessages at deployment

Resolution:

  • the annotation processor is available and we are now generating the concrete implementation classes (thanks to James and Ken)
  • we've added documentation to Seam Solder to educate you how to use this feature, and the options you have

Dangling web fragment reference

Affects: Seam <= 3.0.0.CR2 on GlassFish and Tomcat (fixed in Seam 3.0.0.CR3)
Issue report: SEAMSERVLET-29, GLASSFISH-16201

Explanation:

  • Seam Servlet had a web-fragment.xml with an ordering clause that referenced a web fragment named WeldServlet
  • the motivation was to ensure the the Weld bootstraps before Seam Servlet listeners are invoked

Consequence:

  • there were deployment problem on GlassFish and Tomcat 7

Resolution:

  • it turns out we don't need the reference anyway since Weld Servlet does not yet use a web fragment (premature optimization)
  • the reference has been removed for now

Overzealous class scanner

Issue report: GLASSFISH-16318

Affects: GlassFish 3.0.1, GlassFish 3.1 Fixed in: GlassFish 3.1.1

Explanation:

  • the class scanner fails whenever it finds a class with a field that references a class not on the classpath
  • in GlassFish 3.0.1, this failure happens before class is even considered as a bean; no class in a bean archive can have a reference to a non-existent class
  • in GlassFish 3.1, this failure happens for any bean that is a bean candidate and has a reference to a non-existent class

Consequence:

  • can't have optional beans that are enabled based on what's available (e.g. using the @Requires annotation from Seam Solder will still result in a ClassNotFoundException at deployment time if the specified class is not found in the classpath)
  • Seam Faces breaks because it has optional dependency on Seam Persistence
  • Seam Solder breaks because it has optional dependency on logging providers
  • Seam Persistence breaks has optional dependency on Hibernate
  • Seam International breaks because it has an optional dependency on Joda time

Resolution:

  • you need to add dependencies to the classpath to satisfy any class that is referenced in a bean archive
  • you only need to satisfy class references in candidate bean classes in GlassFish 3.1

Continuous integration

Compatibility of Seam 3 with various application servers is examined regularly. The results are available at hudson.jboss.org