mysql+hibernate+c3p0+ehcache老报错

minigpsnet 2013-02-19 10:39:34
Feb 19, 2013 2:20:06 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Rest Servlet] in context with path [/minigps] threw exception
org.hibernate.TransactionException: JDBC begin transaction failed:
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:76)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:160)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1395)
at com.minigps.dao.IprecordDAO.isIpValidAndUpdateCount(IprecordDAO.java:233)
at com.minigps.bll.ServiceLogAndCheck.isValid(ServiceLogAndCheck.java:48)
at com.minigps.api.restful.service.GoogleCellResourceService.getGoogleRequest(GoogleCellResourceService.java:25)
at sun.reflect.GeneratedMethodAccessor100.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:168)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
at com.sun.jersey.server.impl.uri.rules.ResourceObjectRule.accept(ResourceObjectRule.java:84)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:74)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1357)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1289)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:684)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1600)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1014)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1269)
at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1261)
at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5029)
at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:912)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:72)
... 39 more

程序部署完了 过段时间报这个错,急死人了。
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
minigpsnet 2013-05-16
  • 打赏
  • 举报
回复
解决了,是有一个 session没close,一直调用并发大就挂了。
minigpsnet 2013-02-19
  • 打赏
  • 举报
回复
转到java版了。 看样子像mysql 8小时超时。但我的没运行8小时,大概1小时左右。
rucypli 2013-02-19
  • 打赏
  • 举报
回复
还是转到java版吧
minigpsnet 2013-02-19
  • 打赏
  • 举报
回复
c3p0配置: ########################### ### C3P0 Connection Pool### ########################### hibernate.c3p0.max_size 200 hibernate.c3p0.min_size 10 hibernate.c3p0.timeout 1800 hibernate.c3p0.max_statements 0 hibernate.c3p0.idle_test_period 1500 hibernate.c3p0.acquire_increment 2 hibernate.c3p0.automaticTestTable con_test hibernate.c3p0.debugUnreturnedConnectionStackTraces true hibernate.c3p0.unreturnedConnectionTimeout 300 hibernate.c3p0.testConnectionOnCheckin true #hibernate.c3p0.testConnectionOnCheckout true hibernate.c3p0.maxIdleTime 1800 hibernate.c3p0.maxConnectionAge 1600
minigpsnet 2013-02-19
  • 打赏
  • 举报
回复
出错代码: public Iprecord findAvaiable(String ipstr, int perdaycount) { Iprecord ip = null; Object[] dummy = null; // Session session = getSession(); // Transaction trans = session.beginTransaction(); try { // String queryString = String.format("from Iprecord as model where model.ip = '%s'", ipstr); // Query queryObject = getSession().createQuery(queryString); // queryObject.setLockMode("usedCount", LockMode.PESSIMISTIC_WRITE); String queryString = String.format("select id, ip, used_count, lastupdate_time from iprecord as model where model.ip = '%s' for update", ipstr); SQLQuery queryObject = getSession().createSQLQuery(queryString); //trans.commit(); if(queryObject.list().size() > 0) { dummy = (Object[]) queryObject.list().get(0); ip = new Iprecord(); ip.setId(Integer.valueOf(dummy[0].toString())); ip.setIp(dummy[1].toString()); ip.setUsedCount(Integer.valueOf(dummy[2].toString())); ip.setLastupdateTime(Timestamp.valueOf(dummy[3].toString())); } } catch (RuntimeException re) { log.error("find by property name failed", re); throw re; } finally { } return ip; } @SuppressWarnings("deprecation") public static boolean isIpValidAndUpdateCount(String ipstr) { boolean result = false; int perdaycount = AppConfigService.getAppConfigService().mlocate_getIpPerdayCount(); IprecordDAO dao = new IprecordDAO(); Iprecord iprecord = null; Session session = dao.getSession(); Transaction trans = null; try { trans = session.beginTransaction(); iprecord = dao.findAvaiable(ipstr, perdaycount); if(iprecord != null) { Date currentDate = new Date(); currentDate.setDate(currentDate.getDate() -1); if(currentDate.getTime() > iprecord.getLastupdateTime().getTime()) { result = true; iprecord.setUsedCount(1); Date lastupdateTime = new Date(); Timestamp timeStamp = new Timestamp(lastupdateTime.getTime()); iprecord.setLastupdateTime(timeStamp); } else { if(iprecord.getUsedCount()< perdaycount) { result = true; iprecord.setUsedCount(iprecord.getUsedCount()+1); } } } else { //insert the ip record result = true; iprecord = new Iprecord(); iprecord.setIp(ipstr); iprecord.setUsedCount(1); } if(iprecord.getId() != null) { //save String queryString = "update iprecord set used_count = ?, lastupdate_time = ? where id = ?"; SQLQuery queryObject = session.createSQLQuery(queryString); queryObject.setInteger(0, iprecord.getUsedCount()); queryObject.setDate(1, iprecord.getLastupdateTime()); queryObject.setInteger(2, iprecord.getId()); queryObject.executeUpdate(); } else { String queryString = "insert ignore into iprecord(ip, used_count, lastupdate_time) values(?, ?, ?)"; SQLQuery queryObject = session.createSQLQuery(queryString); queryObject.setString(0, iprecord.getIp()); queryObject.setInteger(1, iprecord.getUsedCount()); queryObject.setDate(2, iprecord.getLastupdateTime()); queryObject.executeUpdate(); } trans.commit(); } catch(RuntimeException re) { log.error("find by property name failed", re); if(trans != null) { trans.rollback(); } throw re; } finally { session.close(); } return result; }

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧