当前位置: 代码迷 >> Java Web开发 >> ,刷新页面报数据库连接异常
  详细解决方案

,刷新页面报数据库连接异常

热度:217   发布时间:2016-04-16 21:43:24.0
在线等,刷新页面报数据库连接错误
在没加  ajax代码  的时候没问题,  但是加过之后,  刷新页面太过频繁的时候会出现如下错误:

报如下错误
java.lang.NullPointerException
at org.hibernate.connection.C3P0ConnectionProvider.closeConnection(C3P0ConnectionProvider.java:70)
at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:451)
at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:406)
at org.hibernate.jdbc.ConnectionManager.afterTransaction(ConnectionManager.java:293)
at org.hibernate.jdbc.JDBCContext.afterTransactionCompletion(JDBCContext.java:225)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:119)

at com.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2381)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2370)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
org.hibernate.TransactionException: JDBC commit failed
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:130)
at com.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:37)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2381)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2370)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLException: You can't operate on a closed Connection!!!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
at com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:809)
at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:139)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:115)
... 20 more
Caused by: java.lang.NullPointerException
at com.mchange.v2.c3p0.impl.NewProxyConnection.commit(NewProxyConnection.java:803)
... 22 more

ajax代码:
$(function(){
$("#area").change(function(){
$("#station option:not(:first)").remove();
var area = $(this).val();
if(area != ""){
var url = "<%=path%>/user/Linkage?method=listStation";
var args = {"areaId":area, "time":new Date()};

$.getJSON(url, args, function(data){
if(data.lenthg == 0){
alert("当前区域还未添加场站!");
}else{
for(var i = 0; i< data.length; i++){
var stationId = data[i].stationId;
var stationName = data[i].stationName;
$("#station").append("<option value='" + stationId + "'>" + stationName + "</option>");
}

控制session提交的  file 配置
<!-- 过滤用户session请求 -->
   <filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>com.util.HibernateSessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
HibernateSessionFilter的代码:
try{
Session session = sessionFactory.getCurrentSession();
tx = session.beginTransaction();
chain.doFilter(request, response);
tx.commit();
}catch(Exception e){
e.printStackTrace();

if(tx.isActive()){
tx.rollback();
}
}

}


------解决思路----------------------
应该是资源没有及时释放 多次连接造成的吧  表示不懂
------解决思路----------------------
http://stackoverflow.com/questions/21884701/hibernate-c3p0-throws-nullpointerexception-at-newproxyconnection-commit
看看能不能找到思路
------解决思路----------------------
Session session = sessionFactory.getCurrentSession();
tx = session.beginTransaction();
chain.doFilter(request, response);
tx.commit();
你的chain.doFilter里面应该也sessionFactory.getCurrentSession()了吧,这样能百分百保障开的是同一个连接?
------解决思路----------------------
每次刷新页面估计都会连接数据库,刷新太频繁可能就会出错吧。
------解决思路----------------------
配置上数据库连接池试试
------解决思路----------------------
chain.doFilter(request, response);应该看下chain.doFilter的实现,某些情况出现null。
------解决思路----------------------
关闭资源试试
  相关解决方案