我有两个 EAR,EAR A 是实际应用程序,EAR B 用于调试和测试。
EAR A 包含一个带有所有 Seam 组件类的 JAR A,用 @Name 注释。EAR A 包含一个 WAR A,它是 Seam 2.3 webapp,并在 components.xml 中定义了所有组件。这工作正常。
EAR B 包含另一个 WAR B,它是来自 EAR A 的 WAR A 的剥离版本。EAR B 在 jboss-deployment-structure.xml 中正确定义了对子部署“JAR A”的依赖。WAR B 仅定义了 JAR A 中的少数组件,但它们在 webapp 部署期间无法初始化。这是由以下原因引起的:
java.lang.IllegalArgumentException: Component class must have @Name annotation or name must be specified in components.xml: [name of my class]
当我调试初始化并在 Seam 类 org.jboss.seam.init.Initialization:488 中设置断点时
if ( !clazz.isAnnotationPresent(Name.class) )
{
throw new IllegalArgumentException(
"Component class must have @Name annotation or name must be specified in components.xml: " +
clazz.getName());
}
name = clazz.getAnnotation(Name.class).value();
if 条件为假。但是当我在调试器中检查 clazz 的注释时,我可以看到我的注释具有正确的值。
interface org.jboss.seam.annotations.Name=@org.jboss.seam.annotations.Name(value=org.jboss.seam.security.identity)
我怀疑这与在两个不同的部署(即类加载器)中加载 @Name 注释有关,因为当我将 WAR B 移动到 EAR A 时,一切正常。请让我知道我是否正确,或者是否有办法实现这一目标。