2012-02-22 3 views
0

У меня есть основные EJB 3.0 (Java EE 5) проект в IBM RAD (ака Eclipse 3.4) и WebSphere 7.0Почему мой @EJB не вводится в мой веб-сервис?

Я создал проект EAR, проект EJB (для EJBs), проект JPA (для объекты домена) и проект Dynamic Web (для моего веб-сервиса 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 никогда не вводится. Он всегда равен нулю.

Любые идеи, что я пропустил?

Спасибо, Роб

+0

WebSphere 7.0 не обеспечивает поддержку JAX-RS из коробки. Какая структура (или пакет функций WebSphere) используется в качестве реализации JAX-RS? –

+0

Я использую Apache Wink 1.0, который они используют в учебнике JAX-RS, который находится в документах помощи IBM RAD. –

ответ

2

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

0

После долгого таскания за волосы, я создал чистый новый проект (следующий имеют несколько различных имена классов) ... Я заметил, запуск в журнале EJB имело имя JNDI WebSphere, так Я попытался глядя вверх 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)?

Спасибо, Роб

Смежные вопросы