`
oxidy
  • 浏览: 162782 次
  • 性别: Icon_minigender_1
  • 来自: 吉林长春
社区版块
存档分类
最新评论

Xapool和oracle使用的错误分析

阅读更多

由于前期使用中的发现XAPool这个包里面有类老是报连接方面的错误,于是在参考了一篇网上的文章后把 xapool和包装连接的配置都去掉了,结果导致的是多数据源的事务根本无法实现,后来仔细想想,觉得很诡异,xapool就是jotm实现多数据源事务 的关键所在,怎么能不用?

于是仔细研究了下,发现很多问题,首先,JOTM需要的依赖--CAROL包没有JDK1.5的版本,需要自己下载源码并编译成新的ow_carol-all.jar
Xapool倒是有JDK1.5的版本xapool-1.5.0,但是跑起来老是报错,于是去下了xapool的源文件,发现居然源码都不能编译通过,还 有JDK1.5的保留字在里面,真不知道作者是怎么发布出1.5.0的.于是自己改掉关键字,并修补了一些检查不太严格的检测,并重新打了个版本.结果跑 起来还是会报错,不过是oracle报游标用尽的错误.

搜了一把就发现原来是Oracle9i有名的内存溢出bug导致:Xapool对PreparedStatement进行了Cache,同时Oracle 有一个出名的内存漏洞,PreparedStatement使用之后必须关闭,如果不关闭连续进行SQL查询会造成前面SQL的游标不能释放;

参考了网上的修改方案(xapool1.4的),又自己研究了半天,最后终于成功了,Xapool1.5的修改如下:
修改StandardConnectionPoolDataSource类的public static final int DEFAULT_PREPAREDSTMTCACHESIZE = 0,(当然也可以用配置的方式来注入)
这样就关闭了PreparedStatement的Cache,而且也不会造成什么1.4中关闭连接时的异常等等.

最后根据实际情况,设置好dataSourceXXX这几个bean的lifeTime,sleepTime,maxSize,checkLevelObject属性(具体意义和设置方法可以参考网上的说明 )
就终于可以正式使用了,测试了下,情况还不错:)

 

最近有很多朋友都说 他们配置不成功,可能是某些细节造成的吧,因为这套系统现在正在TCL总部顺利的运转着,所有我相信这个方法还是可行的,如果大家有什么问题需要我帮助, 我很乐意帮忙,有人说要我自己改的xapool1.5,因为再我改好后不久,1.6就已经发布了,所有我就没有贴出来了,有问题的朋友可以直接留言我你的 msn,我会加你的.

 

转载地址为:http://www.blogjava.net/hunteva/archive/2009/01/20/62936.html

分享到:
评论
1 楼 howesen 2012-04-20  
请问:StandardXAConnectionHandle:prepareStatement should not be used outside an EJBServer这个异常是怎么解决的呢?我用的是XAPool 1.6-bate版的

相关推荐

Global site tag (gtag.js) - Google Analytics