2016-09-06 4 views
0

Wir haben verschiedene OSGi Bundles in Karaf 4.0.3 geladen und mehrere javax.sql.DataSource geladen von pax-jdbc-config. Zum Beispiel sind zwei Datenquellen zu verschiedenen Datenbanken konfiguriert:Bundle in Karaf mit falschem 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) 

Mein Problem ist, dass Bündel MODUL B sollte datasourceB verwenden. Es konfiguriert ist datasourceB in allen Quelldateien zu verwenden und in blueprint.xml

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

Ich verstehe nicht wirklich, wie kann leicht Karaf Bundles verwenden unterschiedliche Datasource.

Und wenn datasourceA Konfigurationsdatei entfernt wird, dann MODUL B richtig datasourceB verwenden.

Ist dieses Problem falsch Bestellung von Konfigurationsdateien oder etwas?

EDIT:
Ich habe herausgefunden, dass, wenn ich datasourceA Config-Datei zu entfernen und damit Karaf entfernt, dass Datasource (nicht vorhanden in service:list DataSource), MODUL B richtig datasourceB verwendet.

Aber ich weiß immer noch nicht, warum das passiert. Habe ich verpasst etwas Dokumentation darüber gelesen? Ist es pax-jdbc-config Problem oder Karaf Problem?

Antwort

2

Wenn Sie die Datenquelle verweisen, können Sie einen Filter verwenden, wich ein, um anzuzeigen, Sie wollen:

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

Oh mein Gott, du bist wahrscheinlich Recht! Ich wusste nicht, Module können nicht wissen, welche Datenquelle ich meine, weil ich nur die ID der Referenz, aber keine tatsächliche Referenz .. Danke! – everis

Verwandte Themen