Не удается найти драйвер при использовании универсального комплекта базы данных

У меня есть проект, который собран из нескольких пакетов 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. Инстанцировал Driver статически в одном из классов, например так:
    Class.forName("org.postgresql.Driver");

    а. Также попробовал это при добавлении org.postgresql пакет как DynamicImport-Package,

  3. Добавил файл META-INF\services\java.sql.Driver с содержанием org.postgresql.Driver

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

2 ответа

Решение

Я нашел решение или, по крайней мере, обходной путь. В моем абстрактном DAO я добавил следующее:

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

Это похоже на работу. Кто-нибудь знает почему? Это не так сильно отличается от Class.forName решение.

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

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

Другие вопросы по тегам