Tomcat and Mysql Problem - Help!

Hi.

I'm using jsf, hibernate, tomcat 6.0.10 and mysql as db.

Server is running 7/24. I have a login page.

After inactivity of 4-5 hours, I can see the login page but when I click "login", (there is a db query), I got that :

type Exception report

message

description The server encountered an internal error () that prevented it from fulfillingthis request.

exception

javax.servlet.ServletException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException

MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)

at java.net.SocketOutputStream.write(SocketOutputStream.java:136)

at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)

at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)

at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2637)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)

at com.mysql.jdbc.Connection.execSQL(Connection.java:3176)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)

at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)

at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)

at org.hibernate.loader.Loader.doQuery(Loader.java:662)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)

at org.hibernate.loader.Loader.doList(Loader.java:2211)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)

at org.hibernate.loader.Loader.list(Loader.java:2090)

at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)

at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)

at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)

at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

at tr.com.invent.bean.common.LoginBean.logIn(LoginBean.java:91)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.el.parser.AstValue.invoke(AstValue.java:131)

at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:95)

at javax.faces.component.UICommand.broadcast(UICommand.java:383)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:448)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at tr.com.invent.common.HibSessionFilter.doFilter(HibSessionFilter.java:36)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at tr.com.invent.common.SecurityFilter.doFilter(SecurityFilter.java:70)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)

at java.lang.Thread.run(Thread.java:619)

** END NESTED EXCEPTION **

Last packet sent to the server was 0 ms ago.

javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)

tr.com.invent.common.HibSessionFilter.doFilter(HibSessionFilter.java:36)

tr.com.invent.common.SecurityFilter.doFilter(SecurityFilter.java:70)

root cause

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException

MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error

at java.net.SocketOutputStream.socketWrite0(Native Method)

at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)

at java.net.SocketOutputStream.write(SocketOutputStream.java:136)

at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)

at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)

at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2637)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)

at com.mysql.jdbc.Connection.execSQL(Connection.java:3176)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)

at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)

at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)

at org.hibernate.loader.Loader.getResultSet(Loader.java:1778)

at org.hibernate.loader.Loader.doQuery(Loader.java:662)

at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)

at org.hibernate.loader.Loader.doList(Loader.java:2211)

at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)

at org.hibernate.loader.Loader.list(Loader.java:2090)

at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)

at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)

at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)

at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)

at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

at tr.com.invent.bean.common.LoginBean.logIn(LoginBean.java:91)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at org.apache.el.parser.AstValue.invoke(AstValue.java:131)

at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:95)

at javax.faces.component.UICommand.broadcast(UICommand.java:383)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:448)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at tr.com.invent.common.HibSessionFilter.doFilter(HibSessionFilter.java:36)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at tr.com.invent.common.SecurityFilter.doFilter(SecurityFilter.java:70)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)

at java.lang.Thread.run(Thread.java:619)

** END NESTED EXCEPTION **

Last packet sent to the server was 0 ms ago.

com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2652)

com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)

com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)

com.mysql.jdbc.Connection.execSQL(Connection.java:3176)

com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)

com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)

org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)

org.hibernate.loader.Loader.getResultSet(Loader.java:1778)

org.hibernate.loader.Loader.doQuery(Loader.java:662)

org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)

org.hibernate.loader.Loader.doList(Loader.java:2211)

org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)

org.hibernate.loader.Loader.list(Loader.java:2090)

org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)

org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)

org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)

org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)

org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)

tr.com.invent.bean.common.LoginBean.logIn(LoginBean.java:91)

sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

java.lang.reflect.Method.invoke(Method.java:597)

org.apache.el.parser.AstValue.invoke(AstValue.java:131)

org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)

org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)

javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)

com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:95)

javax.faces.component.UICommand.broadcast(UICommand.java:383)

javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:448)

javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)

com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:248)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

tr.com.invent.common.HibSessionFilter.doFilter(HibSessionFilter.java:36)

tr.com.invent.common.SecurityFilter.doFilter(SecurityFilter.java:70)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.10 logs.

I have to restart Tomcat to solve the problem.

Any help will be greatly apreciated.

- Gokhan

[13903 byte] By [GBerberoglua] at [2007-11-26 21:24:18]
# 1
Do you gently close the connection after every session, or even better, after every query?
BalusCa at 2007-7-10 3:04:25 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 2

Yes, I'm using OneSessionPerRequest by a filter:

public class HibSessionFilter implements javax.servlet.Filter

{

protected static ThreadLocal hibernateHolder = new ThreadLocal();

protected static SessionFactory sessionFactory;

public void init(FilterConfig filterConfig) throws ServletException

{

try

{

sessionFactory = new Configuration().configure().buildSessionFactory();

// System.out.println("Session Factory Created");

} catch (Throwable ex)

{

System.out.println(ex.getMessage());

throw new ExceptionInInitializerError(ex);

}

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

{

if (hibernateHolder.get() != null)

throw new IllegalStateException("Thread already has a session!");

try

{

chain.doFilter(request, response);

} finally

{

Session sess = (Session) hibernateHolder.get();

if (sess != null)

{

hibernateHolder.set(null);

try

{

sess.close();

} catch (HibernateException ex)

{

throw new ServletException(ex);

}

}

}

}

public static Session getSession() throws HibernateException

{

Session sess = (Session) hibernateHolder.get();

if (sess == null)

{

sess = sessionFactory.openSession();

hibernateHolder.set(sess);

// System.out.println("Session Opened");

}

return sess;

}

public static SessionFactory getSessionFactory()

{

return sessionFactory;

}

public void destroy()

{

}

}

GBerberoglua at 2007-7-10 3:04:25 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...
# 3

There is a parameter in MySQL that controls how much time a client can be idle before connection to server times out. The default value will time out after a few hours. You can set this value to a very large number and this will soilve you problem. I have tried to do stuff session based, but it din't work out for me. There might be a more elegant way to deal with the problem, but sometimes brute force avoids a lot of hassle.

In /etc/my.cnf, add the following entries in the [mysqld] section:

interactive_timeout=2147483647

wait_timeout=2147483647

martin_dubuca at 2007-7-10 3:04:26 > top of Java-index,Enterprise & Remote Computing,Web Tier APIs...