2013-07-30 2 views
5

Я разрабатываю приложение REST с помощью Glassfish 4.0.GlassFish 4 + JAX-RS Фильтр с @EJB

В классах ресурсов я могу получить инъекцию для работы, создав класс @Stateless и впрыскивая через @EJB (введенный класс - это безгосударственный EJB).

Однако этот подход не работает в JAX-RS-фильтре. Я не могу заставить инъекцию работать вообще.

См код ниже:

@Provider 
public class UpdateFilter implements ContainerRequestFilter { 

    @EJB 
    private MyBeanInterface doStuffBean; 

    @Override 
    public void filter(ContainerRequestContext requestContext) { 

     ... 
    } 
} 

doStuffBean всегда нуль.

Любые предложения?

ответ

1

Я считаю, что @EJB работает только в управляемых Java EE классах, таких как другие EJB и сервлеты.

Если вы используете CDI, вы можете использовать аннотацию @Inject, но если этот класс не ManagedBean, вам нужно будет выполнить поиск.

+0

@Inject не работает. Исправлено исключение: ** UnsatisfiedDependencyException: для инъекции не было объекта ... **. – bafitor

+0

Это потому, что ваш класс не управляется. Я не уверен, что это может сделать этот провайдер ManagedBean, поэтому вам, вероятно, придется создать своего собственного производителя, который будет искать EJB, а затем вы можете вводить куда угодно (есть много статей, показывающих, как это сделать), или вы может просто выполнить поиск в этом классе. – ZeusSelerim

0

Попробуйте использовать CDI, заменив @Stateless на @ManagedBean и @EJB на @Inject. Это работает для меня в JAX-RS.

Если вам нужен EJB для других целей, кроме инъекций, он может работать для вас, чтобы сохранить двойную аннотацию @Stateless @ManagedBean.

+0

Я пробовал оба решения, но он не работает. Я получил ** UnsatisfiedDependencyException: для инъекции не было объекта. **. Есть идеи? – bafitor

+1

Я не видел этого раньше с GF3, поэтому, вероятно, проблема в GF4. https://java.net/jira/browse/GLASSFISH-20597 говорит, что исправлено в версии 4.0.0 - это версия, которую вы используете? Если нет, вы можете попробовать некоторые из обходных решений по адресу http://stackoverflow.com/questions/16216759/dependency-injection-with-jersey-2-0. Вы пытались удалить @Stateless или вам это нужно? – TheArchitect

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