В настоящее время мы переносим приложения для работы на сервере Liberty (8.5.5.9). Мы обнаружили, что соединения между сервером приложений и базой данных иногда прерываются брандмауэром, поскольку они простаивают в течение длительного периода времени. Когда это произойдет, в следующем HTTP-запросе приложение получит одно из этих сломанных соединений.В пуле соединений WAS Liberty я могу проверить соединения по заимствованию?
Раньше мы использовали DBCP Apache Commons для управления пулом соединений. Один из configuration parameters in a DBCP conneciton pool - «testOnBorrow», который не позволяет приложению получить одно из этих плохих соединений.
Есть ли такой параметр конфигурации в источнике данных, управляемом Liberty?
До сих пор, мы настроили наш источник данных, как это:
<dataSource jndiName="jdbc/ora" type="javax.sql.DataSource">
<properties.oracle
user="example" password="{xor}AbCdEfGh123="
URL="jdbc:oracle:thin:@example.com:1521:mydb"
/>
<connectionManager
minPoolSize="3" maxPoolSize="10" maxIdleTime="10m"
purgePolicy="ValidateAllConnections"
/>
<jdbcDriver id="oracle-driver" libraryRef="oracle-libs"/>
</dataSource>
purgePolicy в настоящее время устанавливается для проверки всех соединений, если один плохой один найден (например, ночью, когда все соединения были простаивает в течение длительного время). Но все это предотвращает последовательное передачу нескольких плохих соединений приложениям.
Одним из вариантов в connectionManager было бы установить ageTimout = "20m", чтобы автоматически удалять соединения, которые достаточно стары, чтобы уже были прерваны брандмауэром. Однако это также приведет к прекращению соединений, которые были недавно использованы (что предотвращает их нарушение).
Я пропустил что-то очевидное здесь? Спасибо!
Я бы предложил использовать ageTimeout, так как много брандмауэров не заботятся о том, используется ли соединение или нет, и просто убивайте соединения, которые открыты в течение длительного времени. – Gas