SessionContext.getBusinessObject () в поиске EJB3 и JNDI - PullRequest
4 голосов
/ 27 сентября 2011

В EJB2 необходимо использовать метод getEJBBusinessObject () в EJB для передачи ссылки на себя при вызове другого (локального / удаленного) компонента.

Применимо ли это к 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 () ,это так же, как если бы я использовал общий поиск JNDI ?

Я проверил оба подхода, и оба работают, но я не уверен, что объект бина обрабатывается одинаковоcontainer.

Edit : по-прежнему нужна ссылка на сам ejb при вызове myMethodTwo () из myMethodOne () того же ejb в EJB3?Разрешено ли вызывать методы внутри одного и того же ejb через эту ссылку?Как будут реагировать транзакции, если я решу использовать некоторые из них?

1 Ответ

5 голосов
/ 27 сентября 2011

Да, то же самое относится и к EJB 3. Да, getBusinessObject - это аналог EJB 3 для getEJBObject (или getEJBLocalObject).Все эти методы возвращают прокси для текущего объекта EJB.Для сессионных компонентов без сохранения состояния это в основном то же самое, что и поиск через JNDI, хотя, скорее всего, он будет работать лучше, поскольку позволяет избежать накладных расходов JNDI.

...