This document provides information about issues concerning the compatibility of Seam 3 with various application servers and other runtime environments.
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.
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:
- Stop GlassFish 3.1 (if running)
- Download the Weld OSGi Bundle 1.1.1.Final
- Copy that jar to $GLASSFISH_HOME/glassfish/modules/weld-osgi-bundle.jar
- Start GlassFish 3.1
Below are the compatibility issues in GlassFish that are causing Seam 3 to break (or require a workaround in Seam 3).
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
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
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
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
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
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
Compatibility of Seam 3 with various application servers is examined regularly. The results are available at hudson.jboss.org