SessionContext.getBusinessObject () в поиске EJB3 и JNDI

В EJB2 нужно было использовать метод getEJBBusinessObject () в EJB для передачи ссылки на себя при вызове другого (локального / удаленного) 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 (), будет ли это то же самое, что и обычный поиск JNDI?

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

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


person Igor    schedule 27.09.2011    source источник


Ответы (1)


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

person Brett Kail    schedule 27.09.2011
comment
Спасибо за быстрый ответ! На самом деле я кэширую свои поисковые запросы JNDI, поэтому я думаю, что буду придерживаться этого подхода вместо получения ejbs с помощью getBusinessObject () ... Нужно ли мне следовать тому же подходу (получение экземпляра ejb самого ejb), когда вызов одного метода изнутри другого метода в том же самом ejb. (Я обновил свой вопрос соответственно) - person Igor; 28.09.2011
comment
Да, вы должны использовать getBusinessObject, если вам нужна семантика EJB. Прокси, возвращаемый этим методом, отвечает за транзакцию, безопасность, перехватчики и т. Д. - person Brett Kail; 28.09.2011