我有一个在tomee服务器上运行的Web应用程序。该应用程序具有执行到IBM I的jdbc连接并在其上运行远程命令调用和/或sql的代码。该应用程序利用tomcat连接池来管理jdbc连接。如您所知,根据应用程序要执行的操作,IBM I jdbc连接将执行到IBM I上不同端口/服务器作业的连接。例如,要进行远程命令调用,它将连接到as- rmtcmd -s端口,并运行sql,它将连接到as-database -s端口。对于此应用程序,我希望至少保留10个空闲连接。为使它们保持活动状态,我已将tomee.xml配置文件中的testWhileIdle属性设置为true,这将触发连接池定期执行虚拟sql验证。由于虚拟sql验证已击中此端口,因此与as-database-s的连接可以正常工作。但是对于as-rmtcmd-s端口,我不能说相同的话。连接池实际上没有开箱即用的设置,它将使它执行虚拟远程命令调用来保持连接有效。因此,过一会儿,那些闲置的as-rmtcmd-s连接将变得陈旧,并导致应用程序尝试使用它们时失败。有没有一种方法可以解决IBM I系统独有的问题?
下面是tomee.xml的完整配置设置
<Resource id="jdbc/MyIBMI" type="javax.sql.DataSource">
alternateUsernameAllowed = true
defaultAutoCommit = true
ignoreDefaultValues = false
initialSize = 0
jdbcDriver = com.ibm.as400.access.AS400JDBCDriver
jdbcUrl = jdbc:as400://MyIBMI;secure=true;naming=system;errors=full;prompt=false;libraries=*LIBL;timeFormat=iso;dateFormat=iso;dateSeparator=-
jtaManaged = false
validationQuery = select 1 from sysibm/sysdummy1
maxActive = 100
maxIdle = 50
maxWaitTime = 10000 millisecond
minEvictableIdleTime = 3 minutes
timeBetweenEvictionRuns = 180000
minIdle = 10
numTestsPerEvictionRun = 50
testOnBorrow = false
testWhileIdle = true
validationInterval = 300000
</Resource>