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

时间:2015-05-08 12:09:36

标签: java-ee jboss annotations jboss6.x jboss-modules

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

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

1 个答案:

答案 0 :(得分: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