개체 수명 및 상태 제어
풀링된 개체는 IObjectControl구현하여 COM+에서 풀의 활동을 관리하는 방법에 참여할 수 있습니다. 풀링된 개체가 생성되면, 개체 수명 주기의 정기적인 시점에서 IObjectControl의 다음 메서드를 호출하여 개체를 관리하는 더 큰 개체에 집계됩니다.
- 활성화- 개체가 클라이언트로 반환될 때마다 호출되고 특정 컨텍스트에서 활성화됩니다.
- 비활성화 - 클라이언트에서 개체를 해제할 때마다 또는 JIT 활성화 개체의 경우 비활성화될 때마다 호출됩니다.
- CanBePooled- 개체가 일반 풀로 반환될 때마다 호출됩니다.
IObjectControl 구현하는 것은 트랜잭션 개체를 제외하고 선택 사항이며, 항상 CanBePooled 구현하여 보유하고 있는 리소스의 상태를 모니터링해야 합니다. 그러나 아래 설명된 대로 풀된 개체의 동작을 효율적으로 관리하는 방법을 제공하기 때문에 대부분의 경우 IObjectControl 구현하는 것이 좋습니다.
Context-Specific 초기화 수행
활성화사용하여 지정된 클라이언트에 대해 활성화되는 컨텍스트에서 개체를 초기화할 수 있습니다. 예를 들어 개체에 트랜잭션 선호도(해당 리소스가 이미 등록되어 있을 수 있음)가 있는지 확인하려면 컨텍스트와 연결된 트랜잭션 ID를 가져올 수 있습니다.
일반적으로 활성화사용하여 개체에서 노출하는 모든 메서드에서 일관된 초기화를 수행하여 개체 생성자의 컨텍스트별 부분으로 처리합니다.
모든 클라이언트 상태 정리
을 비활성화하면, 클라이언트별로 존재할 수 있는 상태를 제거하여 개체가 보안 또는 격리를 손상시키지 않고 풀로 완전히 일반적인 상태로 돌아갑니다. 그렇게 하면 이후 모든 클라이언트가 개체를 안전하게 사용할 수 있습니다.
개체 재사용 제어
CanBePooled사용하여 개체의 내부 상태를 모니터링하고 개체의 재사용에 적합한지 여부를 보고할 수 있습니다. CanBePooled True를 반환하고 풀 최대값에 도달하지 않으면 개체가 다시 일반 풀에 배치됩니다. CanBePooled False를 반환하면 개체가 삭제됩니다. 트랜잭션 구성 요소의 경우 False를 반환하면 현재 트랜잭션이 종료됩니다.
일반적으로 개체에 대한 일부 전역 데이터 멤버를 유지하고, 연결이 잘못되었거나 어떤 종류의 리소스가 잘못된 상태인지 감지하는 경우 현재 상황을 반영하도록 설정하고 CanBePooled통해 반환합니다.
개체가 CanBePooled구현하지 않으면 풀 최대 수준에 도달할 때까지 인스턴스가 계속 다시 사용됩니다.
관련 항목