gpt4 book ai didi

java - 在 JBoss 7.2 中查找 SessionContext

转载 作者:行者123 更新时间:2023-11-30 09:09:52 25 4
gpt4 key购买 nike

由于各种原因,我需要手动查找 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 中查找上下文的方式是否发生了变化,或者我的部署是否缺少任何重要的东西?作为引用,标准注入(inject)工作正常,这是唯一失败的查找。还是我做错了什么(除了手动查找 SessionContext 之外)?

最佳答案

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

The container must make a component’s EJBContext interface available either through injectionusing the Resource annotation or in JNDI under the name java:comp/EJBContext

查找 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 objects accessed through the naming environment are only valid within the beaninstance that performed the lookup.

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

The Container Provider is responsible for providing an appropriate EJBContext object to the refer-encing component. The object returned must be of the appropriate specific type for the bean requestinginjection or performing the lookup—that is, the Container Provider must return an instance of the SessionContext interface to referencing session beans and an instance of the MessageDrivenCon-text interface to message-driven beans.

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

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

关于java - 在 JBoss 7.2 中查找 SessionContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com