Не удается найти драйвер при использовании универсального комплекта базы данных - PullRequest
2 голосов
/ 02 июня 2010

У меня есть проект, который собран из нескольких пакетов OSGi. Одним из них является универсальный пакет базы данных, который определяет источник данных, который можно использовать на протяжении всего проекта. Определение этой службы для пружинного компонента:

<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

Кажется, ни одно из этих решений не помогает.

Ответы [ 2 ]

1 голос
/ 03 июня 2010

Я нашел решение или, по крайней мере, обходной путь. В моем абстрактном 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 голосов
/ 02 июня 2010

«Нет подходящего драйвера» - это не то же самое, что «не могу найти драйвер».

Это говорит о том, что класс драйвера JDBC был загружен, но синтаксис URL-адреса соединенияневерен.

...