2010-06-02 44 views
2

我有一个从几个OSGi软件包中建立的项目。其中之一是定义可在整个项目中使用的DataSource的通用数据库包。这项服务的春天bean定义是:使用通用数据库包时找不到驱动程序

<osgi:service interface="javax.sql.DataSource"> 
    <bean class="org.postgresql.ds.PGPoolingDataSource"> 
     <property name="databaseName" value="xxx" /> 
     <property name="serverName" value="xxx" /> 
     <property name="user" value="xxx" /> 
     <property name="password" value="xxx" /> 
    </bean> 
</osgi:service> 

现在,使用这个数据源时不同的包,我们得到一个错误:

No suitable driver found for jdbc:postgresql://localhost/xxx 

我曾尝试以下添加org.postgresql .Driver到的DriverManager:

  1. 实例化的空豆在弹簧上下文驱动,这样的:
    <bean class="org.postgresql.Driver" />

  2. 实例化的驱动程序中的类的一个静态,像这样:
    Class.forName("org.postgresql.Driver");

    一个。在将org.postgresql程序包添加为DynamicImport-Package时也尝试了此操作。

  3. 添加的文件META-INF\services\java.sql.Driver与内容org.postgresql.Driver

这些解决方案似乎帮助。

回答

1

我找到了解决方案,或至少是一种解决方法。在我的抽象DAO中,我添加了以下内容:

static { 
    try { 
    DriverManager.registerDriver(new org.postgresql.Driver()); 
    } catch(SQLException ex) { 
    LogFactory.getLogger(AbstractDAO.class).error("Could not load Driver", ex); 
    } 
} 

这似乎起作用。有谁知道为什么?这与Class.forName解决方案没有什么不同。

0

“没有合适的驱动程序”与“找不到驱动程序”是不一样的。

这向我建议JDBC驱动程序类已加载,但连接URL的语法不正确。

+0

该url由PGPoolingDataSource生成,该PGPoolingDataSource来自与驱动程序相同的bundle。所以这在我看来似乎不大可能。此外,显示的网址是正确的。 另外,当我不在任何地方添加驱动程序时,我会得到相同的错误。 – Marc 2010-06-02 10:05:12

+0

无法加载驱动程序会给你一个ClassNotFoundException。其他事情正在发生。 – duffymo 2010-06-02 11:58:23

相关问题