Как выполнить keep-alive для соединения com.ibm.as400.access.AS400 - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть веб-приложение, работающее на сервере Tomee.Это приложение имеет код, который выполняет соединение jdbc с IBM I и запускает удаленный вызов команды и / или sql для него.Приложение использует пул соединений Tomcat для управления соединениями JDBC.Как вы знаете, в зависимости от того, что приложение хочет сделать, соединение IBM I jdbc выполнит соединение с другим заданием порт / сервер в IBM I. Например, для выполнения удаленного вызова команды оно подключится к ас-Порт rmtcmd-s, и для запуска sql он подключится к порту as-database-s.Для этого приложения я хочу сохранить не менее 10 незанятых соединений.Чтобы сохранить их работоспособность, я установил для свойства testWhileIdle в файле конфигурации tomee.xml значение true, которое будет запускать пул соединений для выполнения фиктивной проверки SQL через регулярный интервал.Это прекрасно работает с подключением as-database-s, поскольку фиктивная проверка sql попадает на этот порт.Но я не могу сказать то же самое для порта 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>
...