Чем возвращаемое значение SessionContext.getBusinessObject () отличается от ключевого слова this, используемого в бине? - PullRequest
6 голосов
/ 01 августа 2010

SessionContext.getBusinessObject () описывается в документации следующим образом:

Получить объект, который можно использовать для вызова текущего компонента через данный бизнес-интерфейс.

Параметры: businessInterface - один из локальных бизнес-интерфейсов или удаленных бизнес-интерфейсов для этого сессионного компонента.

Возвраты: бизнес-объект, соответствующий данному бизнес-интерфейсу.

Не могу явместо этого использовать ключевое слово this в Java, чтобы добиться того же?Чем они отличаются?

1 Ответ

15 голосов
/ 02 августа 2010

Мотивация здесь заключается в том, что большинство реализаций EJB работают на прокси.Вы не будете слишком далеко думать об этом как ооо старой школы.Бизнес-интерфейс реализуется контейнером EJB, довольно часто через простой java.lang.reflect.Proxy, и этот объект передается всем в системе, кто запрашивает ejb через поиск @EJB или JNDI.

Прокси-сервер подключен к контейнеру, и все вызовы по нему направляются непосредственно в контейнер, который будет выполнять проверки безопасности, запускать / останавливать / приостанавливать транзакции, вызывать перехватчики и т. Д. И т. Д., А затем, наконец, делегировать вызов экземпляру компонента -- и, конечно, выполнить любую необходимую очистку из-за возникших исключений - затем, наконец, передать возвращаемое значение через прокси вызывающей стороне.

Вызов непосредственно this.foo () или передача this ввызывающая сторона, чтобы они могли делать прямые звонки, пропустит все это, и контейнер будет эффективно вырезан из картинки.Метод 'getBusinessObject (Class)' позволяет экземпляру компонента по существу получать прокси для себя, чтобы он мог вызывать свои собственные методы и использовать связанные с ним сервисы управления контейнерами - перехватчики, управление транзакциями, обеспечение безопасности и т. Д.

...