2017-02-13 92 views
1
配置PostgreSQL的数据源时

我为PAX以下数据源配置文件:NPE在春分

osgi.jdbc.driver.class=org.postgresql.Driver 
url=jdbc:postgresql://localhost:5432/demo 
dataSourceName=demo-pg 
user=demo 
password=demo 

它创建数据源在Karaf,然而,在Eclipse中使用Equinox的OSGi的启动,我得到NPE:

java.lang.NullPointerException 
    at java.util.Hashtable.put(Hashtable.java:459) 
    at java.util.Properties.setProperty(Properties.java:166) 
    at org.postgresql.ds.common.BaseDataSource.setProperty(BaseDataSource.java:1030) 
    at org.postgresql.ds.common.BaseDataSource.setUrl(BaseDataSource.java:964) 
    at org.postgresql.osgi.PGDataSourceFactory.configureBaseDataSource(PGDataSourceFactory.java:65) 
    at org.postgresql.osgi.PGDataSourceFactory.createSimpleDataSource(PGDataSourceFactory.java:127) 
    at org.postgresql.osgi.PGDataSourceFactory.createDataSource(PGDataSourceFactory.java:149) 
    at org.ops4j.pax.jdbc.config.impl.DataSourceRegistration.createDs(DataSourceRegistration.java:108) 
    at org.ops4j.pax.jdbc.config.impl.DataSourceRegistration.<init>(DataSourceRegistration.java:63) 
    at org.ops4j.pax.jdbc.config.impl.DataSourceFactoryTracker.addingService(DataSourceFactoryTracker.java:42) 
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) 
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1) 
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) 
    at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183) 
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:318) 
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:261) 
    at org.ops4j.pax.jdbc.config.impl.DataSourceConfigManager.updated(DataSourceConfigManager.java:80) 
    at org.apache.felix.cm.impl.helper.ManagedServiceFactoryTracker.updated(ManagedServiceFactoryTracker.java:159) 
    at org.apache.felix.cm.impl.helper.ManagedServiceFactoryTracker.provideConfiguration(ManagedServiceFactoryTracker.java:93) 
    at org.apache.felix.cm.impl.ConfigurationManager$UpdateConfiguration.run(ConfigurationManager.java:1772) 
    at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:141) 
    at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:109) 
    at java.lang.Thread.run(Thread.java:745) 

在调试器中检查后,我发现错误是由于属性PROTOCOL_VERSION为空而引发的。我试图在配置文件中设置变量:

protocolVersion=3 

但我仍然得到相同的错误。

如何在Equinox/Eclipse运行时配置PostgreSQL数据源?

我使用PostgreSQL驱动程序版本9.4-1200:

<dependency> 
     <groupId>org.postgresql</groupId> 
     <artifactId>postgresql</artifactId> 
     <version>9.4-1200-jdbc41</version> 
    </dependency> 

回答

0

你可能会碰到的问题PAXJDBC-107。 Pax-jdbc-config使用反射来写入属性。如果数据源有一个带Integer参数但不带int的setter,它目前可用。我计划在接下来的几天内解决这个问题并做一个新的发布。

+0

它看起来更像https://ops4j1.jira.com/browse/PAXJDBC-84 –

+0

好吧..然后它可能只与PostgreSQL的版本问题。 –

+0

它看起来像。我不确定是否应该将此作为答案编写......但是,是否应该从Maven存储库中删除错误版本? –

2

它似乎与新的PostgreSQL 42.1.1驱动程序解决。

PAXJDBC PostgreSQL Driver Adapter页状态的说明:

目前Postgres版本均为有效捆绑,并且还提供了一个DataSourceFactory。所以如果你使用最新的版本,你将不再需要这个适配器。

试试这个驱动程序:

<dependency> 
    <groupId>org.postgresql</groupId> 
    <artifactId>postgresql</artifactId> 
    <version>42.1.1</version> 
</dependency>