"Неудовлетворенные зависимости" - разные факсимильные фанаты с одинаковым интерфейсом

0 Georg Leber [2018-07-25 13:03:00]

У меня есть три @Stateless Beans с тем же интерфейсом.

public interface ReportService
{
    List<String> determineRelevantData();

    Report generate(ReportRequest request, Locale locale) throws ServiceFailedException;
}

Я вставляю бобы в один фасонный фасоль:

@Stateless
public class ReportServiceFacadeBean implements ReportServiceFacadeLocal
{
    @Inject
    private FirstReportBean firstReport;

    @Inject
    private SecondReportBean secondReport;

    @Inject
    private ThirdReportBean thirdReport;

    [...]
}

Когда я развертываю его таким образом, я получаю:

WELD-001408: недопустимые зависимости для типа SecondReportBean с квалификаторами @Default в точке инъекции [BackedAnnotatedField] @Inject private ReportServiceFacadeBean.secondReport

Когда я раскомментирую интерфейс в исполняющих компонентах, сервер запускается без ошибок. Что мне здесь не хватает?

cdi java-ee-7


1 ответ


1 Решение Siliarus [2018-07-31 10:31:00]

Бобы EJB имеют несколько разных типов бобов, которые затем используются для инъекций, по сравнению с CDI beans. А именно, вы захотите ввести EJB beans своими видимыми на клиенте частями, то есть интерфейсами (если у вас нет представления без интерфейса).

Это полностью поддерживается спецификацией, вот одна глава из спецификации CDI, которая упоминает ее (со ссылками на другие).

В вашем случае вам нужно будет ввести квалификаторы, а затем ввести компоненты, такие как:

@Inject
@SomeQualifier
ReportService firstService;