Сбой канала связи Hibernate в приложении Java Servlet на основе Hibernate на базе MySQL - PullRequest
7 голосов
/ 26 мая 2010

Позвольте мне описать мой вопрос -

У меня есть приложение Java - Hibernate как уровень взаимодействия с БД поверх MySQL. Я получаю ошибку сбоя линии связи в моем приложении. Возникновение этой ошибки - очень специфический случай. Я получаю эту ошибку, когда я оставляю MySQL-сервер без присмотра более чем на 6 часов (то есть, когда MySQL не отправляет запросы более чем на 6 часов). Я вставляю описание верхнего уровня исключений ниже и добавляю ссылку на вставку для подробного описания трассировки стека.

javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Не удается открыть соединение - вызвано: org.hibernate.exception.JDBCConnectionException: Не удается открыть соединение - Вызывается: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи - Последний пакет, успешно полученный от сервера, был 1,274,868,181,212 миллисекунд назад. Последний пакет успешно отправлен сервер был 0 миллисекунд назад. - Вызывается: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Ошибка связи - Последний пакет, успешно полученный от сервера, был 1,274,868,181,212 миллисекунд назад. Последний пакет успешно отправлен сервер был 0 миллисекунд назад. - Вызвано: java.net.ConnectException: соединение отказался: подключиться

ссылка на пастин для дальнейшего исследования - http://pastebin.com/4KujAmgD

Что я понимаю из этих исключений, так это то, что MySQL отказывается принимать любые соединения после периода простоя / отсутствия активности. Я немного прочитал об этом через поиск в Google и узнал, что одним из возможных способов преодоления этого является установка значений для свойств c3p0, поскольку c3p0 поставляется в комплекте с Hibernate. В частности, я прочитал здесь http://www.mchange.com/projects/c3p0/index.html, что установка двух свойств idleConnectionTestPeriod и favouriteTestQuery решит эту проблему для меня. Но эти значения, похоже, не оказали влияния.

Это правильный подход к исправлению? Если нет, как правильно это преодолеть?

Ниже приведены вопросы, связанные с ошибкой канала связи, на stackoverflow.com, но я не нашел удовлетворительного ответа в их ответах. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи Как обращаться: сбой линии связи

Примечание 1 - я не получаю эту ошибку при непрерывном использовании приложения. Примечание 2 - Я использую JPA с Hibernate, и, следовательно, мои свойства hibernate.dialect и т. Д. Hibernate находятся в файле persistence.xml в папке META-INF (препятствует ли работе свойства c3p0?)

изменить - параметры c3p0, которые я опробовал, находятся в комментариях

Ответы [ 4 ]

5 голосов
/ 25 июля 2010

У меня была проблема раньше. Похоже, сервер MySQL прервал ваше соединение. Время ожидания по умолчанию составляет 28800, что составляет 8 часов. Пожалуйста, обратитесь к этой ссылке для более подробной информации.

http://shengchien.blogspot.com/2009/10/hibernate-c3p0-and-mysql.html

Надеюсь, это полезно для вас.

3 голосов
/ 28 сентября 2010

Вот отчет о том, как я наконец решил это - http://vatsalad.wordpress.com/2010/09/28/hibernate-communications-link-error-c3p0mysql-and-broken-pipe-error/

1 голос
/ 13 сентября 2013

Даже когда я сталкивался с этой ошибкой, я решил ее только после включения autoReconnect = true в конфигурации c3p0

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ex_app?autoReconnect=true</property>
0 голосов
/ 27 апреля 2018

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

<dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>4.3.6.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
     <version>4.3.1.Final</version>
 </dependency>
<dependency>
 <groupId>org.hibernate</groupId>
  <artifactId>hibernate-c3p0</artifactId>
 <version>4.3.6.Final</version>
</dependency>

  <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
   <version>0.9.1.2</version>
</dependency>

как он объясняет, достаточно было добавить только одно свойство в hibernate.cfg.xml чтобы получить пул c3p0

       <property name="hibernate.c3p0.min_size">10</property>

не более "ошибка канала связи", "после этого ожидается чтение 5 байтов, чтение 0". вот ссылка: https://howtodoinjava.com/hibernate/hibernate-c3p0-connection-pool-configuration-tutorial/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...