2016-07-19 3 views
1

현재 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"을 설정하는 것입니다. 그러나 이렇게하면 최근에 사용 된 연결 (방화벽이 방화벽을 손상시키는 것을 방지 함)도 종료됩니다.

내가 여기에 뭔가 분명한 것을 놓치고 있습니까? 감사합니다.

+1

많은 방화벽이 연결이 사용되는지 여부에 상관 없으며 오랜 시간 동안 열려있는 연결을 강제 종료하므로 agedTimeout을 사용하는 것이 좋습니다. – Gas

답변

2

이 시나리오에서는 이미 사용하고있는 maxIdleTime을 사용하고 있지만 minPoolSize을 0으로 줄이거 나 기본값을 0으로 설정 했으므로이 시나리오에서는 권장하지 않습니다. maxIdleTime 문서 당

:

maxIdleTime : 이렇게하면 최소 크기 아래 풀을 감소하지 않는 경우 사용되지 않는 또는 유휴 연결이 풀 유지 보수시 폐기 될 수있다, 그 후에 시간. 예를 들어 수영장에서 불과 3 나쁜 연결이있는 경우 유지 보수 스레드가 최소한 아래의 풀 크기를 고려하지 않습니다하지 않기 때문에

당신이 당신의 minPoolSize=3 가지고 있기 때문에, 풀 maintenence은 킥되지 않습니다 그 의사에 따르면. 따라서 minPoolSize=0을 설정하면 maxIdleTime에서이 시나리오에서 예상하는 것처럼 모든 잘못된 연결을 정리할 수 있습니다. 그래서 여기

내가 당신을 위해 제안 최종 구성입니다 :

<dataSource jndiName="jdbc/ora" type="javax.sql.DataSource"> 
    <properties.oracle user="example" password="{xor}AbCdEfGh123=" 
         URL="jdbc:oracle:thin:@example.com:1521:mydb"/> 
    <connectionManager maxPoolSize="10" maxIdleTime="18m"/> 
    <jdbcDriver id="oracle-driver" libraryRef="oracle-libs"/> 
</dataSource> 

maxIdleTime의 값은 방화벽이 20 분 후 연결을 죽이는 것으로 간주하고 제공하기 위해 18 분 후에 정리를 트리거 정리 스레드는 곧 연결될 수있는 연결을 정리하는 데 2 ​​분의 시간을줍니다.

+0

오늘은 광고 된대로 작동하는지 확인하려고합니다. 조언 해 주셔서 감사합니다. –

+0

좋아 보인다 ... 다시 한번 감사드립니다! –

관련 문제