Объединение пулов соединений Jboss или объединение пулов соединений в режиме гибернации

#hibernate #spring #jboss #database-connection

#переход в спящий режим #spring #jboss #подключение к базе данных

Вопрос:

Мы используем Spring Hibernate на сервере приложений Jboss. Мы использовали объединение пулов соединений Jboss для всех наших потребностей в объединении пулов приложений, используя * -ds.xml файл выглядит следующим образом

 <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>dev_1</user-name>
<password>*********</password> 
<min-pool-size>5</min-pool-size>
<max-pool-size>15</max-pool-size> // production system has more than 80 connections
<idle-timeout-minutes>1</idle-timeout-minutes>
  

В последнее время мы наблюдаем повторяющиеся исключения «Сброс соединения» и «Нет управляемых подключений».
Мы используем управление транзакциями Spring, поэтому мы вручную не закрываем ни одно соединение. Необходимо ли закрывать соединения вручную или мы должны отказаться от объединения пулов соединений Jboss и использовать механизм объединения пулов соединений c3po или мы можем использовать их оба вместе.

Наши свойства гибернации в Sessionfactory…

 <property name="hibernateProperties">
        <props>
            <prop key="hibernate.show_sql">false</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>
            <prop key="hibernate.jdbc.batch_size">0</prop>
            <prop key="hibernate.jdbc.factory_class">net.bull.javamelody.HibernateBatcherFactory</prop>
            <prop key="hibernate.use_streams_for_binary">true</prop>
            <prop key="hibernate.cache.use_query_cache">true</prop>
            <prop key="hibernate.cache.use_second_level_cache">true</prop>
            <prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
            <prop key="hibernate.cache.query_cache_factory">com.cisco.ipcentral.hibernate.cache.StandardQueryCacheFactory</prop>
            <!-- applicationContext hibernateProperties merge-point -->
        </props>
    </property>
  

Ответ №1:

Я не знаком с «пулом соединений JBoss», но похоже, что у вас есть соединения, время ожидания которых истекло или которые отключаются брандмауэром, пока они находятся в пуле. Большинство пулов соединений позволяют задать «запрос проверки», который будет выполняться до передачи соединения, чтобы убедиться, что соединение все еще работает. Использование этого приведет к тому, что пул удалит мертвые соединения, прежде чем они могут быть переданы вашему приложению для использования.

Обновление: может быть, вы ищете <check-valid-connection-sql> ?