Могу ли я использовать CDI для ввода класса в Джерси 1.x?
Я думаю, что задаю этот вопрос, но для Джерси 1.x: инъекция зависимости с Джерси 2.0
Я использую Glassfish 3, CDI и Jersey 1.x. у меня есть @WebService
это вводит класс как это:
@Inject
Foo foo;
Я проверил это в @WebService
и это работает. Но та же самая строка кода в моем ресурсе Джерси выдает NPE, когда он пытается использовать foo
, Я думаю, что Jersey 1.x игнорирует аннотации CDI. Как получить инъекцию зависимости, работающую так же, как в моем @WebService
?
Foo
это pojo, и мой web.xml использует ServletContainer:
<servlet>
<servlet-name>JerseyServlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
Я нашел некоторую помощь здесь. Проблема моя Foo
@Inject
с его собственными bean-компонентами (на самом деле они EJB, которые приходят из класса с @Provides
в этом). resourceContext.getResource(Foo.class);
возвращает экземпляр Foo
, но foo
"s @Inject
поля ed являются нулевыми.
1 ответ
Я нашел статью, которая объясняет, как это сделать:
Проблема здесь в том, что CDI не создан для создания зависимости. Их [так] два решения этой проблемы:
- Пусть CDI создает экземпляр зависимости, но пусть Джерси это удалось. Этого можно добиться, используя
@ManagedBean
и специфическая аннотация Джерси.- Позвольте CDI создать экземпляр зависимости и позволить CDI управлять ею. Это может быть достигнуто с помощью
@RequestScoped
или другие специфичные для CDI аннотации.
Я выбрал первый вариант и поставил javax.annotation.ManagedBean
аннотация на моем ресурсе. Вот пример:
package com.coderskitchen.thegreeter.rest;
import com.coderskitchen.thegreeter.greetings.GreetingService;
import javax.annotation.ManagedBean;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@Path("/greet")
@ManagedBean
public class Greeter {
@Inject
GreetingService gs;
@GET
@Path("{name}")
public String greetSomeone(@PathParam("name") String name) {
return gs.greetSomeone(name);
}
}
* Также я нашел эту официальную статью, которая на самом деле не так полезна: http://docs.oracle.com/javaee/7/tutorial/doc/jaxrs-advanced004.htm