Я создал еще один пост, но, видимо, я не понял: Wildfly 14 CDI: WELD-001408 на 3-й части JAR после миграции с JBoss 7
Я мигрирую систему из java7 в java8 и из jboss7 в wildfly14.
Одна из систем имеет несколько EJB и классов, которые используют @Inject для инициализации объектов. Это старая система, и она отлично работает.
После выполнения развертывания в Wildfly 14 я получил несколько ошибок, подобных этой:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type InterfaceZaakIdentificatieGenerator with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private nl.interaccess.zakenmagazijn.converter.impl.ZaakCreatieToEntityConverter.zaakIdentificatieGenerator
at nl.interaccess.zakenmagazijn.converter.impl.ZaakCreatieToEntityConverter.zaakIdentificatieGenerator(ZaakCreatieToEntityConverter.java:0)
После исследования я увидел, что это очень распространенная ошибка, и это происходит потому, что в Wildfly они используют более новую версию CDI с Weld и добавлением bean-discovery-mode = "all" решает проблему , но в моем случае даже после добавления этого в файл это все еще дает мне эту ошибку.
Это мой beans.xml (находится по адресу /project-war/src/main/webapp/WEB-INF/beans.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all">
<interceptors>
<class>nl.interaccess.zakenmagazijn.manager.WsdlFaultAdvice</class>
<class>nl.interaccess.zakenmagazijn.profiler.ZakenmagazijnProfilerImpl</class>
<class>nl.interaccess.zakenmagazijn.profiler.ZTCProfilerImpl</class>
</interceptors>
</beans>
Важно:
Как я уже сказал, система отлично работает на JBoss7, так что это не неправильная аннотация или какая-либо другая ошибка в коде, она должна быть связана с конфигурацией.
Добавление дополнительной информации для более конкретного примера:
Интерфейс:
package nl.interaccess.zakenmagazijn.ztc;
public interface InterfaceZtcKermZaken {
GetZoekKenmschermZTCPlusAntwoord getZaken(GetZoekKenmschermZTCPlusZoeken request);
}
Реализация:
package nl.interaccess.zakenmagazijn.ztc;
@LocalBean
@Stateless(name = "ZtcKermZakenImpl")
@TransactionTimeout(value = 5, unit = TimeUnit.MINUTES)
@Perf4jZTCProfiler
public class ZtcKermZakenImpl extends ZTCQueryUtils implements InterfaceZtcKermZaken {
@Override
public GetZoekKenmschermZTCPlusAntwoord getZaken(GetZoekKenmschermZTCPlusZoeken request) {
//Implementation
}
}
Место, где я получаю сообщение об ошибке при попытке ввести:
package nl.interaccess.zakenmagazijn.manager;
@LocalBean
@Stateless(name = "ZakenmagazijnManager")
@WsdlFaultAdviceBinding
@Perf4jZakenmagazijnProfiler
public class ZakenmagazijnManagerImpl implements ZakenPortType {
@Inject
private InterfaceZtcKermZaken ztcKerm;
}