У нас проблема с подключением mysql на нашем сервере.WebApp работает правильно, но через несколько часов мы получаем сообщение об ошибке подключения к MySQL.Мы думаем, что что-то не так с Hibernate Session.Насколько нам известно, соединение mysql закрыто, а hibernate пытается использовать тот же сеанс.Возможно, мы не закрываем сессию должным образом.
Мы работаем со Struts 2, и мы определили Перехватчик, который управляет всем материалом сеанса.Вот код:
public class OSVStrutsInterceptors implements Interceptor {
private static SessionFactory sf;
@Override
public void destroy() {
try
{
sf.getCurrentSession().close();
}
catch (HibernateException ex)
{
throw new RuntimeException(ex);
}
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation ai) throws Exception {
sf = HibernateUtil.getSessionFactory();
Session sesion=sf.getCurrentSession();
try {
sesion.beginTransaction();
}
catch (Exception ex ) {
System.out.println(new Date()+" Sesion cerrada. Obtenemos una nueva");
sesion=sf.openSession();
}
String result=ai.invoke();
sesion.getTransaction().commit();
return result;
}
}
Как видите, мы пытаемся получить текущий сеанс, но если это невозможно, мы открываем новый сеанс.Также мы закрываем сессию метода destroy () перехватчика.
Но мы всегда получаем эту ошибку на нашем сервере:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: Broken pipe
STACKTRACE:
java.net.SocketException: Broken pipe