我们的服务器中的mysql连接有问题。 WebApp工作正常,但几个小时后,我们从与mysql的连接中得到一个错误。 我们认为hibernate Session有些问题。据我们所知,当hibernate尝试使用同一个会话时,mysql连接被关闭。 也许我们没有正确地关闭会话。休眠连接超时
我们使用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;
}
}
正如你所看到的,我们正在试图让currentSession,但如果是不可能的,我们打开一个新的会话。我们也关闭拦截器的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