JBoss 中不同部署之间未处理的字段注释

Annotations on fields not processed between different deployments in JBoss

我们有一个问题,我们有一个带有注释 (@Resource) 的 superclass 和扩展 superclass 的 subclasses 是无状态 beans .

this非常相似,如果superclass和subclass在同一个模块中则资源注入成功。如果它们在单独的模块中,则不会注入资源 - 似乎未处理注释。

我通过反射验证了class上的注释是"seen",但是当我进入ResourceInjectionAnnotationParsingProcessor时,@Resource注释没有显示在从其他模块继承的 classes 上(尽管它确实显示在同一模块中的 classes 上)。

我看到的常见解决方案是 jandex 文件并设置 annotations="true" 但这似乎是针对静态模块的,而不是其他部署,例如我们的案例。

other suggestion 是模块可能缺少对注释的依赖性,但在我的示例中,所有涉及的模块都依赖于 <module name="javax.annotation.api"/>

是否有任何其他方法可以从单独的部署中制作这些注释 "visible"?

作为一个最小的例子,如果你有一个超级class

import javax.annotation.Resource;
import javax.ejb.SessionContext;

public class BaseResource {
  @Resource
  private SessionContext sessionContext;

  public String getContext() {
    return "Context is " + sessionContext;
  }
}

的子class
import javax.ejb.Stateless;

@Stateless
public class ResourceBean extends BaseResource {
  public ResourceBean() {
    System.out.println(getClass().getName() + " created");
  }
}

如果它们在同一模块中,则显示 SessionContext。在单独的模块中,SessionContext 始终是 null

您可以查找 SessionContext 作为解决方法。这不是您问题的答案,但您至少可以访问 SessionContext。

  public SessionContext getSessionContext()
  {
    try
    {
      InitialContext ic = new InitialContext();
      return (SessionContext) ic.lookup("java:comp/EJBContext");
    }
    catch (NamingException ex)
    {
      // handle exception
    }
    return null;
  }

摘自:http://javahowto.blogspot.com/2006/06/4-ways-to-get-ejbcontext-in-ejb-3.html