OSGI с Hibernate: не найден подходящий драйвер

Я получаю любимую ошибку:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/acme

Я понимаю много причин, по которым обычно возникает эта ошибка:

  • Недопустимый URL-адрес. Этот URL-адрес не содержит ошибок и отлично работает в SQL Workbench.
  • Драйвер отсутствует в ClassPath: он успешно импортирован (org.postgresql.Driver) и может быть создан либо напрямую, либо с помощью Class.forName("org.postgresql.Driver").

Загрузка Hibernate SessionFactory инициируется из Spring-Bean, но выполняется во время выполнения со следующими свойствами:

hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost:5432/acme
hibernate.connection.username = user
hibernate.connection.password = pass

Я понимаю, что Java DriverManager не работает в OSGi, поэтому регистрация драйвера с помощью DriverManager или создание его экземпляра для принудительной регистрации не имеет никакого эффекта.

Кто-нибудь знает, как я могу это исправить? Есть ли общее решение?

Заранее спасибо!


Решение

Как указал Андрес Оларте, я допустил ошибку, добавив драйвер в комплект реализации, но исключив его из комплекта Hibernate, где находятся классы и зависимости Hibernate.


person Tony Day    schedule 04.11.2011    source источник


Ответы (1)


Как у вас это упаковано? Если вы поместите Hibernate и банку JDBC Postgresql в один и тот же пакет OSGi, он должен работать. Это то, что BIRT загружает в свои драйверы jdbc.

person Andres Olarte    schedule 04.11.2011
comment
Они находятся в двух отдельных пакетах, но нет проблем со ссылкой на них или их созданием, поэтому я не вижу проблемы в этом...? - person Tony Day; 04.11.2011
comment
Можете ли вы добавить код в пакет Hibernate для доступа к классу в пакете PostgreSQL? Возможно, вы сможете получить доступ к классам в пакете Hibernate и PostgreSQL из третьего пакета, но это не означает, что пакет Hibernate сможет получить доступ к классу в пакете PostgreSQL. Пакет Hibernate сможет получить доступ к классу в PostgreSQL, если он знает об этом. Имеет ли это смысл? - person Andres Olarte; 05.11.2011
comment
Вероятно, это проблема, поскольку я не помню, чтобы вносил какие-либо изменения в пакет Hibernate после добавления драйвера PostgreSQL, и, как вы догадались, мой Hibernate SessionFactory находится в третьем пакете! Я посмотрю на это в понедельник и вернусь к вам. - person Tony Day; 05.11.2011
comment
Спасибо Андрес, это была именно проблема! Не могу поверить, что я пропустил что-то настолько маленькое, это действительно может быть крутая кривая обучения OSGi. Можете ли вы также обновить свой ответ, чтобы отразить это. Спасибо еще раз. - person Tony Day; 07.11.2011