c3p0怎么这么麻烦?????

cy729215495 2009-09-26 09:55:42
配置:

dbUser=lbserv
dbPass=hb_lbs_serv

#dbUrl=jdbc:oracle:thin:@172.16.1.3:1521:lbs
dbUrl=jdbc:oracle:thin:@211.91.132.164:1521:lbs
#dbUrl=jdbc:oracle:thin:@127.0.0.1:1521:orcl



dbDriver=oracle.jdbc.driver.OracleDriver


initPoolSize=6
minPoolSize=5
maxPoolSize=100


maxStatements=100000
maxIdleTime=0
checkouttimeout=30000
automaticTestTable=dual

acquireRetryAttempts=1

validationQuery=select * from dual


不使用系统,
过一个小时左右后,就报:

java.sql.SQLException: Io 异常: Connection reset
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:189)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:345)
at oracle.jdbc.driver.OracleStatement.open(OracleStatement.java:717)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2605)
at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:777)
at com.mchange.v2.c3p0.impl.NewProxyStatement.executeQuery(NewProxyStatement.java:35)
at com.lbs.dao.impl.AuthoDaoImpl.rUserModules(AuthoDaoImpl.java:158)
at com.lbs.service.impl.UserLoginActionImpl.userLogin(UserLoginActionImpl.java:45)
at com.lbs.service.UserLoginAction.execute(UserLoginAction.java:39)
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)
- [c3p0] Exceptions occurred while trying to close a PooledConnection's resources normally.
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
- [c3p0] NewPooledConnection close Exception.
java.sql.SQLException: Io 异常: Connection reset by peer: socket write error
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:189)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:231)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:345)
at oracle.jdbc.driver.OracleConnection.close(OracleConnection.java:1476)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:474)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:191)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept

得连接的方法是:

public static Connection getConnection() throws SQLException {
Connection conn = null;
try {
conn = ds.getConnection();

} catch (Exception e) {
ds.setPreferredTestQuery("select sysdate from dual");
conn = ds.getConnection();
return conn;
}

return conn;
}

ds就是数据源,猫启动的时候就把它初始化了。

AuthoDaoImpl.java:158 ResultSet rs = stmt.executeQuery(rsql.toString());

所有的connection,statement,resultset,每次用完都在finally关闭了的。报错报的莫名其妙的!!!
...全文
351 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cy729215495 2009-09-28
  • 打赏
  • 举报
回复
zhen tmd 垃圾c3p0.
cy729215495 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]
你那段代码写得就有问题,SQLException 已经捕获了,还要再抛出么?
[/Quote]
这个地方我改了,依然有问题。。。
  • 打赏
  • 举报
回复
你那段代码写得就有问题,SQLException 已经捕获了,还要再抛出么?

把你怎么用的代码贴出来看看
美人心计1999 2009-09-26
  • 打赏
  • 举报
回复
顶一下
lin364653705 2009-09-26
  • 打赏
  • 举报
回复
我在使用C3P0的时候,也遇到这个问题,连接都是正常释放的!可能系统比较大些,偶尔会出现这种错误。。。不过连接好像没有受影响,就没有管呢!!
cy729215495 2009-09-26
  • 打赏
  • 举报
回复

恩,这确实是个错误



import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class CommonDao {
protected static ComboPooledDataSource ds;
public static Connection getConnection() {
Connection conn = null;
try {
conn = ds.getConnection();

} catch (Exception e) {
ds.setPreferredTestQuery("select sysdate from dual");
try {
conn = ds.getConnection();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return conn;
}

return conn;
}

public ComboPooledDataSource getDs() {
return ds;
}
public void setDs(ComboPooledDataSource ds) {
this.ds = ds;
}
public int execUpdate(String sql) throws Exception {
Connection conn = ds.getConnection();
try {
Statement stmt = conn.createStatement();
try {
return stmt.executeUpdate(sql);
} finally {
stmt.close();
}
} finally {
conn.close();
}
}

}



ds在容器启动的时候就注入了值。一般的dao类就继承CommonDao,就能得到Connection;



public ArrayList method() throws Exception {
Connection conn = this.getConnection();
try {
StringBuilder rsql = new StringBuilder(
"SELECT * from dual");

Statement stmt = conn.createStatement();
try {
ResultSet rs = stmt.executeQuery(rsql.toString());
try {
ArrayList<ModulesBean> beans = new ArrayList<ModulesBean>();

while (rs.next()) {
...... beans.add(bean);
}

return beans;
} finally {
rs.close();

}

} finally {
stmt.close();

}

} finally {
conn.close();
}

}


这种写法,不存在会有哪个资源没有关闭的问题。

81,122

社区成员

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

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