【问题标题】:Looking up SessionContext in JBoss 7.2在 JBoss 7.2 中查找 SessionContext
【发布时间】:2014-04-03 09:00:28
【问题描述】:

由于各种原因,我需要手动查找 SessionContext。在JBoss5中,解决方法

InitialContext initialContext = new InitialContext();
SessionContext sessionContext = (SessionContext) initialContext.lookup("java:comp/EJBContext");

已经很好地服务了,但是从 JBoss 7 我得到了一个

javax.naming.NameNotFoundException: EJBContext -- service jboss.naming.context.java.global.EJBContext

在 JBoss 7.2 中查找上下文的方式发生了变化,还是我的部署缺少任何重要的东西?作为参考,标准注入工作正常,这是唯一失败的查找。还是我做错了什么(除了手动查找 SessionContext)?

【问题讨论】:

    标签: java exception jboss7.x


    【解决方案1】:

    根据Java EJB 的规范(这是针对EJB 3.2 的。但与之前的EJB 3.x 相比,EJBContext 没有任何变化),您可以使用注释@ResourceEJBContext 注入到您的组件中或手动通过查找(第 11.15 节):

    容器必须通过注入使组件的 EJBContext 接口可用 使用资源注释或在名称 java:comp/EJBContext 下的 JNDI

    查找 EJB 资源的标准方法是通过 EJBContext.lookup 方法,但也有 JNDI 方法,如果您还没有 EJBContext,这是唯一的可能性:

    Context initCtx = new InitialContext();
    EJBContext ejbCtx = (EJBContext) initCtx.lookup("java:comp/EJBContext");
    

    这正是你所做的,那么有什么问题吗?有两件事,我不确定哪一件。首先,通过手动查找,有时需要在类级别使用注释将资源分配给组件:

    @Resource(name = "EJBContext", type = javax.ejb.EJBContext)
    public class MyComponent {
    ...
    }
    

    但我不确定EJBContext 是否也需要它,我想不需要。第二件事,更重要和关键 - 再次根据规范:

    通过命名环境访问的 EJBContext 对象仅在 bean 内有效 执行查找的实例。

    这是第 11.15.1 节,下一个是第 11.15.2 节:

    Container Provider 负责为引用提供适当的 EJBContext 对象 隔离组件。返回的对象必须是请求的 bean 的适当特定类型 注入或执行查找——也就是说,容器提供者必须返回一个 SessionContext 接口的实例来引用会话 bean 和一个 MessageDrivenCon- 消息驱动 bean 的文本接口。

    这两者都意味着EJBContext 的注入和查找仅在 Enterprise Java Beans 中有效,因此那些带有 @MessageDriven@Stateful@Singleton@Stateless 注释的那些(或描述为部署中的 EJB描述符文件,也作为 EJB 2.x 规范)。也许您的组件不是有效的 EJB,这就是查找不起作用的原因?这当然只是建议。

    还有一种可能获得EJBContext(更准确地说是SessionContext)。您的组件应该实现具有setSessionContext(SessionContext sessionContext) 方法的SessionBean 接口。每次使用组件时(在某处注入,由客户端或超时调用,尤其是在创建时),EJB 容器都应调用此方法,并且在此方法中您应该将 sessionContext 参数分配给 bean 的字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 2014-02-18
      • 2020-03-29
      • 2020-08-23
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多