Java 如何验证从连接池返回的连接对象?

Java 如何验证从连接池返回的连接对象?,java,jdbc,jboss,connection-pooling,Java,Jdbc,Jboss,Connection Pooling,我正在对JBOSS AS中配置的数据源进行jndi查找。代码如下 initialContext=新的initialContext(道具) 数据源= (数据源)initialContext.lookup(bundle.getString(“jndiName”) connection=dataSource.getConnection() 这段代码放在servlet的doPost中。我也很安全地打电话给你 连接。关闭() 使用连接对象后 我的数据源配置有以下条目 <min-pool-size&g

我正在对JBOSS AS中配置的数据源进行jndi查找。代码如下

initialContext=新的initialContext(道具)

数据源= (数据源)initialContext.lookup(bundle.getString(“jndiName”)

connection=dataSource.getConnection()

这段代码放在servlet的doPost中。我也很安全地打电话给你

连接。关闭()

使用连接对象后

我的数据源配置有以下条目

<min-pool-size>1</min-pool-size>
<max-pool-size>1</max-pool-size>
1
1.
根据我对连接池的理解,每次我向servlet发出请求时,
datasource.getConnection()
call都会返回相同的连接对象(因为我已将最小和最大池大小指定为1,并且调用close不会完全关闭DB连接)


现在如何验证返回的是同一个连接对象?

您实际上无法确定它是否是同一个连接。它可能与数据库连接有问题,所以必须创建另一个连接。为什么要验证连接?也许您可以保存哈希值并比较它们?

为什么要验证连接对象?一种方法是在本地缓存对象,然后对照缓存的值进行检查。只是确保没有每次都创建到DB的连接。我找不到检查池是否启用或禁用的方法1方法是检查数据库服务器以查看创建了多少连接。由于连接池维护物理连接并为每个请求分发(通常是新的)逻辑连接(代理或自定义连接实现),如果不借助反射、数据源或特定于数据库的技巧来验证物理连接的标识,就无法验证它是否是完全相同的连接。。我通过查询打开的连接数来检查sql server。即使在调用connection.close()和第二次调用datasource.getConnection()之后,仍然保持1(对于我的配置设置)。我的问题已经解决。只是为了确保不是每次都创建到DB的连接。我找不到检查池是否启用或禁用的方法。当最小池大小设置为0时,它会禁用池吗?如果您只想看到这一点,请尝试打开连接池工具(可能您正在使用DBCP)的日志记录,并查看日志中发生的情况。如果将最小池大小设置为0,在一段时间的不活动之后,它将关闭与数据库的所有连接。比较哈希值可能不起作用,请参阅我对问题本身的评论