期待更好更稳定的开源FrameWork的出现,让我们一起努力吧!  
日历
<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910
统计
  • 随笔 - 78
  • 文章 - 1
  • 评论 - 29
  • 引用 - 0

导航

常用链接

留言簿(1)

随笔分类

随笔档案(42)

文章档案(37)

相册

搜索

  •  

积分与排名

  • 积分 - 44320
  • 排名 - 1068

最新随笔

最新评论

阅读排行榜

评论排行榜

 

说明:在解决问题的时候,参考了以下文章
http://blog.csdn.net/wuqingyong/archive/2006/09/07/1187293.aspx
http://jayenho.blog.51cto.com/37194/91556
作为对问题的总结,特写本文。


最近总是遇到tomcat的log File报Connection reset的问题,使用的是JNDI的方式来使用DataSource。
Apache Tomcat使用org.apache.naming.factory.DbcpDataSourceFactory作为默认的数据源工厂。


Tomcat的DBCP使用Apache的ObjectPool作为Connection Pool的实现,在构造GenericObjectPool的时候,会生成一个Inner Class Evictor,实现Runnable的接口。如果属性_timeBetweenEvictionRunsMillis > 0,每过_timeBetweenEvictionRunsMillis毫秒后Evictor会调用evict method,检查Object的idle time是否大于属性_minEvictableIdleTimeMillis毫秒(如果_minEvictableIdleTimeMillis设置为<=0则忽略,使用default value 30分钟),如果是则销毁该Object,否则就激活并进行Validate,然后调用ensureMinIdle method检查确保Connection Pool中的Object个数不小于属性_minIdle。在调用returnObject method把Object放回ObjectPool时候,需要检查该Object是否有效,然后调用PoolableObjectFactory的passivateObject method使Object处于inactive状态,再检查ObjectPool中的对象个数是否小于属性_maxIdle,是则可以把该Object放回到ObjectPool,否则销毁此Object。
 
除此之外,还有几个比较重要的属性,_testOnBorrow,_testOnReturn,_testWhileIdle,这些属性的意思是取得,返回对象,空闲时候是否进行Valiadte,检查对象是否有效。默认都为False,只有把这些属性设为True,再提供_validationQuery语句就可以保证DBCP始终有效了,例如,Oracle中就完全可以使用select 1 from dual来进行验证,这里要注意的是,DBCP要求_validationQuery语句查询的Result Set必须为非空。
 
在Tomcat的Server.xml,我们可以看看下面的这个例子:
 
<Resource name="lda/raw"
              type="javax.sql.DataSource"
               password="lda_master"
               driverClassName="oracle.jdbc.driver.OracleDriver"
               maxIdle="30" minIdle="2" maxWait="60000" maxActive="1000"
               testOnBorrow="true" testWhileIdle="true" validationQuery="select 1 from dual"
               username="lda_master" url="jdbc:oracle:thin:@192.160.100.107:15537:lcststd"/>
 这样的话,就可以避免产生Connection Reset的错误了.
这样一来,就能够解决Connect Reset的问题了。刚才说了,其实很多App Server都会有相应的配置地方,只是大型的服务器正好提供了Admin Console,上面可以显式的配置Connection Pool,也有明显的属性选择,这里就不一一详述了,都是眼见的功夫。


posted on 2008-12-23 10:19 BlueSky_itwangxinli 阅读(4524) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © BlueSky_itwangxinli Powered by: 博客园 模板提供:沪江博客