首页 > 其他分享 >XApool连接池报空指针错误解决

XApool连接池报空指针错误解决

时间:2023-08-28 11:32:46浏览次数:29  
标签:jdbc java XApool enhydra GenericPool pool 报空 org 连接池


at org.enhydra.jdbc.pool.GenericPool.getFromPool(GenericPool.java:200) 
at org.enhydra.jdbc.pool.GenericPool.checkOut(GenericPool.java:351) 
at org.enhydra.jdbc.pool.StandardPoolDataSource.getConnection(StandardPoolDataSource.java:194) 
at org.enhydra.jdbc.pool.StandardPoolDataSource.getConnection(StandardPoolDataSource.java:164) 
at my.jotm.test.Client.getConnection(Client.java:63) 
java.sql.SQLException: SQLException in StandardPoolDataSource:getConnection exception: java.sql.SQLException: SQLException in  
StandardPoolDataSource:getConnection no connection available java.lang.NullPointerException

 
发现这是XApool1.5的一个bug

解决方法:


--- xapool/org/enhydra/jdbc/pool/GenericPool.java-1.13 2005-06-14 21:57:10.756790600 -0500 +++ xapool/org/enhydra/jdbc/pool/GenericPool.java 2005-06-15 13:11:09.601072300 -0500 @@ -189,6 +189,12 @@ o = (GenerationObject) e.nextElement(); life = (Long) unlocked.get(o); + if (life == null) { + // Fix for #303462; note that this fixes the problem, but Enumeration's on Hashtable's + // are by definition somewhat unpredictable; a more robust fix may be in order + log.debug("GenericPool:getFromPool fix for #303462 encountered"); + continue; + } unlocked.remove(o); // In any case the object will be removed. // Prevents others accessing the object while we are


 

 

下载xapool源码包,然后在org.enhydra.jdbc.pool.GenericPool中,找到life = (Long) unlocked.get(o); 代码

之后在下面加入:

 

if (life == null)  continue;

 

之后重新编译打包即可。

 

注:xapool1.5是在jdk1.4的版本下编译的,所以记得在打包修改时,将IDE的J2SE版本改为1.4。

 

 

以下提供我已经编译好的jar包,使用中如果看到bad version的错误,请自行编译。

标签:jdbc,java,XApool,enhydra,GenericPool,pool,报空,org,连接池
From: https://blog.51cto.com/u_16237557/7261772

相关文章

  • StandardXAPoolDataSource的CheckLevelObject属性
    调用StandardPoolDataSource或者StandardXAPoolDataSource的setCheckLevelObject(int)方法设置连接检查级别,参数取值如下:0:不检查1:对unlocked池中获取的连接进行Closed检查2:对unlocked池中获取的连接进行sql测试,需要设置setJdbcTestStmt(TestSQL)......
  • XAPool的参数设置
    sleepTime:PoolKeeper检测时间间隔lifeTime:连接生命周期(上次访问时间-当前时间)deadLockMaxWait(:超过最大连接之后的调用getConnection的等待时间deadLockRetryWait:超过最大连接之后的调用getConnection等待,在等待中重试的时间间隔maxSize:连接池的容量deald-lock-max-wait和dead-......
  • SpringBoot内嵌Tomcat连接池分析
    目录1Tomcat连接池1.1简介1.2架构图1.2.1JDK线程池架构图1.2.2Tomcat线程架构1.3核心参数1.3.1AcceptCount1.3.2MaxConnections1.3.3MinSpareThread/MaxThread1.3.4MaxKeepAliveRequests1.3.5ConnectionTimeout1.3.6KeepAliveTimeout1.4核心内部线程1.4.1Acceptor1.......
  • gRPC 客户端调用服务端需要连接池吗?
    发现的问题在微服务开发中,gRPC的应用绝对少不了,一般情况下,内部微服务交互,通常是使用RPC进行通信,如果是外部通信的话,会提供https接口文档对于gRPC的基本使用可以查看文章gRPC介绍对于gRPC,我们需要基本知道如下的一些知识点:gRPC的基本四种模式的应用场景请求响应......
  • C3P0连接池配置
    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection和Statement池的DataSources对象。<c3p0-config><default-config><!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3--><propert......
  • 深入研究高性能数据库连接池的实现原理与优化策略
    在现代的后端应用开发中,数据库连接池是提高性能和可伸缩性的关键组件之一。本文将深入探讨数据库连接池的实现原理,涵盖Java和Python示例,并介绍一些常见的连接池优化策略。数据库连接池的作用数据库连接池是一种维护和管理数据库连接的技术,它通过预先创建一组数据库连接,并将这些连接......
  • 解密数据库连接池的奥秘与优化策略
    在后端开发中,数据库是应用程序的核心数据存储和管理部分。为了高效地处理数据库连接,提升应用性能,数据库连接池成为了不可或缺的技术。本文将深入探讨数据库连接池的工作原理,并介绍一些优化策略,帮助你更好地理解和使用数据库连接池。数据库连接池的背景与作用数据库连接是有代价的资......
  • 数据库连接池为什么要用threadlocal呢?不用会怎样?
    数据库连接池使用ThreadLocal的主要原因是为了保证每个线程都有其独立的数据库连接,这样可以避免多个线程之间的连接干扰,提高系统的稳定性和性能。为什么使用ThreadLocal?线程安全:ThreadLocal可以为每个线程提供一个独立的数据库连接,确保多个线程操作数据库时不会出现资源竞争的......
  • Druid连接池更换Guess数据源
    目录1.遇到的问题2.更换数据源操作步骤1.添加pom依赖2.更改jdbc.properties3.初始化Druid连接池1.遇到的问题工作中有个db国产化的需求,需要在一个老项目中把DB从mysql更换为openGuess,将对应的驱动和Druid数据源改造后启动程序报错如下:java.lang.IllegalStateException:dbTy......
  • 【Java 初阶】Java 连接池 C3P0
    ......