0

我们有一个问题,我们有一个带有注释 ( @Resource) 的超类,而扩展该超类的子类是无状态 bean。

与此非常相似,如果超类和子类在同一个模块中,则资源注入成功。如果它们位于单独的模块中,则不会注入资源 - 似乎未处理注释。

我已经通过反射验证了注释在类上是“看到的”,但是当我进入时ResourceInjectionAnnotationParsingProcessor@Resource注释不会显示在从其他模块继承的类上(尽管它确实显示在同一模块中的类上)。

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

另一个建议是模块可能缺少对注释的依赖,但在我的示例中,所有涉及的模块都依赖于<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.

4

1 回答 1

0

您可以将其查找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

于 2015-05-15T11:11:57.567 回答