使用错误的 pax-jdbc DataSource 在 Karaf 中捆绑
Bundle in Karaf using wrong pax-jdbc DataSource
我们在 Karaf 4.0.3 中加载了不同的 OSGi 包,并且 pax-jdbc-config
加载了多个 javax.sql.DataSource
。例如配置了两个数据源到不同的数据库:
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 包使用不同的数据源有多容易。
并且当 datasourceA 配置文件被删除时,MODULE B 正确使用 datasourceB。
这个问题是关于配置文件的顺序错误还是什么?
编辑:
我发现当我删除 datasourceA 配置文件时,Karaf 会删除该数据源(service:list DataSource
中不存在),MODULE B正确使用 datasourceB。
但我仍然不知道为什么会这样。我错过了阅读有关此的一些文档吗?是 pax-jdbc-config
问题还是 Karaf 问题?
当您引用数据源时,您可以使用过滤器来指示您想要的:
<reference id="datasourceB" interface="javax.sql.DataSource" filter="(dataSourceName=datasourceB)" />
我们在 Karaf 4.0.3 中加载了不同的 OSGi 包,并且 pax-jdbc-config
加载了多个 javax.sql.DataSource
。例如配置了两个数据源到不同的数据库:
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 包使用不同的数据源有多容易。
并且当 datasourceA 配置文件被删除时,MODULE B 正确使用 datasourceB。
这个问题是关于配置文件的顺序错误还是什么?
编辑:
我发现当我删除 datasourceA 配置文件时,Karaf 会删除该数据源(service:list DataSource
中不存在),MODULE B正确使用 datasourceB。
但我仍然不知道为什么会这样。我错过了阅读有关此的一些文档吗?是 pax-jdbc-config
问题还是 Karaf 问题?
当您引用数据源时,您可以使用过滤器来指示您想要的:
<reference id="datasourceB" interface="javax.sql.DataSource" filter="(dataSourceName=datasourceB)" />