Использование внедрения конструктора с CDI в OpenLiberty

Я создаю небольшое приложение Java EE 8, которое должно работать на OpenLiberty. Он имеет JAX-RS ContainerResponseFilter, который выглядит так:

package my.package;

import javax.inject.Inject;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;

@Provider
public class MyFilter implements ContainerResponseFilter {
    private final MyService myService;

    @Inject
    public DiagnosticsFilter(final MyService myService) {
        this.myService = myService;
    }

    @Override
    public void filter(final ContainerRequestContext request, final ContainerResponseContext response) {
        // Never mind this
    }
}

Если я напишу такой фильтр и запущу свое приложение, аргумент myService для конструктора будет null. Однако, если поле аннотировано @Inject, а конструктор опущен, поле вставляется правильно.

Класс MyService помечен @Stateless, а в beans.xml я установил bean-discovery-mode="all".

Любая идея, что я делаю неправильно? Это вообще должно работать? документация по сварке предлагает что так и должно быть, но я не уверен, что это есть и в спецификации CDI...


person mthmulders    schedule 14.02.2019    source источник
comment
Контейнер jaxrs отвечает за фактическое создание фильтра, прежде чем делегировать его контейнеру cdi для выполнения конкретной инъекции CDI. Вот почему внедрение поля работает, а внедрение конструктора — нет.   -  person maress    schedule 14.02.2019
comment
Спасибо за комментарий. Может быть, есть способ, чтобы JAX-RS искал свои компоненты в контексте CDI?   -  person mthmulders    schedule 28.02.2019


Ответы (1)


Это длинная история... И некоторые люди работают над решением проблемы: внедрение JAX-RS!= внедрение CDI
Это должно быть решено в JAX-RS 2.2, и вместо JAX-RS следует использовать внедрение CDI. инъекции и JAX-RS v3.0 полностью удалят внедрение JAX-RS
Прочтите это по теме:
https://www.eclipse.org/community/eclipse_newsletter/2019/february/Jakarta_EE_9.php
https://github.com/eclipse-ee4j/jaxrs-api/issues/569
https://github.com/eclipse-ee4j/jaxrs-api/issues/639
https://groups.google.com/forum/#!topic/microprofile/gvj94XBhtvM

person titou10    schedule 08.03.2019