2013-11-12 5 views
0

Пожалуйста, помогите мне. Я смущен c3po. В моем приложении я использую hibernate (как поставщик JPA) и c3po. Если в процессе транзакционного соединения падает, я должен сделать какое-то действие. Когда соединение сломаны я пойматьJpa Hibernate c3po. Соединение сломан или нет?

(javax.persistence.PersistenceException) javax.persistence.PersistenceException  
    org.hibernate.exception.GenericJDBCException: 
    Exception input/output: Connection reset by peer: socket write error 

Q: Могу ли я быть уверен, что GenericJDBCException только в том случае, когда существует разрыв соединения являются те (проблемы соединения с базой данных (рестарта, сетевые проблемы, убить сессию и т.д))? Другими словами, мне нужно знать, что исключение связано с падением соединения. Alexey.

мой конфиг

<property name="hibernate.show_sql" value="true"/> 
       <property name="hibernate.connection.autocommit" value="false"/>      
       <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/> 
       <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>   
       <property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider"/> 
       <property name="hibernate.connection.autoReconnect" value="true"/> 
       <!--максимальное количество соединений в пуле--> 
       <property name="hibernate.c3p0.max_size" value="5"/> 
       <!--минимальный размер пула--> 
       <property name="hibernate.c3p0.min_size" value="1"/> 
       <property name="hibernate.c3p0.acquire_increment" value="1"/> 
       <!--как долго ждать, чтобы подтвердить соединение, т.е. не закрывать его, а, например, сделать запрос "select 1"--> 
       <property name="hibernate.c3p0.idle_test_period" value="30"/><!-- In seconds --> 
       <property name="hibernate.c3p0.max_statements" value="50"/> 
       <!--таймаут для с3p0--> 
       <property name="hibernate.c3p0.timeout" value="0"/> 
       <property name="hibernate.cache.use_second_level_cache" value="false"/> 
       <property name="hibernate.jdbc.batch_size" value="50"/> 
       <property name="hibernate.c3p0.checkoutTimeout" value="0"/> 
       <property name="hibernate.c3p0.preferredTestQuery" value="select 1 from dual"/> 
       <property name="hibernate.c3p0.testConnectionOnCheckout" value="true"/> 
       <property name="hibernate.c3p0.testConnectionOnCheckIn" value="true"/> 
       <property name="hibernate.c3p0.acquireRetryAttempts" value="0"/> 
       <property name="hibernate.c3p0.acquireRetryDelay" value="5000"/> 
       <property name="hibernate.c3p0.breakAfterAcquireFailure" value="false"/> 
+0

привет, соединение сброс сверстником обычно означает сломанное соединение. вы настроили любую форму тестирования соединения c3p0 (как Kanhu начинает предлагать ниже)? см. http://www.mchange.com/projects/c3p0/#configuring_connection_testing –

ответ

0

В файле конфигурации базы данных (ex.hibernate.cfg.xml) просто добавьте ниже линии

<property name="preferredTestQuery" value="SELECT 1"/>

Пожалуйста, проверьте эту ссылку на ваш ссылка http://www.mchange.com/projects/c3p0/#preferredTestQuery

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

Поблагодарить u

+0

Спасибо @Kanhu за ответ. Я редактирую свой пост и добавляю конфигурацию. Я хочу поймать исключение в случае, когда на момент транзакции возникли проблемы с подключением к базе данных. И просто для того, чтобы отделить ошибку соединения от других, которые могут (если это возможно) вызывать GenericJDBCException .... – asu

Смежные вопросы