트랜잭션 개체 풀링

풀될 트랜잭션 구성 요소에는 특별한 요구 사항이 있습니다.

수동으로 리소스 등록

트랜잭션에 참여하는 풀 가능 개체는 관리되는 리소스를 수동으로 등록해야 합니다. 개체가 클라이언트 간에 관리되는 리소스를 보유하는 경우 지정된 컨텍스트에서 개체가 활성화될 때 리소스 관리자가 트랜잭션에 자동으로 등록할 수 있는 방법이 없습니다.

개체 자체는 트랜잭션을 검색하고, 리소스 관리자의 자동 인리스트먼트를 해제하고, 보유한 리소스를 수동으로 등록하는 논리를 처리해야 합니다. 이 작업을 수행하는 단계는 사용 중인 리소스 관리자와 관련이 있습니다. 수동 인리스트먼트를 수행해야 하는 경우 리소스 관리자에 대한 설명서를 참조하세요.

아래에 설명된 대로 트랜잭션이 활성화된 동안 개체를 트랜잭션 선호도로 풀화할 수 있으며 해당 트랜잭션과 연결된 클라이언트에서 호출하는 경우 트랜잭션 선호도로 활성화할 수 있습니다. 리소스를 등록하기 전에 먼저 트랜잭션 선호도를 검사 합니다. 개체가 해당 트랜잭션과 관련된 풀에서 가져온 경우 이미 해당 트랜잭션에서 작업을 수행하고 리소스를 등록했습니다.

자동 인리스트먼트 끄기

리소스를 획득한 후에는 일반적으로 개체의 생성자에서 자동 인리스트먼트를 해제해야 합니다. 즉, 자동 인리스트먼트를 사용하지 않도록 설정한 다음 연결합니다.

자동 인리스트먼트를 사용하지 않도록 설정하는 것은 특히 계층화된 데이터 액세스 공급자의 경우 미묘한 절차일 수 있습니다. 자동 인리스트먼트는 ODBC와 마찬가지로 연결 풀링과 결합되는 경우도 있고, OLE DB와 마찬가지로 연결 풀링과 결합되지 않을 때도 있습니다. 여러 수준의 공급자에서 자동 인리스트먼트가 꺼져 있는지 확인해야 할 수 있습니다.

IObjectControl 구현

트랜잭션에 참여하는 풀 가능 개체는 보유 중인 리소스의 현재 상태를 모니터링해야 합니다. 개체가 다시 사용할 수 없는 상태(예: 연결이 잘못된 경우)에 있는 경우 IObjectControl::CanBePooled에 대해 False를 반환해야 합니다. 이렇게 하면 개체 instance 삭제하고 현재 트랜잭션을 종료하는 효과가 있습니다.

Transaction-Specific 풀

개체 풀은 일반적으로 동질적이며 현재 사용하지 않는 풀된 개체는 클라이언트로 반환하는 것이 좋습니다. 이 규칙의 유일한 예외는 개체 풀링이 최적화된 트랜잭션 개체의 경우입니다. 개체를 요청하는 클라이언트에 연결된 트랜잭션이 있는 경우 COM+는 풀에서 해당 트랜잭션과 이미 연결된 사용 가능한 개체를 검색합니다. 트랜잭션 선호도가 있는 개체가 발견되면 클라이언트에 반환됩니다. 그렇지 않으면 일반 풀의 개체가 반환됩니다.

이러한 방식으로 특정 트랜잭션에 대한 선호도가 있는 개체를 포함하는 특수 하위 풀이 유지됩니다. 트랜잭션이 커밋되거나 중단되면 이러한 개체는 트랜잭션 선호도 없이 일반 풀로 반환되며 모든 클라이언트에서 사용할 준비가 됩니다.

이러한 이유로 구성 요소가 트랜잭션에 관리되는 리소스를 수동으로 등록하는 경우 먼저 검사 이미 등록되어 있는지 확인해야 합니다. 그렇다면 입대할 필요가 없습니다.

COM+ 개체 생성자 문자열

개체 수명 및 상태 제어

개체 풀링 작동 방식

개체 풀링을 사용하여 성능 향상

풀 가능 개체에 대한 요구 사항