【问题标题】:SessionContext.getBusinessObject() in EJB3 & JNDI lookupEJB3 和 JNDI 查找中的 SessionContext.getBusinessObject()
【发布时间】:2011-11-26 01:06:53
【问题描述】:

EJB2 中,当调用另一个(本地/远程)bean 时,需要在 EJB 中使用 getEJBBusinessObject() 方法来传递对自身的引用。

这同样适用于 EJB3 吗?

例如

@Stateless 
public class MyBean implements MyBeanLocal { 

    @Resource private SessionContext sessionContext; 

    public void myMethod() { 
        OtherBeanLocal  otherBean = ...; // getting reference to other local EJB. 
        MyBeanLocal myBean =  sessionContext.getBusinessObject(MyBeanLocal.class); 
        b.aMethod(myBean); 
    } 

    // Edit: calling myMethodTwo() from inside of myMethodOne()
    public void myMethodOne() {  
        MyBeanLocal myBean =  sessionContext.getBusinessObject(MyBeanLocal.class); 
        myBean.myMethodTwo(); 
    } 

    public void myMethodTwo() { 
        ...
    } 
    ... 
} 

另外,如果我使用 getBusinessObject() 方法获取本地 bean,是否与使用普通 JNDI 查找 相同?

我已经测试了这两种方法,并且都有效,但我不确定容器是否以相同的方式处理 bean 对象。

编辑: 在 EJB3 中,从同一 ejb 的 myMethodOne() 内部调用 myMethodTwo() 时,是否仍需要获取对 ejb 本身的引用?是否允许通过 this 引用调用同一个 ejb 中的方法? 如果我决定使用一些,这将如何处理交易?

【问题讨论】:

    标签: ejb jndi


    【解决方案1】:

    是的,这同样适用于 EJB 3。是的,getBusinessObject 是 EJB 3 与 getEJBObject(或 getEJBLocalObject)的类似物。所有这些方法都返回当前 bean 对象的代理。对于无状态会话 bean,这与通过 JNDI 查找基本相同,尽管它可能会执行得更好,因为它避免了 JNDI 开销。

    【讨论】:

    • 感谢您的快速响应!实际上我正在缓存我的 JNDI 查找,所以我想我会坚持使用这种方法,而不是使用 getBusinessObject() 获取 ejb... 我是否需要遵循相同的方法(获取 ejb 本身的 ejb 实例),当从同一个 ejb 中的另一个方法内部调用一个方法。 (我已经相应地更新了我的问题)
    • 是的,如果您想要 EJB 语义,您必须使用 getBusinessObject。从该方法返回的代理负责事务、安全、拦截器等。
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多