2

複数の OSGi バンドルから構築されたプロジェクトがあります。それらの 1 つは、プロジェクト全体で使用できる DataSource を定義する汎用データベース バンドルです。このサービスのSpring 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>

ここで、この DataSource を別のバンドルで使用すると、エラーが発生します。

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

org.postgresql.Driver を DriverManager に追加するために、次のことを試しました。

  1. 次のように、Spring コンテキストでその Driver の空の Bean をインスタンス化します。
    <bean class="org.postgresql.Driver" />

  2. 次のように、クラスの 1 つで Driver を静的にインスタンス化します。
    Class.forName("org.postgresql.Driver");

    を。org.postgresqlとしてパッケージを追加するときにもこれを試しましDynamicImport-Packageた。

  3. META-INF\services\java.sql.Driverコンテンツを含むファイルを追加しましたorg.postgresql.Driver

これらの解決策はどれも役に立たないようです。

4

2 に答える 2

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ソリューションとそれほど違いはありません。

于 2010-06-03T08:55:55.210 に答える
0

"No suitable driver" isn't the same thing as "can't find the driver".

This suggests to me that the JDBC driver class was loaded, but the syntax of the connection URL is incorrect.

于 2010-06-02T10:02:27.267 に答える