풀 가능 개체에 대한 요구 사항
단일 개체 인스턴스를 여러 클라이언트에서 사용할 수 있도록 하려면 풀 가능 개체가 특정 요구 사항을 충족해야 합니다.
비상태
보안, 일관성 및 격리를 유지하기 위해 풀 가능 개체는 클라이언트에서 클라이언트로의 클라이언트별 상태를 보유하지 않아야 합니다. IObjectControl사용하여 IObjectControl::Activate 사용하여 컨텍스트별 초기화를 수행하고 IObjectControl::D eactivate사용하여 모든 클라이언트 상태를 정리하여 클라이언트별 상태를 관리할 수 있습니다. 자세한 내용은 개체 수명 및 상태 제어하기를참조하세요.
스레드 선호도 없음
풀 가능 개체는 특정 스레드에 바인딩할 수 없습니다. 그렇지 않으면 성능이 잠재적으로 재앙이 될 수 있습니다. 이러한 이유로 풀 가능 개체는 아파트 모델에서 실행되도록 표시할 수 없습니다. 다중 스레드 아파트 또는 중립 아파트에서 실행해야 합니다. 또한 풀링 가능한 개체는 스레드 로컬 스토리지를 사용하지 않아야 하며 자유 스레드 마샬러를 집계해서는 안 됩니다. COM+의 스레딩에 대한 자세한 내용은 COM+ 스레딩 모델참조하세요.
메모
Microsoft Visual Basic 6.0 및 이전 개발 환경에서는 아파트 모델 구성 요소만 만들 수 있습니다. 그러나 Visual Basic .NET에서는 구성 요소를 풀할 수 있습니다.
집계 가능
풀링 가능한 개체는 집계를 지원해야 합니다. 즉, NULL이 아닌 pUnkOuter 인수를 사용하여 CoCreateInstance 호출하여 생성되는 지원해야 합니다. COM+에서 풀된 개체를 활성화하면 풀된 개체의 수명을 관리하고 IObjectControl메서드를 호출하는 집계를 만듭니다. 집계 가능한 개체 작성에 대한 자세한 내용은 집계참조하세요.
트랜잭션 구성 요소
트랜잭션에 참여하는 풀 가능 개체는 관리되는 리소스를 수동으로 등록해야 합니다. 풀되는 동안 개체에 데이터베이스 연결과 같은 관리되는 리소스가 있는 경우 지정된 컨텍스트에서 개체가 활성화될 때 리소스 관리자가 트랜잭션에 자동으로 등록할 수 있는 방법이 없습니다. 따라서 개체 자체는 트랜잭션을 검색하고, 리소스 관리자의 자동 인리스트먼트를 해제하고, 보유한 리소스를 수동으로 등록하는 논리를 처리해야 합니다. 또한 트랜잭션 풀된 개체는 IObjectControl::CanBePooled매개 변수 값에 해당 리소스의 현재 상태를 반영해야 합니다. 자세한 내용은 트랜잭션 개체 풀링을 참조하세요.
IObjectControl을 구현하여 개체 수명 관리
풀 가능 개체는 IObjectControl구현해야 하지만, 반드시 구현할 필요는 없습니다. 그러나 풀된 트랜잭션 구성 요소는 IObjectControl구현해야 합니다. 이러한 구성 요소는 보유하고 있는 리소스의 상태를 모니터링하고 재사용할 수 없는 시기를 표시해야 합니다. IObjectControl::CanBePooled false를 반환하면 트랜잭션이 종료됩니다. 자세한 내용은 개체 수명 및 상태 제어,참조하세요.
언어 제한
Microsoft Visual Basic 6.0 이하를 사용하여 개발된 구성 요소는 아파트 모델 스레드가 되므로 풀할 수 없습니다. 그러나 Visual Basic .NET에서는 구성 요소를 풀할 수 있습니다.
레거시 구성 요소
비 트랜잭션이며 적절한 이전 요구 사항을 준수하는 한, 풀링 기능을 염두에 두고 특별히 작성되지 않은 경우에도 구성 요소를 풀링할 수 있습니다. IObjectControl구현할 필요는 없습니다. 이렇게 하지 않는 구성 요소는 단순히 수명 관리에 참여하지 않습니다. IObjectControl::CanBePooled 구현되지 않으면 풀의 최대 크기가 될 때까지 개체가 계속 재사용됩니다.
관련 항목