gpt4 book ai didi

java - 使用限定符注释的多个数据源总是返回错误的数据源

转载 作者:行者123 更新时间:2023-12-02 03:51:18 25 4
gpt4 key购买 nike

我正在使用老式数据源 Activity - 根本不涉及 JPA。因此没有 persistence.xmlEntityManager

我有一个 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)来利用它:

@Inject @ConnectionPool(DS2)
private JdbcApdapterProvider jdbcAdapterProvider;

问题是被注入(inject)的数据源不是我试图访问的数据源。具体来说,它始终是 jboss/datasources/ExampleDS 数据源。

我在这里做错了什么?

最佳答案

看起来您在 @Resource 注释中混淆了 namelookup:

名称:定义资源引用的名称,使其可用(这作为“目标”)查找:定义将资源引用插入的内容(将其视为“源”)

根据 Java EE 7 规范,不进行查找的 DataSource 将为您提供“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得到的。

关于java - 使用限定符注释的多个数据源总是返回错误的数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35849989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com