Зависимость времени выполнения (например, пул соединений) и путь к классу? - PullRequest
0 голосов
/ 06 марта 2012

У меня есть проект Maven 3, который использует Hibernate 3. В файле свойств Hibernate есть запись для hibernate.connection.provider_class с классом, соответствующим поставщику соединения C3P0 (org.hibernate.connection.C3P0ConnectionProvider). Очевидно, этот класс используется только во время выполнения, поэтому мне не нужно добавлять соответствующую зависимость в моем POM с областью компиляции. Теперь я хочу дать возможность использовать любую желаемую инфраструктуру пула соединений, , поэтому я также не добавляю зависимости времени выполнения к POM .

Какая лучшая практика?

Я думал о добавлении записи в classpath, соответствующей зависимости времени выполнения (в данном случае, hibernate-c3p0), когда приложение запускается (например, с помощью командной строки). Но я не знаю, возможно ли это.

Это почти (может быть, точно) та же проблема, что и с SLF4J. Я не знаю, использует ли Hibernate шаблон фасада для объединения подключений.

Спасибо

Ответы [ 3 ]

2 голосов
/ 08 марта 2012

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

Если кто-то должен упомянуть об этом, то этобудет Hibernate, потому что Hibernate предлагает эту функцию в своей конфигурации.

Но вы можете добавить ее в POM с помощью optional: true, чтобы указать:

  1. Я поддерживаю эту функцию
  2. Если вы используете его, то я рекомендую этот фреймворк и эту версию

Это сделает жизнь пользователей вашего проекта несколько проще.

Но в целом не стоит упоминатьфункции, предоставляемые / необходимые другим проектам, если они не оказывают какого-либо влияния на ваш код (например, когда вы предлагаете более простой способ настройки пула соединений для Hibernate).

[EDIT] Ваша главная задачаВероятно, как настроить проект для QA.Технический термин для этого нового движения - « DevOps » - вместо создания WAR-дампа, который клиент (QA) должен тщательно настроить, конфигурация является частью процесса разработки, как и все остальное.То, что вы передаете, является полностью сконфигурированной, готовой к запуску установкой.

Чтобы реализовать это, создайте другой модуль Maven под названием " project -qa", который зависит от вашего проекта и всего остальноговам нужно превратить мертвый код в работающее приложение (поэтому оно будет зависеть от DBCP, а также будет содержать все необходимые файлы конфигурации).

Maven поддерживает оверлейные WARs , что позволит вамосуществить это безболезненно.

1 голос
/ 08 марта 2012

Вы можете пометить свою зависимость как необязательно .В этом случае он не будет упакован в архивы.В этом случае вы должны убедиться, что ваш контейнер предоставляет необходимую библиотеку.

0 голосов
/ 08 марта 2012

Вы можете использовать разные профили для каждого провайдера соединений. В каждом профиле вы помещаете зависимость времени выполнения, соответствующую поставщику соединений, которого хотите использовать, и соответственно изменяете свойство hibernate.connection.provider_class.

Подробнее о настройке зависимостей в профилях см. Различные зависимости для разных профилей сборки в maven .

Чтобы узнать, как изменить значение свойства hibernate.connection.provider_class, см. Как изменить файл .properties в maven в зависимости от моего профиля?

...