通过karaf 4上的pax-jdbc配置文件创建PostgreSQL DataSource

时间:2017-02-10 14:02:07

标签: postgresql osgi karaf pax

在我的karaf 4.0.8上,我安装了功能pax-jdbc-postgresql。安装了PostgreSQL的DataFactory:

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 |信息| 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。什么地方出了错?我在日志中看到没有例外......

1 个答案:

答案 0 :(得分: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。