Все компоненты (jars, wars) имеют bean-компоненты. xml с bean-discovery-mode = "annotated".
DataProvider - интерфейс, все классы, реализующие этот интерфейс, не аннотируются. Существует только один производитель с двумя методами:
@ApplicationScoped
public class DataProviderProducer {
@Resource(lookup = JndiNames.DS_OLTP)
private DataSource oltpDataSource;
@Resource(lookup = JndiNames.DS_RD)
private DataSource rdDataSource;
@Produces
@OLTP
public DataProvider createOltpDataProvider() {
return new JDBCDataProvider(oltpDataSource);
}
@Produces
@RD
public DataProvider createRdDataProvider() {
return new JDBCDataProvider(rdDataSource);
}
}
При введении следующим образом:
@Inject
@OLTP
private DataProvider dp;
мы получаем следующую ошибку:
org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type DataProvider with qualifiers @Default
at injection point [BackedAnnotatedField] @OLTP @Inject private mypackage.MyBean.dp
at mypackage.MyBean.dp(MyBean.java:0)
Possible dependencies:
- Producer Method [DataProvider] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @RD public mypackage.injection.DataProviderProducer.createRdDataProvider()],
- Producer Method [DataProvider] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @OLTP public mypackage.injection.DataProviderProducer.createOltpDataProvider()]
"Неоднозначные зависимости для Тип DataProvider с квалификаторами @Default "- внедрение только с аннотациями @RD или @OLTP, я нигде не использую @Default. 10 раз перепроверил все в коде, я не знаю, что делать.
Использовал WildFly 18, OpenJDK 13.
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
public @interface OLTP {
}
//
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER})
public @interface RD {
}