EJB3中的SessionContext.getBusinessObject()& JNDI查找

时间:2011-09-27 13:07:42

标签: ejb jndi

EJB2 中,需要在EJB中使用 getEJBusinessObject()方法在调用另一个(本地/远程)bean时将引用传递给它自己。

这同样适用于 EJB3 吗?

e.g。

@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本身的引用吗?是否允许通过引用调用同一ejb中的方法? 如果我决定使用某些交易,这将如何处理交易?

1 个答案:

答案 0 :(得分:5)

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