почему мой @EJB не попадает в мой веб-сервис? - PullRequest
0 голосов
/ 22 февраля 2012

У меня есть базовый проект EJB 3.0 (Java EE 5) в IBM RAD (он же Eclipse 3.4) и WebSphere 7.0

. Я создал проект EAR, проект EJB (для EJB), проект JPA(для объектов домена) и динамический веб-проект (для моего веб-сервиса JAX-RS).

Проект EJB содержит EJB, например:

@Stateless
public TestBean implements TestBeanLocal { 
/* ... */

@Local
public TestBeanLocal {
/* ... */

Веб-проект содержитвеб-сервис JAX-RS, например, так:

@Path(value="/mywebservice")
public MyWebService implements Application {
  @EJB
  private TestBeanLocal myBean;

  @GET
  @Produces({"text/plain"})
  public String getList() {
    return myBean.getList();
    /* ... */

Моя проблема в том, что атрибут myBean в MyWebService никогда не вводится.Это всегда ноль.

Есть идеи, которые я пропустил?

Спасибо, Роб

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Контейнер Java EE будет выполнять внедрение @EJB только для компонентов, которыми он управляет.Для Java EE 5 это будет включать сервлеты, Web-сервисы и EJB.В вашем случае компонент управляется Wink, поэтому вопрос заключается в том, должен ли Wink интерпретировать @EJB (думаю, нет).В Java EE 6 инъекция работает, потому что JAX-RS является частью этой версии Java EE, а компонент управляется контейнером, а не сторонней структурой.

0 голосов
/ 23 февраля 2012

После долгих попыток я создал новый чистый проект (следующий класс имеет несколько разные имена классов) ... Я заметил, что в журнале запуска WebSphere EJB имел имя JNDI, поэтому я попытался найти EJB по его JNDI в конструкторе веб-сервиса ...

String sJNDI = "ejblocal:testEAR/testEJB.jar/TestBean#test.TestBeanLocal";
TestBeanLocal testBeanLocal = (TestBeanLocal) new InitialContext().lookup(sJNDI);

... и это сработало.

Мой вопрос сейчас таков: нужно ли мне это делать, чтобы увидеть мои бобы? Или я что-то пропустил? В другом проекте, использующем версию GlassFish для Java EE 6, все, что мне нужно было сделать, это поместить в @EJB, и это было прекрасно. Разве это просто не работает в Java EE 5 / WebSphere 7? Или, может быть, это ограничение IBM RAD 7 (он же Eclipse 3.4)?

Спасибо, Rob

...