2017-02-10 50 views
1

在我的karaf 4.0.8上,我安裝了功能pax-jdbc-postgresql。對PostgreSQL的的DataFactory安裝:在karaf上通過pax-jdbc配置文件創建PosgreSQL數據源4

org.osgi.service.jdbc.DataSourceFactory] 
osgi.jdbc.driver.class org.postgresql.Driver 
osgi.jdbc.driver.name PostgreSQL JDBC Driver 
osgi.jdbc.driver.version PostgreSQL 9.4 JDBC4.1 (build 1203) 
service.bundleid 204 
service.scope singleton 
Using Bundles com.eclipsesource.jaxrs.publisher (184) 

我已經創建文件etc/org.ops4j.datasource-psql-sandbox.cfg

osgi.jdbc.driver.class=org.postgresql.Driver 
osgi.jdbc.driver.name=PostgreSQL 
url=jdbc:postgresql://localhost:5432/sandbox 
dataSourceName=psql-sandbox 
user=sandbox 
password=sandbox 

在那之後,我看到karaf.log確認該文件被處理:

2017-02-10 14:54:17,468 | INFO | 41-88b277ae0921)| DataSourceRegistration | 154 - org.ops4j.pax.jdbc.config - 0.9.0 |檢測到DataSource psql-sandbox的配置。跟蹤DSF用濾波器 (&(objectClass的= org.osgi.service.jdbc.DataSourceFactory)(osgi.jdbc.driver.class = org.postgresql.Driver)(osgi.jdbc.driver.name = PostgreSQL的))

但是,在控制檯的服務列表中看不到新的DataSource。什麼地方出了錯?我在日誌中看到沒有例外......

回答

2

日誌消息告訴您配置已處理,現在正在搜索合適的DataSourceFactory OSGi服務。

你的情況的問題是它沒有找到這樣的服務。所以要調試這個,你應該列出所有的DataSourceFactory服務並檢查它們的屬性。

service:list DataSourceFactory 

在我的例子就說明這一點:

[org.osgi.service.jdbc.DataSourceFactory] 
----------------------------------------- 
osgi.jdbc.driver.class = org.postgresql.Driver 
osgi.jdbc.driver.name = PostgreSQL JDBC Driver 
... 

正如你看到它不符合您在日誌中看到的過濾器。通常,您應該只提供osgi.jdbc.driver.class或osgi.jdbc.driver.name兩者。如果你刪除了osgi.jdbc.driver.name行,配置將會起作用。

沒有錯誤信息,因爲系統無法知道錯誤是否是暫時的。基本上,只要你安裝了一個匹配的OSGi服務,DataSource就會被創建。

+0

那麼,驅動程序名稱應該是「PostgreSQL JDBC Driver」?對於feture「sqlite」它是「sqlite」,對於「mysql」它是「mysl」,所以對於「postgresql」我期望「postgresql」或者至少有一些東西很容易找到... –

+0

名稱可以自由由誰輸出DataSourceFactory選擇。因此,安全的方法是簡單列出DataSourceDactory服務並檢查它們實際使用的內容。 –

+0

沒有機會強制DataSourceFactory導出器保留任何可預測的約定嗎? –