用限定符注释的多个数据源总是 return 错误的数据源
Multiple datasources annotated with Qualifiers always return the wrong datasource
我正在使用老式数据源活动 - 根本不涉及 JPA。所以没有 persistence.xml
或 EntityManager
.
我有一个 CDI 生产者如下:
@Dependent
public class JdbcAdapterProviderProducer {
@Resource(name = "jboss/datasources/DS1")
@ConnectionPool(DS1)
private DataSource ds1DataSource;
@Resource(name = "jboss/datasources/DS2")
@ConnectionPool(DS2)
private DataSource ds2DataSource;
@Produces @ConnectionPool(DS1)
public JdbcAdapterProvider getDs1JdbcAdapterProvider() {
return new JdbcAdapterProvider(ds1DataSource);
}
@Produces @ConnectionPool(DS2)
public JdbcAdapterProvider getDs2JdbcAdapterProvider() {
return new JdbcAdapterProvider(ds2DataSource);
}
}
然后我通过像这样注入来利用它:
@Inject @ConnectionPool(DS2)
private JdbcApdapterProvider jdbcAdapterProvider;
问题是正在注入的数据源不是我要访问的数据源。具体来说,它始终是 jboss/datasources/ExampleDS
数据源。
我做错了什么?
看起来您在@Resource 注释中混淆了 name
和 lookup
:
name: 定义资源引用的名称,使其可用(这作为 "destination")
lookup: 定义将资源引用插入的内容(将其视为 "source")
根据 Java EE 7 规范,没有查找的数据源将为您提供 "java:comp/DefaultDataSource",因此当您定义如下注释时:
@Resource(name = "jboss/datasources/DS2")
@ConnectionPool(DS2)
private DataSource ds2DataSource;
这被解释为:
@Resource(name = "jboss/datasources/DS2", lookup = "java:comp/DefaultDataSource")
@ConnectionPool(DS2)
private DataSource ds2DataSource;
这解释了为什么您会 jboss/datasources/ExampleDS
回来,因为该数据源可能是您通过查看 java:comp/DefaultDataSource
.
得到的
我正在使用老式数据源活动 - 根本不涉及 JPA。所以没有 persistence.xml
或 EntityManager
.
我有一个 CDI 生产者如下:
@Dependent
public class JdbcAdapterProviderProducer {
@Resource(name = "jboss/datasources/DS1")
@ConnectionPool(DS1)
private DataSource ds1DataSource;
@Resource(name = "jboss/datasources/DS2")
@ConnectionPool(DS2)
private DataSource ds2DataSource;
@Produces @ConnectionPool(DS1)
public JdbcAdapterProvider getDs1JdbcAdapterProvider() {
return new JdbcAdapterProvider(ds1DataSource);
}
@Produces @ConnectionPool(DS2)
public JdbcAdapterProvider getDs2JdbcAdapterProvider() {
return new JdbcAdapterProvider(ds2DataSource);
}
}
然后我通过像这样注入来利用它:
@Inject @ConnectionPool(DS2)
private JdbcApdapterProvider jdbcAdapterProvider;
问题是正在注入的数据源不是我要访问的数据源。具体来说,它始终是 jboss/datasources/ExampleDS
数据源。
我做错了什么?
看起来您在@Resource 注释中混淆了 name
和 lookup
:
name: 定义资源引用的名称,使其可用(这作为 "destination") lookup: 定义将资源引用插入的内容(将其视为 "source")
根据 Java EE 7 规范,没有查找的数据源将为您提供 "java:comp/DefaultDataSource",因此当您定义如下注释时:
@Resource(name = "jboss/datasources/DS2")
@ConnectionPool(DS2)
private DataSource ds2DataSource;
这被解释为:
@Resource(name = "jboss/datasources/DS2", lookup = "java:comp/DefaultDataSource")
@ConnectionPool(DS2)
private DataSource ds2DataSource;
这解释了为什么您会 jboss/datasources/ExampleDS
回来,因为该数据源可能是您通过查看 java:comp/DefaultDataSource
.