Конфигурация подключения базы данных Hibernate - PullRequest
1 голос
/ 11 марта 2010

У нас есть 2 разные серверные среды, использующие одну и ту же конфигурацию Hibernate. Один сервер поддерживает JNDI для источника данных, а другой - нет. В настоящее время конфигурация Hibernate настроена для использования JNDI, что вызывает проблему на сервере, который не поддерживает JNDI.

Я также пытался поместить прямую конфигурацию JDBC вместе с конфигурацией JNDI в файл конфигурации, но похоже, что hibernate всегда предпочитает JNDI перед прямой конфигурацией JDBC, если оба существуют.

Мой вопрос: будет ли это одинаковым, если обе конфигурации JNDI и connection_provider существуют? Будет ли Hibernate по-прежнему использовать JNDI поверх connection_provider? Или есть ли способ изменить приоритет свойства подключения к базе данных?

У меня нет доступа к серверу все время, поэтому я решил задать вопрос перед моим окном.

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

Ответы [ 2 ]

1 голос
/ 11 марта 2010

Используйте метод URL в файле конфигурации. В коде вручную попытайтесь получить соединение с источником JNDI, используя context.lookup ("java: comp / env / ..."). Если это удастся, установите свойство источника данных Hibernate и снимите свойства, связанные с URL. Если это не удастся, пусть Hibnerate продолжит настройку URL.

if (jndiDataSourceExists()) {
  configuration.setProperty(Environment.DATASOURCE, "jdbc/jndiname")
  configuration.setProperty(Environment.URL, null);
}
configuration.buildSessionFactory();
1 голос
/ 11 марта 2010

У нас есть 2 разные серверные среды, использующие одну и ту же конфигурацию Hibernate.

Ну, это может быть не ожидаемый ответ, но у меня такое ощущение, что вы сами создаете проблему здесь: если ваша среда отличается, используйте разные конфигурации. I сделает следующее:

  • положить все общее в hibernate.cfg.xml (в комплекте в приложении)
  • помещает определенные вещи в hibernate.properties файлы и помещает «правильный» в корневой каталог пути к классам для каждого приложения (но вне приложения).

Например, это будет содержимое hibernate.properties для «среды JNDI»:

hibernate.connection.datasource = java:/comp/env/jdbc/test
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_lookup_class = org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

И это будет содержимое hibernate.properties для "не JNDI-среды":

hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost/mydatabase
hibernate.connection.username = myuser
hibernate.connection.password = secret
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=1800
hibernate.c3p0.max_statements=50
hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...