Proxool Problem getting connection java.lang.IndexOutOfBoundsException(bug)

问题描述:获取数据库连接时,数组下标越界

[ERROR] [pool-88-thread-3] [o.l.p.ConnectionPool:getConnection:240] Problem getting connection
java.lang.IndexOutOfBoundsException: Index: 51, Size: 50
        at java.util.ArrayList.rangeCheck(ArrayList.java:635) ~[?:1.7.0_80]
        at java.util.ArrayList.get(ArrayList.java:411) ~[?:1.7.0_80]
        at org.logicalcobwebs.proxool.util.FastArrayList.get(FastArrayList.java:475) ~[proxool-0.9.0RC3.jar:?]
        at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:190) [proxool-0.9.0RC3.jar:?]
        at org.logicalcobwebs.proxool.ProxoolDataSource.getConnection(ProxoolDataSource.java:97) [proxool-0.9.0RC3.jar:?]
        at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:85) [spring-orm-4.1.2.RELEASE.jar:4.1.2.RELEASE]
        at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74) [hibernate-core-3.6.9.Final.jar:3.6.9.Final]
        at com.sun.proxy.$Proxy86.setReadOnly(Unknown Source) [?:?]
        at org.springframework.jdbc.datasource.DataSourceUtils.prepareConnectionForTransaction(DataSourceUtils.java:155) [spring-jdbc-4.1.2.RELEASE.jar:4.1.2.RELEASE]
        at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:513) [spring-orm-4.1.2.RELEASE.jar:4.1.2.RELEASE]
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) [spring-tx-4.1.2.RELEASE.jar:4.1.2.RELEASE]
        at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:439) [spring-tx-4.1.2.RELEASE.jar:4.1.2.RELEASE]


原因:org.logicalcobwebs.proxool.ConnectionPool类中有一个全局变量标明下一个连接在数组里的下标,如果在回收连接的同时去获取连接的话就会出现这个问题。

目前的解决方案:
在org.logicalcobwebs.proxool.ConnectionPool类中的方法getConnection和expireConnection方法加同步,如果不想考虑性能,就直接加方法上吧,如果要考虑,就自己去读读源码,可以细化到for循环里。


建议不要再使用Proxool


http://bbs.csdn.net/topics/360106398

http://blog.csdn.net/lovesqcc/article/details/12023403

Proxool作者证实这个bug : https://sourceforge.net/p/proxool/mailman/message/23383678/

其他数据库连接池:http://blog.csdn.net/qq_31125793/article/details/51241943


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值