如何为com.ibm.as400.access.AS400连接执行保持活动

时间:2019-02-06 23:11:17

标签: jdbc connection-pooling ibm-midrange tomee

我有一个在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>

0 个答案:

没有答案