연결 라이프사이클

ManagedConnection 오브젝트는 항상 세 개의 상태(DoesNotExist, InFreePool 또는 InUse) 중 하나입니다.

연결이 작성되기 전에는 DoesNotExist 상태여야 합니다. 연결이 작성된 후에는 애플리케이션에 할당되었는지 여부에 따라 연결은 InUse 또는 InFreePool 상태일 수 있습니다.

이 세 상태는 상태 전이입니다. 이 상태 전이는 보호 조건으로 제어됩니다. 보호 조건은 true일 경우 상태 전이가 다른 올바른 상태로 될 수 있는 시기를 표시합니다. 예를 들어, 다음의 경우에만 InFreePool 상태에서 InUse 상태로 상태 전이할 수 있습니다.
  • 애플리케이션이 데이터 소스 또는 연결 팩토리 getConnection() 메소드(getConnection 조건)를 호출했습니다.
  • 일치하는 특성(freeConnectionAvailable 조건)이 있는 풀에서 연결을 사용할 수 있습니다.
  • 및 다음 두 가지 조건 중 하나를 충족하는 경우:
    • getConnection() 요청이 공유 불가능으로 표시된 자원 참조를 대신합니다.
    • getConnection() 요청은 공유 가능으로 표시되었으나 사용 중인 동일한 특성을 가진 사용 중인 공유 가능한 연결이 없는 자원 참조를 대신합니다.
이 상태 전이 설명은 다음과 같습니다.
InFreePool > InUse:
getConnection AND
freeConnectionAvailable AND
NOT(shareableConnectionAvailable)
다음은 보호 조건 및 설명 목록입니다.
표 1. 보호 조건. 다음은 보호 조건 및 설명 목록입니다.
조건 설명
ageTimeoutExpired 연결이 ageTimeout 값보다 이전입니다.
close Connection 오브젝트에서 애플리케이션이 close 메소드를 호출합니다.
fatalErrorNotification 연결에 심각한 오류가 있습니다.
freeConnectionAvailable 일치하는 특성을 가진 연결을 사용 가능한 풀에서 사용할 수 있습니다.
getConnection 데이터 소스 또는 연결 팩토리 오브젝트에서의 애플리케이션 호출 getConnection 메소드
markedStale 일반적으로 심각한 오류 알림에 대한 응답으로 연결이 손상된 것으로 표시합니다.
noOtherReferences 연결 관리에 대해서는 하나의 연결 핸들만이 존재하며, 트랜잭션 서비스는 연결 관리에 대한 어떠한 참조도 보유하지 않습니다.
noTx 트랜잭션이 강제로 실행되지 않습니다.
poolSizeGTMin 연결 풀 크기는 최소 풀 크기(최소 연결 수)보다 큽니다.
poolSizeLTMax 풀 크기는 최대 풀 크기(최대 연결 수)보다 작습니다.
shareableConnectionAvailable getConnection() 요청은 공유 가능한 연결을 위한 것이고, 일치하는 특성을 가진 연결은 사용 중이며 공유할 수 있습니다.
TxEnds 트랜잭션이 종료되었습니다.
unshareableConnectionRequest getConnection() 요청은 공유 불가능한 연결을 위한 것입니다.
unusedTimeoutExpired 연결이 사용 가능한 풀에 있으며 사용하지 않음 제한시간 값을 경과해서 사용 중이 아닙니다.

연결 가져오기

여기에서 다루는 첫 번째 전환 세트는 애플리케이션이 데이터 소스 또는 연결 팩토리에서 연결을 요청한 세트입니다. 이 시나리오 중 일부에서 데이터베이스에 대한 새 연결이 작성됩니다. 다른 시나리오에서 이 연결은 연결 풀에서 검색되거나 임의 연결의 다른 요청과 공유될 수 있습니다.
모든 연결은 DoesNotExist 상태에서 라이프사이클을 시작합니다. 애플리케이션 서버가 시작되면 연결 풀이 존재하지 않습니다. 따라서 어떤 연결도 존재하지 않습니다. 첫 번째 연결은 애플리케이션이 첫 번째 연결을 요청할 때까지 작성되지 않습니다. 보호 조건에 따라 필요할 경우 추가 연결이 작성됩니다.
getConnection AND
NOT(freeConnectionAvailable) AND
poolSizeLTMax AND
(NOT(shareableConnectionAvailable) OR
unshareableConnectionRequest)
이 상태 전이는 연결 오브젝트가 다음 조건이 발생하기 전까지 작성되지 않음을 지정합니다.
  • 애플리케이션은 데이터 소스 또는 연결 팩토리에서 getConnection() 메소드를 호출합니다.
  • 사용 가능한 풀(NOT(freeConnectionAvailable))에서 연결을 사용할 수 없습니다.
  • 풀 크기는 최대 풀 크기(poolSizeLTMax)보다 작습니다.
  • 요청이 공유 가능한 연결을 위한 것이고 동일한 공유 특성(NOT(shareableConnectionAvailable))과 함께 이미 사용 중인 공유 가능한 연결이 없는 경우, 요청은 공유 불가능한 연결(unshareableConnectionRequest)을 위한 것입니다.

모든 연결은 DoesNotExist 상태에서 시작되며 애플리케이션이 연결을 요청할 경우에만 작성됩니다. 애플리케이션이 새로운 연결을 요청하면, 해당 풀은 0에서 최대 연결 수까지 증가합니다. 풀은 서버가 시작될 때 최소 연결 수로 작성되지 않습니다.

요청이 공유 가능한 연결을 위한 것이고 동일한 공유 특성을 가진 연결이 이미 애플리케이션에 의해 사용 중이면 연결은 두 개 이상의 연결 요청으로 공유됩니다. 이 경우, 새로운 연결은 작성되지 않습니다. JDBC API 사용자를 위한 이 공유 특성은 대부분 userid/passwordtransaction context이며 자원 어댑터 CCI(Common Client Interface) 인터페이스 사용자를 위한 것으로는 ConnectionSpec, Subject, transaction context가 있습니다.

InFreePool 상태에서 InUse 상태로의 상태 전이는 가장 흔한 상태 전이며, 애플리케이션이 풀에서 연결을 요청할 경우 발생합니다.
InFreePool>InUse:
getConnection AND
freeConnectionAvailable AND
(unshareableConnectionRequest OR
NOT(shareableConnectionAvailable))
이 상태 전이는 다음의 경우 연결이 사용 가능한 풀에서 사용 중임을 나타냅니다.
  • 애플리케이션이 getConnection() 호출을 발행했습니다.
  • 연결 풀(freeConnectionAvailable)에서 연결을 사용할 수 있습니다.
  • 다음 중 하나가 적용되는 경우:
    • 요청은 공유 불가능한 연결(unsharableConnectionRequest)을 위한 것입니다.
    • 트랜잭션에서 동일한 공유 특성을 갖는 연결이 사용되고 있지 않습니다. (NOT(sharableConnectionAvailable)).

사용 가능한 풀에서 연결을 수행할 수 있는 연결 요청은 데이터베이스로의 연결을 새로 작성하지 않습니다. 따라서 임의 수의 애플리케이션으로 풀에서 한 번에 둘 이상의 연결을 사용하지 못하는 경우, 풀의 크기는 1보다 크게 증가하지 않습니다. 이 숫자는 풀에서 지정된 최소 연결 수보다 작을 수 있습니다. 풀이 최소 연결 수로 증가되는 방법 중 하나는 애플리케이션에 연결이 새로 작성되도록 하는 여러 개의 연결 동시 요청이 있는 경우입니다.

연결 공유 개념은 InUse 상태의 상태 전이에서 보여줍니다.
InUse>InUse:
getConnection AND
ShareableConnectionAvailable

이 상태 전이는 애플리케이션이 이미 사용 중인 연결과 동일한 공유 특성(ShareableConnectionAvailable)의 공유 가능 연결을 요청하는 경우(getConnection) 기존 연결이 공유되는 것을 표시합니다.

동일한 사용자(인증 선택사항에 따라 사용자 이름비밀번호 또는 제목이 될 수 있는)는 연결을 공유할 수 있지만 동일한 트랜잭션에서만 한정되며 모든 공유 특성이 일치할 경우에만 공유됩니다. JDBC 연결의 경우, 데이터 소스 기본값에 대한 자원 참조(IBM® WebSphere® extension)에서 구성 가능한 격리 레벨이 이 특성에 포함됩니다. 자원 어댑터 팩토리 연결의 경우, 이 특성은 ConnectionSpec 오브젝트에 지정된 것을 포함합니다. 일반적으로 트랜잭션은 단일 스레드와 연관되므로, 연결은 스레드 전체 연결을 공유하지 않아야 합니다.
참고: 동시에 여러 스레드에서 동일한 연결이 표시될 수는 있지만 이는 오류 상태이며 일반적으로 애플리케이션 프로그래밍 오류가 원인입니다.

연결 리턴

앞에서 언급된 모든 상태 전이는 애플리케이션 사용을 위한 연결 가져오기에 대한 것이었습니다. 이 목표에서는 상태 전이로 인해 연결이 닫히고 사용 가능한 풀로 리턴되거나 삭제됩니다. 애플리케이션은 연결 오브젝트에서 close()를 호출하여 명확하게 연결(참고: 사용자가 다시 가져오는 연결은 진정한 의미에서 연결 핸들)을 닫아야 합니다. 대부분의 경우 이 조치로 인해 다음과 같은 상태 전이가 발생합니다.
InUse>InFreePool:
(close AND
noOtherReferences AND
NoTx AND
UnshareableConnection)
OR
(ShareableConnection AND
TxEnds)
다음은 InUse 상태에서 전환을 일으키는 조건입니다.
  • 애플리케이션 또는 컨테이너가 close()(닫기 조건 생성)를 호출하고 애플리케이션(애플리케이션 공유 조건에서) 또는 트랜잭션 관리자(NoTx 조건에서, 트랜잭션에 연결이 등록될 때 트랜잭션 관리자가 참조를 보유함을 의미)에 의한 참조(noOtherReferences 조건)가 없는 경우, 연결 오브젝트가 사용 가능한 풀로 리턴됩니다.
  • 트랜잭션에 연결이 등록되지만 트랜잭션 관리자가 트랜잭션(txEnds 조건)을 종료하고 연결이 공유 가능한 연결(ShareableConnection 조건)인 경우, 연결은 닫히고 풀로 리턴됩니다.

애플리케이션이 연결에서 close()를 호출할 경우, 애플리케이션은 해당 연결을 사용 가능한 연결의 풀로 리턴합니다. 그러나 데이터 저장소에 대한 연결은 닫히지 않습니다. 애플리케이션이 현재 공유 중인 연결에서 close()를 호출할 경우, 해당 연결은 사용 가능한 풀로 리턴되지 않습니다. 애플리케이션이 연결에 대한 마지막 참조를 삭제한 후에만 트랜잭션이 종료되며 해당 연결은 풀로 리턴됩니다. 공유 불가능한 연결을 사용하는 애플리케이션은 시기 적절한 방법을 통해 매우 주의하여 연결을 닫아야 합니다. 이렇게 하지 않으면 해당 연결 풀이 없어져 서버에서 실행 중인 애플리케이션이 연결을 가져올 수 없습니다.

애플리케이션이 트랜잭션에 등록된 연결에서 close()를 호출할 경우 해당 연결은 사용 가능한 풀로 리턴되지 않습니다. 트랜잭션 관리자는 연결 오브젝트에 대한 참조를 보유해야 하기 때문에 연결은 트랜잭션이 종료될 때까지 사용 가능한 풀로 리턴될 수 없습니다. 연결이 일단 트랜잭션에 등록되면, 트랜잭션이 완료된 후까지 다른 애플리케이션의 다른 트랜잭션에서 사용할 수 없습니다.

애플리케이션이 close()를 호출할 경우 풀로 해당 연결의 리턴은 생략하고 닫은 후 데이터 저장소에 연결할 수 있습니다. 이런 경우는 풀의 연결 중 하나가 손상된 것으로 간주되는 경우에 발생합니다. 데이터 저장소 연결에 연결을 더 이상 사용할 수 없는 경우에 이는 손상된 것으로 간주됩니다. 예를 들어, 연결은 데이터 저장소 서버가 종료된 경우에 손상된 것으로 표시됩니다. 연결이 손상으로 표시될 경우, 기본적으로 전체 풀은 제거되는 데 이는 동일한 이유로 모든 연결이 손상될 가능성이 크기 때문입니다(또는 구성을 설정하여 장애가 발생한 연결을 정리할 수 있음). 이러한 정리에는 현재 모든 InUse 연결을 손상으로 표시하는 것이 포함되므로 닫을 때 삭제됩니다. 다음 상태 전이는 연결이 손상된 것으로 표시될 때 close() 호출 시 동작을 표시합니다.
InUse>DoesNotExist:
close AND
markedStale AND
NoTx AND
noOtherReferences

이 상태 전이는 애플리케이션이 연결에서 close()를 호출하고 해당 연결이 풀 정리 단계(markedStale) 동안에 손상으로 표시될 경우, 연결 오브젝트는 데이터 저장소에 대해 닫히며 풀로 리턴되지 않습니다.

마지막으로 데이터 저장소로의 연결을 닫고 풀에서 제거할 수 있습니다.

이 상태 전이는 연결이 사용 가능 풀에서 제거되고 삭제되는 세 개의 경우를 표시합니다.
  1. 자원 어댑터(또는 데이터 소스)에서 심각한 오류 알림을 수신할 경우. 연결을 사용할 수 없을 때 자원 어댑터에서 심각한 오류 알림(FatalErrorNotification)이 수신됩니다. 현재 사용 가능한 풀에 있는 모든 연결이 삭제됩니다.
  2. 해당 연결이 사용하지 않음 제한시간(UnusedTimeoutExpired) 기간보다 오랫동안 사용 가능한 풀에 있고 풀 크기가 최소 연결 수(poolSizeGTMin)보다 클 경우, 연결은 사용 가능한 풀에서 제거되어 삭제됩니다. 이 메커니즘을 통해 풀을 연결 요구가 감소할 때 최소 크기로 줄일 수 있습니다.
  3. 유효 기간의 제한시간이 구성되고 지정된 연결이 제한시간보다 오래된 경우. 이 메커니즘은 유효 기간을 기반으로 연결을 재순환하는 방법을 제공합니다.

주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cdat_conlifcyc
파일 이름:cdat_conlifcyc.html