Расположение банки JDBC для спящего режима на JBOSS - PullRequest
2 голосов
/ 12 ноября 2010

Я использую jboss 5.1.0 GA и подключаюсь к базе данных postgresql из моего приложения, используя hibernate.Я использую jibernate jar-файлы по умолчанию, найденные в jboss.В моей войне приложений я упаковываю только jar-файлы, относящиеся к конкретным приложениям, и другие jar-файлы сторонних производителей, НЕ найденные в jboss.

Если я помещаю jar-файл jdbc postgres в server / xxxx / lib, он выбирается.Если я помещу его в web-inf / lib моего war-файла приложения, он не будет выбран, и я получу -

java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:545)
at java.sql.DriverManager.getConnection(DriverManager.java:140)
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)

Мой вопрос: как мне получить jboss для загрузки jar-файла драйвера postgres из-подweb-inf / lib?

Как я уже сказал, файлы jibenate созданы jboss, и я не упаковываю их в свое приложение.

Обновление: еще один вопрос.В каких сценариях мы должны использовать jibernate jar по умолчанию и в каких возможных сценариях мы хотели бы упаковать jibernate jar вместе с нашим приложением?

Спасибо,

1 Ответ

3 голосов
/ 15 ноября 2010

Мой вопрос: как мне заставить jboss загрузить jar-файл драйвера postgres из-под web-inf / lib?

Насколько мне известно, это невозможно. Проще говоря, загрузчики классов расположены в дереве «родитель-потомок». Когда загрузчику классов предлагается загрузить определенный класс, он сначала делегирует запрос загрузчику родительского класса, а затем просматривает свой собственный уровень, если загрузчик (и) родительского класса не может найти запрошенный класс.

Таким образом, хотя классы, загруженные загрузчиком родительских классов (например, загрузчиком классов сервера), видны из загрузчика дочерних классов (например, загрузчика классов webapp), обратное неверно.

Другими словами, загрузчик классов, используемый для загрузки классов Hibernate, не может видеть классы из веб-приложения и, следовательно, не может загрузить драйвер, если вы не установите его на том же уровне (или выше в иерархии).

Подводя итог, можно сказать, что единственный способ сохранить драйвер на уровне веб-приложения - это связать файлы Jibernate в веб-приложении и отключить родительское делегирование, чтобы файлы Jiber Hibernate из веб-приложения могли вместо этого использовались те из JBoss.

В каких сценариях мы должны использовать jibernate jar по умолчанию (...)

Обычно при использовании JPA с менеджером сущностей, управляемым контейнером.

Ресурсы

...