使用错误的pax-jdbc DataSource捆绑在Karaf中

时间:2016-09-06 08:29:02

标签: java jdbc datasource apache-karaf pax

我们在Karaf 4.0.3中加载了不同的OSGi包,而javax.sql.DataSource加载了多个pax-jdbc-config。例如,为不同的数据库配置了两个数据源:

karaf@root()> service:list DataSource
[javax.sql.DataSource]
----------------------
 dataSourceName = datasourceA
 felix.fileinstall.filename = file:/opt/karaf/etc/org.ops4j.datasource-dba.cfg
 osgi.jdbc.driver.name = mysql-pool
 osgi.jndi.service.name = datasourceA
 password = secretpassword
 service.bundleid = 207
 service.factoryPid = org.ops4j.datasource
 service.id = 276
 service.pid = org.ops4j.datasource.2ab06071-d3fa-4d7e-b508-19f36892cb7e
 service.scope = singleton
 url = jdbc:mysql://mysql.example.com/dba
 user = dbuser
Provided by : 
 OPS4J Pax JDBC Config (207)
Used by: 
 MODULE B (29)

[javax.sql.DataSource]
----------------------
 dataSourceName = datasourceB
 felix.fileinstall.filename = file:/opt/karaf/etc/org.ops4j.datasource-dbb.cfg
 osgi.jdbc.driver.name = PostgreSQL JDBC Driver-pool
 osgi.jndi.service.name = datasourceB
 password = secretpassword
 service.bundleid = 207
 service.factoryPid = org.ops4j.datasource
 service.id = 278
 service.pid = org.ops4j.datasource.a7b84423-a605-4010-9806-db7bcc0bccd4
 service.scope = singleton
 url = jdbc:postgresql://postgresql.example.com/dbb
 user = dbuser
Provided by : 
 OPS4J Pax JDBC Config (207)

我的问题是捆绑 MODULE B 应该使用 datasourceB 。它被配置为在所有源文件和 blueprint.xml 中使用 datasourceB

...
<reference id="datasourceB" interface="javax.sql.DataSource"/>
...

我真的不明白,karaf捆绑包使用不同的DataSource有多容易。

当删除 datasourceA 配置文件时, MODULE B 正确使用 datasourceB

关于配置文件的错误订单的问题是什么?

编辑:
我发现当我删除 datasourceA 配置文件,因此Karaf删除了该DataSource(service:list DataSource中没有), MODULE B 正确使用 datasourceB 即可。

但我仍然不知道为什么会这样。我错过了阅读一些关于此的文档吗?是pax-jdbc-config问题还是卡拉夫问题?

1 个答案:

答案 0 :(得分:2)

当您引用数据源时,您可以使用过滤器来指示您想要的数据源:

<reference id="datasourceB" interface="javax.sql.DataSource" filter="(dataSourceName=datasourceB)" />