- 浏览: 966923 次
- 性别:
- 来自: 江西上饶
-
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
在单元测试测试环境下主要参数两个错误信息:
1.java.lang.Exception: DEBUG STACK TRACE for PoolBackedDataSource.close().
这是一个异常信息,在com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.close(AbstractPoolBackedDataSource.java:417)
方法中可以看到
public synchronized void close()
{
resetPoolManager();
is_closed = true;
C3P0Registry.markClosed(this);
if (Debug.DEBUG && Debug.TRACE == Debug.TRACE_MAX && logger.isLoggable(MLevel.FINEST))
{
logger.log(MLevel.FINEST,
this.getClass().getName() + '@' + Integer.toHexString( System.identityHashCode( this ) ) +
" has been closed. ",
new Exception("DEBUG STACK TRACE for PoolBackedDataSource.close()."));
}
}
if (Debug.DEBUG && Debug.TRACE == Debug.TRACE_MAX && logger.isLoggable(MLevel.FINEST))
这句判断中,只要log的debug级别打开,就可以确定会抛出这个Exception(奇怪的设计)。所以这个异常想要不出现,除了改log级别,没想到其他方式。
2.DEBUG -- CLOSE BY CLIENT STACK TRACE
[junit] java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
[junit] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:566)
[junit] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234)
[junit] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:989)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool.access$100(BasicResourcePool.java:32)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool$5.run(BasicResourcePool.java:1174)
c3p0的配置如下
<!-- 数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${connection.driver_class}" />
<property name="jdbcUrl" value="${jdbc.connection.url}" />
<property name="idleConnectionTestPeriod"
value="${jdbc.pool.c3p0.idle_connection_test_period}" />
<property name="preferredTestQuery" value="${jdbc.pool.c3p0.preferred_test_query}" />
<property name="maxIdleTime" value="${jdbc.pool.c3p0.max_idle_time}" />
<property name="properties">
<props>
<prop key="user">${jdbc.connection.username}</prop>
<prop key="password">${jdbc.connection.password}</prop>
<prop key="c3p0.acquire_increment">${jdbc.pool.c3p0.acquire_increment}</prop>
<prop key="c3p0.max_size">${jdbc.pool.c3p0.max_size}</prop>
<prop key="c3p0.min_size">${jdbc.pool.c3p0.min_size}</prop>
</props>
</property>
</bean>
这里原因主要和<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
这的destroy-method方法有关系。
Spring在读取这个配置文件以后,需要根据这些信息来实例化一些类,然后内部再根据中间的那些配置信息来实际构造数据源。
那么自然就不能保证这里的ComboPooledDataSource数据源一定是可用的,也不能保证close方法一定能关闭连接,对吧?Spring本身不能检查这个类是否真实有效,毫无Bug。实际上呢,也检查不了。同样的,close方法是否有效,也需要进行检查。
java.sql.Connection
public interface Connection extends Wrapper
任何一个JDBC数据库连接的实现类都应该实现这个接口的全部方法。比如,close。API里的描述是,立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
虽然API规定了close是关闭连接释放资源的。但这只是你接口的一厢情愿。也许人家实现厂家觉得close方法不够帅,要改成closeConnection。那。。。Spring总不好傻傻的去死扣close方法来关闭连接吧?虽然这方法必须实现,但是可没说一定要有内容啊。如果是空方法呢?所以有了destroy-method这个配置项的出现。
总结:
当不能确定destory-method的情况下,把该项删除,由程序自主选择关闭方法,这样Debug就不会报错了.
摘自http://csumissu.iteye.com/blog/1079576
源码中NewPooledConnection
的close方法有
if ( cause == null )
{
this.invalidatingException = NORMAL_CLOSE_PLACEHOLDER;
if ( logger.isLoggable( MLevel.FINEST ) )
logger.log( MLevel.FINEST, this + " closed by a client.", new Exception("DEBUG -- CLOSE BY CLIENT STACK TRACE") );
logCloseExceptions( null, closeExceptions );
if (closeExceptions.size() > 0)
throw new SQLException("Some resources failed to close properly while closing " + this);
}
else
{
this.invalidatingException = cause;
if (Debug.TRACE >= Debug.TRACE_MED)
logCloseExceptions( cause, closeExceptions );
else
logCloseExceptions( cause, null );
}
这几句,可以看出来,close方法被调用,就一定有这个DEBUG级别的异常信息产生。
destroy-method="close"去除之后,容器(数据源管理器)本身不会再主动调用释放资源的方法,个人猜测,你产生的原因有可能是因为你虽然修改了配置,但是并没有反应到最后运行时候的配置文件中,或者其他地方依然再进行过主动释放资源并调用清理资源的方法。
1.java.lang.Exception: DEBUG STACK TRACE for PoolBackedDataSource.close().
这是一个异常信息,在com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.close(AbstractPoolBackedDataSource.java:417)
方法中可以看到
public synchronized void close()
{
resetPoolManager();
is_closed = true;
C3P0Registry.markClosed(this);
if (Debug.DEBUG && Debug.TRACE == Debug.TRACE_MAX && logger.isLoggable(MLevel.FINEST))
{
logger.log(MLevel.FINEST,
this.getClass().getName() + '@' + Integer.toHexString( System.identityHashCode( this ) ) +
" has been closed. ",
new Exception("DEBUG STACK TRACE for PoolBackedDataSource.close()."));
}
}
if (Debug.DEBUG && Debug.TRACE == Debug.TRACE_MAX && logger.isLoggable(MLevel.FINEST))
这句判断中,只要log的debug级别打开,就可以确定会抛出这个Exception(奇怪的设计)。所以这个异常想要不出现,除了改log级别,没想到其他方式。
2.DEBUG -- CLOSE BY CLIENT STACK TRACE
[junit] java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
[junit] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:566)
[junit] at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234)
[junit] at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:989)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool.access$100(BasicResourcePool.java:32)
[junit] at com.mchange.v2.resourcepool.BasicResourcePool$5.run(BasicResourcePool.java:1174)
c3p0的配置如下
<!-- 数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="${connection.driver_class}" />
<property name="jdbcUrl" value="${jdbc.connection.url}" />
<property name="idleConnectionTestPeriod"
value="${jdbc.pool.c3p0.idle_connection_test_period}" />
<property name="preferredTestQuery" value="${jdbc.pool.c3p0.preferred_test_query}" />
<property name="maxIdleTime" value="${jdbc.pool.c3p0.max_idle_time}" />
<property name="properties">
<props>
<prop key="user">${jdbc.connection.username}</prop>
<prop key="password">${jdbc.connection.password}</prop>
<prop key="c3p0.acquire_increment">${jdbc.pool.c3p0.acquire_increment}</prop>
<prop key="c3p0.max_size">${jdbc.pool.c3p0.max_size}</prop>
<prop key="c3p0.min_size">${jdbc.pool.c3p0.min_size}</prop>
</props>
</property>
</bean>
这里原因主要和<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
这的destroy-method方法有关系。
Spring在读取这个配置文件以后,需要根据这些信息来实例化一些类,然后内部再根据中间的那些配置信息来实际构造数据源。
那么自然就不能保证这里的ComboPooledDataSource数据源一定是可用的,也不能保证close方法一定能关闭连接,对吧?Spring本身不能检查这个类是否真实有效,毫无Bug。实际上呢,也检查不了。同样的,close方法是否有效,也需要进行检查。
java.sql.Connection
public interface Connection extends Wrapper
任何一个JDBC数据库连接的实现类都应该实现这个接口的全部方法。比如,close。API里的描述是,立即释放此 Connection 对象的数据库和 JDBC 资源,而不是等待它们被自动释放。
虽然API规定了close是关闭连接释放资源的。但这只是你接口的一厢情愿。也许人家实现厂家觉得close方法不够帅,要改成closeConnection。那。。。Spring总不好傻傻的去死扣close方法来关闭连接吧?虽然这方法必须实现,但是可没说一定要有内容啊。如果是空方法呢?所以有了destroy-method这个配置项的出现。
总结:
当不能确定destory-method的情况下,把该项删除,由程序自主选择关闭方法,这样Debug就不会报错了.
摘自http://csumissu.iteye.com/blog/1079576
评论
2 楼
liyixing1
2013-12-13
793059909 写道
destroy-method="close"这一行去除了,还是报错:
[2013-12-06 11:06:21,715] [C3P0PooledConnectionPoolManager[identityToken->2tl0n98y1iwg7cbdzzq7a|719f1f]-HelperThread-#2] DEBUG - com.mchange.v2.c3p0.impl.NewPooledConnection@484c6b closed by a client.
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:646)
at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:259)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:619)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1024)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)
[2013-12-06 11:06:21,715] [C3P0PooledConnectionPoolManager[identityToken->2tl0n98y1iwg7cbdzzq7a|719f1f]-HelperThread-#2] DEBUG - com.mchange.v2.c3p0.impl.NewPooledConnection@484c6b closed by a client.
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:646)
at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:259)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:619)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1024)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)
源码中NewPooledConnection
的close方法有
if ( cause == null )
{
this.invalidatingException = NORMAL_CLOSE_PLACEHOLDER;
if ( logger.isLoggable( MLevel.FINEST ) )
logger.log( MLevel.FINEST, this + " closed by a client.", new Exception("DEBUG -- CLOSE BY CLIENT STACK TRACE") );
logCloseExceptions( null, closeExceptions );
if (closeExceptions.size() > 0)
throw new SQLException("Some resources failed to close properly while closing " + this);
}
else
{
this.invalidatingException = cause;
if (Debug.TRACE >= Debug.TRACE_MED)
logCloseExceptions( cause, closeExceptions );
else
logCloseExceptions( cause, null );
}
这几句,可以看出来,close方法被调用,就一定有这个DEBUG级别的异常信息产生。
destroy-method="close"去除之后,容器(数据源管理器)本身不会再主动调用释放资源的方法,个人猜测,你产生的原因有可能是因为你虽然修改了配置,但是并没有反应到最后运行时候的配置文件中,或者其他地方依然再进行过主动释放资源并调用清理资源的方法。
1 楼
793059909
2013-12-06
destroy-method="close"这一行去除了,还是报错:
[2013-12-06 11:06:21,715] [C3P0PooledConnectionPoolManager[identityToken->2tl0n98y1iwg7cbdzzq7a|719f1f]-HelperThread-#2] DEBUG - com.mchange.v2.c3p0.impl.NewPooledConnection@484c6b closed by a client.
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:646)
at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:259)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:619)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1024)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)
[2013-12-06 11:06:21,715] [C3P0PooledConnectionPoolManager[identityToken->2tl0n98y1iwg7cbdzzq7a|719f1f]-HelperThread-#2] DEBUG - com.mchange.v2.c3p0.impl.NewPooledConnection@484c6b closed by a client.
java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:646)
at com.mchange.v2.c3p0.impl.NewPooledConnection.closeMaybeCheckedOut(NewPooledConnection.java:259)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:619)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:1024)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:648)
发表评论
-
Spring 定时任务,cron表达式,@Scheduled cron表达式
2016-04-25 15:48 5312一个cron表达式有至少6 ... -
spring mvc list
2015-12-14 10:28 1297我使用这样无法传入 @requestMapping(" ... -
Unable to locate Spring NamespaceHandler for XML schema namespace
2015-09-23 14:00 2337org.springframework.beans.facto ... -
关于使用s.url jstl的上下文
2015-08-16 13:28 934比如 [@s.url '/'/]index.html?cote ... -
Spring 属性占位符配置器 PropertyPlaceholderConfigurer
2015-08-02 12:43 2098<!-- 属性配置文件读 ... -
FactoryBean接口
2014-09-30 14:05 917实现了FactoryBean接口的bean不是简单的一个bea ... -
运行swing等可视化程序
2014-03-26 14:55 888Ant中调用的时候,总是一闪而过。 需要添加 <java ... -
国际化之MessageSourceAware和MessageSourceAccessor
2014-01-06 23:13 2870先看接口MessageSourceAware 该接口的注释中 ... -
spring 惯例优先原则
2013-07-22 09:46 1227惯例优先原则(convention over configur ... -
ant path匹配
2013-07-22 09:40 2187spring和ant path实现相关的主要类有两个 org. ... -
springmvc action方法中参数具有@ModelAttribute与不具有的区别
2012-12-14 09:36 4136在springmvc的参数解析中,发现具有@ModelAttr ... -
util包
2012-12-05 13:50 1124spring的util基本上都在springframework ... -
url,请求相关帮助类UrlPathHelper
2012-11-29 11:18 2539org.springframework.web.util.Ur ... -
整站国际化方案
2012-11-28 17:46 1122当前常见的实现方式,主要由两种方案实现 1.通过locale ... -
自定义任务
2012-11-21 22:33 1176<!-- 代码覆盖率任务定义,classpathref直 ... -
copy的时候,保持原有的目录结构
2012-11-21 17:31 1844flatten:用于指定是否需要复制目录,如果为true代表把 ... -
spring的三种注入方式
2012-11-20 17:30 18811.通过bean的property子元 ... -
给ant指定内存
2012-02-14 12:40 1243Windows操作系统,在运行ant的bat脚本文件: set ... -
spring AnnotationUtils 注解工具
2011-12-08 11:27 1316spring AnnotationUtils 注解工具 -
GenericCollectionTypeResolver,用于获取list或者map等元素的类型
2011-12-07 16:17 1323GenericCollectionTypeResolver,用 ...
相关推荐
在给定的"**C3P0连接池jar包.zip**"中包含的"c3p0-0.9.5.2.jar"是C3P0的一个版本,用于解决特定的问题,例如"DEBUG -- CLOSE BY CLIENT STACK TRACE"。 这个错误信息"DEBUG -- CLOSE BY CLIENT STACK TRACE"通常...
- bugfix: close images on exit - SB16 - converted the sound output module stuff to the new 'soundmod' plugin - SF patches applied [3164945] hack to compile under WIN64 by Darek Mihocka and ...
DLL: Windows: Renesas RX: When using FINE interface and disabling ongoining debug mode on debug session close, it could happen that a thread was not exited gracefully, causing handle leaks. Fixed. DLL...
data to the client. If your application's output exceeds this setting, PHP ; will send that data in chunks of roughly the size you specify. ; Turning on this setting and managing its maximum buffer ...
Fixed several issues where minimizing a window and then close it would hang CE Fixed file scanning Fixed crashes when editing memory in some some emulators Additions and changes: Text editor ...
RaptorDB starts off by loading the page list and it is good to go from there and pages are loaded on demand, based on usage. Page Splits In the event of page getting full and reaching the ...