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

Igo*_*gor 4 ejb jndi

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

这同样适用于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() { 
        ...
    } 
    ... 
} 
Run Code Online (Sandbox Code Playgroud)

另外,如果我使用getBusinessObject()方法获取本地bean ,它是否与使用常见的JNDI查找相同

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

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

Bre*_*ail 5

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