Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Клиент EJB


Автор: kaa 13.12.2008, 22:20
Всем привет!

Начал тут почитывать спецификацию EJB 3.0 и появилось у меня несколько вопросов по следующему кусочку документации, в котором описывается как из клиента добраться до бина (может сказывается мой плохой английский?):

Код

A client can obtain a session bean’s business interface through dependency injection or lookup in the
JNDI namespace.
For example, the business interface Cart for the CartBean session bean may be obtained using
dependency injection as follows:
@EJB Cart cart;
The Cart business interface could also be looked up using JNDI as shown in the following code segment
using the lookup method provided by the EJBContext interface. In this example, a reference to
the client bean’s SessionContext object is obtained through dependency injection:
@Resource SessionContext ctx;
...
Cart cart = (Cart)ctx.lookup(“cart”);


Как я понял, здесь говорится что вот этот код:

Код

@EJB Cart cart;
@Resource SessionContext ctx;
...
Cart cart = (Cart)ctx.lookup(“cart”);


Должен находится в клинете.


Собственно вопрос в таком случае: 
Зачем вообще нужна ссылка зависимости (как я понял) @EJB Cart cart на клиенте  и как с такой конструкцией будет работать например апплет, если для работы с EJB нужн пакет javax.ejb.

И зачем SessionContext нужно определять как ресурс на клиенте?

Всем заранее спасибо smile

Автор: powerOn 13.12.2008, 23:00
В данном случае "клиент" это тоже контейнеро-управляемая сущность, которая работает на одном сервере в одном контексте приложения. Это не stand-alone клиент (допустим свинговый). Например EJB1 выступает клиентом для EJB2 и может получить ссылку на EJB2 через dependency injection. Если задача использовать EJB как сервис для stand-alone, то: 
1) Можно оформить бин как веб-сервис.
2) Можно дернуть его через RMI. Некоторый материал об этом можно почитать тут: https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html

Автор: kaa 13.12.2008, 23:24
powerOn, 

Спасибо ОГРОМНОЕ, сегодня весь день гуглил как раз на эту тему (стандалон) - один порожняк.

Добавлено через 2 минуты и 54 секунды
powerOn, 

А всё же некоторый вопрос остался: подскажите, зачем контекст определять как ресурс? Ведь ресурс нужен что бы его дёргать из откуда-нибудь, а мы то с ним в данном коде работаем "на месте".

Автор: powerOn 14.12.2008, 00:35
Цитата(kaa @  13.12.2008,  23:24 Найти цитируемый пост)
А всё же некоторый вопрос остался: подскажите, зачем контекст определять как ресурс? Ведь ресурс нужен что бы его дёргать из откуда-нибудь, а мы то с ним в данном коде работаем "на месте". 


Не совсем понял вопрос. 
Аннотация ресурс говорит EJB-контейнеру что бы он инжектировал в это поле значение. До SessionContext можно достучаться и через JNDI, но в данном случае за нас это сделает контейнер. Если в бине вы не используете SessionContext, то можете его и не определять, ошибки от этого не произойдет. 

Автор: kaa 14.12.2008, 20:57
powerOn, 

Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)