These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Mixed JPA&Hibernate / JDBC: MySQL connection timeout
PostPosted: Tue Jan 13, 2009 10:19 am 
Newbie

Joined: Tue May 13, 2008 7:22 pm
Posts: 2
Location: Cambridge, MA
Hi Everyone,

I'm having what appears to be a slightly unusual problem with persistence of mysql connections (overnight from Tomcat) in a setting where I have mixed straight JDBC access with JPA/Hibernate access.

I'm using: Tomcat 6.0.18; Mysql 5.0.51a; Java 1.5; Hibernate 3.2;

MyApp utilizes five (5) distinct mysql catalogs (databases).
Originally all 5 were accessed using JDBC/JNDI with Resources that all look like this
(in webapps/MyApp/META-INF):

<Resource name="jdbc/CATALOGNAME" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="XXXXX" password="XXXXX"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/CATALOGNAME"
validationQuery="select 1"
/>

Everything worked fine, including the validationQuery to deal with MySQL closing connections overnight.

Recently I replaced the JDBC access for 3 of the catalogs by use of JPA/Hibernate persistence,
while leaving the other two catalogs as originally implemented (they consist of large tables
containing daily price information; hence not very object-oriented.) The persistence.xml looks
like this:

<persistence-unit name="ctdbPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>

..... lots of class entries like:
<class>com.connectedtrading.database.users.AbstractLineitem</class>
<class>com.connectedtrading.database.users.Lineitem</class>

<properties>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/CATALOGNAME" />
<property name="hibernate.connection.username" value="XXXXX" />
<property name="hibernate.connection.password" value="XXXXX" />
</properties>
</persistence-unit>

[Interestingly enough, only one of the 3 CATALOGNAMEs appears.]
Note that I left all 5 of the Resource elements in place in context.xml.

Once again, everything works well, EXCEPT that now when I leave the system running overnight and
no accesses occur (it's only in dev mode), in the morning I now get the exception shown at the
end of this email. It certainly looks like the "mysql" disconnect behavior.
As with the JDBC case, repeating the access causes everything to start working correctly.
The query being submitted is

org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:75)
com.connectedtrading.database.users.UserDAO.findByProperty(UserDAO.java:180)
com.connectedtrading.database.users.UserDAO.findByLogin(UserDAO.java:203)

which is a hibernate query supporting user login.

Based on two suggestions I received, I have tried two replacements for the <properties> in my persistence.xml, but neither solved the problem, although both provided access normally
until the overnight timeout occurred:

The first one (based on http://www.hibernate.org/hib_docs/entit ... ation.html) was:

... all the <class>'s....

<jta-data-source>java:/DefaultDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
</properties>


The second one was:

... all the <class>'s....

<properties>
<property name="hibernate.c3p0.acquire_increment" value="3" />
<property name="hibernate.c3p0.idle_test_period" value="14400" />
<property name="hibernate.c3p0.timeout" value="25200" />
<property name="hibernate.c3p0.max_size" value="15" />
<property name="hibernate.c3p0.min_size" value="3" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.preferredTestQuery" value="select 1;" />
</properties>

If anyone on the list has had experience with this issue, I hope you can give me some pointers to dealing with it.

Thanks much in advance,
Ken Bowen

----- The Exception-----

HTTP Status 500 -

type Exception report

message

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

exception

javax.servlet.ServletException: javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not execute query
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not execute query
org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:75)
com.connectedtrading.database.users.UserDAO.findByProperty(UserDAO.java:180)
com.connectedtrading.database.users.UserDAO.findByLogin(UserDAO.java:203)
com.connectedtrading.user_manage.LoginProcessor.locateUser(LoginProcessor.java:54)
com.connectedtrading.user_manage.LoginProcessor.checkLogin(LoginProcessor.java:35)
com.connectedtrading.actions.ProcessLoginAction.execute(ProcessLoginAction.java:33)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

org.hibernate.exception.JDBCConnectionException: could not execute query
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.loader.Loader.doList(Loader.java:2216)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
org.hibernate.loader.Loader.list(Loader.java:2099)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
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)
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)
com.connectedtrading.database.users.UserDAO.findByProperty(UserDAO.java:180)
com.connectedtrading.database.users.UserDAO.findByLogin(UserDAO.java:203)
com.connectedtrading.user_manage.LoginProcessor.locateUser(LoginProcessor.java:54)
com.connectedtrading.user_manage.LoginProcessor.checkLogin(LoginProcessor.java:35)
com.connectedtrading.actions.ProcessLoginAction.execute(ProcessLoginAction.java:33)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause

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
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:2739)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3026)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1137)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1231)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2213)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
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 org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)
at com.connectedtrading.database.users.UserDAO.findByProperty(UserDAO.java:180)
at com.connectedtrading.database.users.UserDAO.findByLogin(UserDAO.java:203)
at com.connectedtrading.user_manage.LoginProcessor.locateUser(LoginProcessor.java:54)
at com.connectedtrading.user_manage.LoginProcessor.checkLogin(LoginProcessor.java:35)
at com.connectedtrading.actions.ProcessLoginAction.execute(ProcessLoginAction.java:33)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)


** END NESTED EXCEPTION **



Last packet sent to the server was 1 ms ago.
com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2757)
com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1581)
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
com.mysql.jdbc.Connection.execSQL(Connection.java:3026)
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1137)
com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1231)
org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
org.hibernate.loader.Loader.doQuery(Loader.java:674)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.doList(Loader.java:2213)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
org.hibernate.loader.Loader.list(Loader.java:2099)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
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)
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:66)
com.connectedtrading.database.users.UserDAO.findByProperty(UserDAO.java:180)
com.connectedtrading.database.users.UserDAO.findByLogin(UserDAO.java:203)
com.connectedtrading.user_manage.LoginProcessor.locateUser(LoginProcessor.java:54)
com.connectedtrading.user_manage.LoginProcessor.checkLogin(LoginProcessor.java:35)
com.connectedtrading.actions.ProcessLoginAction.execute(ProcessLoginAction.java:33)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.