DeploymentException: WELD-001408: неудовлетворенные зависимости для типа <Class> с квалификаторами @Default в точке внедрения [BackedAnnotatedField]

Получение следующего исключения при внедрении beans в сценарии, ответ на который не удалось найти и beans.xml включен:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type CustomerAgreementDaoImpl with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject public com.evry.integrator.snow.fetch.CustomerAgreementFetcher.customerAgreementDaoImpl
  at com.evry.integrator.snow.fetch.CustomerAgreementFetcher.customerAgreementDaoImpl(CustomerAgreementFetcher.java:0)

        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:378)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:290)

Ниже приводится структура кода:

Beans.xml в /WEB-INF

<beans xmlns="http://java.sun.com/xml/ns/javaee" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                           http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"
       version="1.1" bean-discovery-mode="all"> 
</beans>

Интерфейсы

public interface GenericDao<T, PK> {

public interface CustomerAgreementDao extends GenericDao<CustomerAgreement, Long>{

Класс Absract, реализующий Generic DAO

public abstract class GenericDaoImpl<T, PK> implements GenericDao<T, PK> {

@PersistenceContext(unitName = "IntegratorMasterdataDS")
protected EntityManager em;

Основная реализация

@Stateless
public class CustomerAgreementDaoImpl extends GenericDaoImpl<CustomerAgreement, Long> implements CustomerAgreementDao {

public CustomerAgreementDaoImpl() {
    System.out.println("CustomerAgreementDaoImpl");
}

Дао используется в классе обслуживания

@Stateless
public class CustomerAgreementFetcher {

    @Inject
    public CustomerAgreementDaoImpl customerAgreementDaoImpl;

Главный планировщик загружает все вышеперечисленное

@Startup
@Singleton
@AccessTimeout(value = 5, unit = TimeUnit.MINUTES)
public class WPoller {
    @Inject
    CustomerAgreementFetcher customerAgreementFetcher;

1 ответ

Решение

Можете ли вы изменить тип поля на интерфейс CustomerAgreementDao?

@Stateless
public class CustomerAgreementFetcher {

    @Inject
    public CustomerAgreementDao customerAgreementDao;

Связанный раздел: Можно ли внедрить реализацию EJB, а не его интерфейс, с помощью CDI?

Другие вопросы по тегам