"Неудовлетворенные зависимости" - разные факсимильные фанаты с одинаковым интерфейсом
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;