我们有一个问题,我们有一个带注释的超类(@Resource
),并且扩展该超类的子类都是无状态bean。JBoss中不同部署之间未处理字段的注释
与this非常相似,如果超类和子类在同一个模块中,则资源被成功注入。如果它们在单独的模块中,那么资源不会被注入 - 看起来注解没有被处理。
我已经通过反射验证了注释在课上“可见”,但是当我进入ResourceInjectionAnnotationParsingProcessor
时,@Resource
注释不会显示在从其他模块继承的类上(尽管它显示在类上在同一个模块中)。
我一直看到的通用解决方案是jandex
这些文件,并设置了annotations="true"
,但是这似乎是针对静态模块,而不是像我们这样的其他部署。
other suggestion是模块可能缺少对注释的依赖性,但在我的示例中,所涉及的所有模块都依赖于<module name="javax.annotation.api"/>
。
是否有任何其他方式使这些注释在独立部署中“可见”?
作为一个最小的例子,如果你有一个超
import javax.annotation.Resource;
import javax.ejb.SessionContext;
public class BaseResource {
@Resource
private SessionContext sessionContext;
public String getContext() {
return "Context is " + sessionContext;
}
}
和
import javax.ejb.Stateless;
@Stateless
public class ResourceBean extends BaseResource {
public ResourceBean() {
System.out.println(getClass().getName() + " created");
}
}
如果这些都是同一模块中一个子集中,SessionContext
显示。在单独的模块中,SessionContext
始终为null
。
你可能需要给它的所有包装成一个耳朵的JBoss认识到超类。 – djb
在我们的例子中,有一个主要项目,大约有70个项目使用它,所以将它包装在'EAR'中是不可行的。另外,JBoss识别超类,但注释不被处理。 –
子类是否有@Inherited? (http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/annotation/Inherited.html) – djb