개체 수명 및 상태 제어

풀링된 개체는 IObjectControl을 구현하여 COM+가 풀에서 해당 작업을 관리하는 방법에 참여할 수 있습니다. 풀링된 개체를 만들면 개체 수명 주기의 일반 지점에서 IObjectControl 에서 다음 메서드를 호출하여 개체를 관리하는 더 큰 개체로 집계됩니다.

  • Activate - 개체가 클라이언트에 반환될 때마다 호출되며 특정 컨텍스트에서 활성화됩니다.
  • 비활성화 - 클라이언트에서 개체를 해제할 때마다 또는 JIT 활성화 개체의 경우 비활성화될 때마다 호출됩니다.
  • CanBePooled - 개체가 일반 풀로 반환될 때마다 호출됩니다.

IObjectControl 구현은 트랜잭션 개체를 제외하고 선택 사항입니다. 이 개체는 항상 CanBePooled를 구현하여 보유하고 있는 리소스의 상태를 모니터링해야 합니다. 그러나 아래 설명된 대로 풀된 개체의 동작을 효율적으로 관리하는 방법을 제공하기 때문에 대부분의 경우 IObjectControl 을 구현하는 것이 좋습니다.

Context-Specific 초기화 수행

활성화를 사용하여 지정된 클라이언트에 대해 활성화되는 컨텍스트에서 개체를 초기화할 수 있습니다. 예를 들어 개체에 트랜잭션 선호도(해당 리소스가 이미 등록되어 있음)가 있는지 여부를 확인하려면 컨텍스트와 연결된 트랜잭션 ID를 가져올 수 있습니다.

일반적으로 Activate를 사용하여 개체에 의해 노출되는 모든 메서드에서 일관된 초기화를 수행하여 개체 생성자의 컨텍스트별 부분으로 처리합니다.

클라이언트 상태 정리

비활성화를 사용하면 개체가 완전히 일반적인 상태로 풀로 돌아가 보안 또는 격리를 손상시키지 않고 모든 클라이언트에서 사용할 수 있도록 존재할 수 있는 클라이언트별 상태를 제거할 수 있습니다.

개체 재사용 제어

CanBePooled를 사용하여 개체의 내부 상태를 모니터링하고 개체의 재사용에 적합한지 여부를 보고할 수 있습니다. CanBePooled가 True를 반환하고 풀 최대값에 도달하지 않은 경우 개체는 다시 일반 풀에 배치됩니다. CanBePooled가 False를 반환하면 개체가 삭제됩니다. 트랜잭션 구성 요소의 경우 False를 반환하면 현재 트랜잭션이 종료됩니다.

일반적으로 개체에 대한 일부 전역 데이터 멤버를 유지합니다. 연결이 잘못되었거나 어떤 종류의 리소스가 잘못된 상태인지 감지하는 경우 현재 상황을 반영하도록 설정하고 CanBePooled를 통해 반환합니다.

개체가 CanBePooled를 구현하지 않으면 풀 최대 수준에 도달할 때까지 인스턴스가 계속 재사용됩니다.

COM+ 개체 생성자 문자열

개체 풀링 작동 방식

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

트랜잭션 개체 풀링

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