2016-09-06 8 views
0

У нас есть разные пакеты OSGi, загруженные в Karaf 4.0.3 и несколько javax.sql.DataSource, загруженные pax-jdbc-config. Например, настроены два разных источников данных в базах данных:Bundle in Karaf с использованием неправильного pax-jdbc DataSource

[email protected]()> 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) 

Моя проблема заключается в том, что расслоение МОДУЛЬ B следует использовать datasourceB. Он настроен на использование datasourceB во всех исходных файлах и в blueprint.xml

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

Я действительно не понимаю, как можно легко karaf пучки использовать различные DataSource.

И когда datasourceA файл конфигурации удаляется, то МОДУЛЬ B правильно использовать datasourceB.

Это проблема о неправильном заказать конфигурационных файлов или что-то еще?

EDIT:
Я обнаружил, что, когда я удалить datasourceA конфигурационный файл и поэтому Karaf удаляет что DataSource (нет в service:list DataSource) МОДУЛЬ B правильно использует datasourceB.

Но я до сих пор не знаю, почему это происходит. Пропустил ли я прочтение некоторых документов об этом? Это вопрос pax-jdbc-config или проблема с Karaf?

ответ

2

При ссылке на источник данных, вы можете использовать фильтр, чтобы указать, которым тот, который Вы хотите:

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

О мой бог, вы, вероятно, правы! Я не понимал, что модули не могут знать, какой источник данных я имею в виду, потому что я просто установил идентификатор ссылки, но никакой фактической ссылки ... Спасибо! – everis