Использование инжектора конструктора с CDI в OpenLiberty - PullRequest
0 голосов
/ 14 февраля 2019

Я создаю небольшое приложение 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 ...

1 Ответ

0 голосов
/ 08 марта 2019

Это длинная история ... И некоторые люди работают над решением этой проблемы: инъекция JAX-RS! = Инъекция CDI
Эта проблема должна быть решена в JAX-RS 2.2, а инъекция CDI должна использоваться вместоИнъекция JAX-RS и 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

...