tenwit wrote:
Is this what you do, nausz? If it is, you'll need code like this, when you're closing the session
You're right, I don't need long-lived connection, but I don't do sessionFactory.openSession(Connection) either. I've just done search on the whole project to make 100% sure.
And if I add
Code:
Connection con = sf.getCurrentSession().close();
if (con != null) { con.close(); }
it doesn't help either.
I'd better post full code of my servlet filter here, maybe you can tell something from it.
Code:
private SessionFactory sf;
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
try {
sf = HibernateUtil.getSessionFactory();
try {
sf.getCurrentSession().beginTransaction();
} catch (HibernateException e) {
logger.warn(e.toString());
logger.info("Starting transaction failed. Performing second attempt");
// Try to initialize hibernate one more time
sf.getCurrentSession().beginTransaction();
}
// Call the next filter (continue request processing)
chain.doFilter(request, response);
logger.debug("Committing the database transaction");
sf.getCurrentSession().getTransaction().commit();
Connection con = sf.getCurrentSession().close();
if (con != null)
con.close();
} catch (StaleObjectStateException staleEx) {
logger.error("This interceptor does not implement optimistic concurrency control!");
logger.error("Your application will not work until you add compensation actions!");
// Rollback, close everything, possibly compensate for any permanent changes
// during the conversation, and finally restart business conversation. Maybe
// give the user of the application a chance to merge some of his work with
// fresh data... what you do here depends on your applications design.
throw staleEx;
} catch (Throwable ex) {
// Rollback only
ex.printStackTrace();
try {
if (sf.getCurrentSession().getTransaction().isActive()) {
sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable rbEx) {
logger.error("Could not rollback transaction after exception!", rbEx);
}
// Let others handle it... maybe another interceptor for exceptions?
throw new ServletException(ex);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
sf = HibernateUtil.getSessionFactory();
}
Actually for some obscure reason I'm getting slightly different exception now:
DEBUG 03 May 2006 12:08:12
HibernateThreadFilter - Committing the database transaction [Servlet.Engine.Transports : 2]
[3/05/06 12:08:12:268 EST] 62d084fd JDBCTransacti E org.hibernate.transaction.JDBCTransaction JDBC commit failed
[3/05/06 12:08:12:300 EST] 62d084fd JDBCTransacti E org.hibernate.transaction.JDBCTransaction TRAS0014I: The following exception was logged java.sql.SQLException: I/O Error: Connection reset
at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1038)
at net.sourceforge.jtds.jdbc.TdsCore.submitSQL(TdsCore.java:884)
at net.sourceforge.jtds.jdbc.ConnectionJDBC2.commit(ConnectionJDBC2.java:1686)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:139)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:115)
at HibernateThreadFilter.doFilter(HibernateThreadFilter.java:71)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
at com.wedgetail.idm.sso.AuthFilter.doFilter(AuthFilter.java:128)
at com.wedgetail.idm.sso.forms.FormsAuthFilter.filter(FormsAuthFilter.java:342)
at com.wedgetail.idm.sso.forms.FormsAuthFilter.doFilter(FormsAuthFilter.java:299)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:974)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:564)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:200)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:119)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:276)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:182)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:618)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:439)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
Caused by: java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java(Compiled Code))
at java.io.DataInputStream.readFully(DataInputStream.java(Compiled Code))
at java.io.DataInputStream.readFully(DataInputStream.java:209)
at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:814)
at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:695)
at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:443)
at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:102)
at net.sourceforge.jtds.jdbc.ResponseStream.peek(ResponseStream.java:87)
at net.sourceforge.jtds.jdbc.TdsCore.wait(TdsCore.java:3772)
at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1031)
... 24 more