현재 Liberty 서버 (8.5.5.9)에서 실행되도록 응용 프로그램을 마이그레이션 중입니다. 우리는 앱 서버와 데이터베이스 간의 연결이 방화벽에 의해 때때로 종료된다는 것을 발견했습니다. 오랜 시간 동안 유휴 상태 였기 때문입니다. 이 경우 다음 HTTP 요청에서 응용 프로그램은 깨진 연결 중 하나를 수신합니다.WAS Liberty 연결 풀에서 빌려 오는 연결을 확인할 수 있습니까?
이전에는 Apache Pools DBCP를 사용하여 연결 풀을 관리했습니다. 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의 한 옵션은 방화벽에서 이미 종료 된 것으로 오래된 연결을 자동으로 제거하도록 agedTimout = "20m"을 설정하는 것입니다. 그러나 이렇게하면 최근에 사용 된 연결 (방화벽이 방화벽을 손상시키는 것을 방지 함)도 종료됩니다.
내가 여기에 뭔가 분명한 것을 놓치고 있습니까? 감사합니다.
많은 방화벽이 연결이 사용되는지 여부에 상관 없으며 오랜 시간 동안 열려있는 연결을 강제 종료하므로 agedTimeout을 사용하는 것이 좋습니다. – Gas