애플리케이션 구성 요소는 COM+ 리소스 디스펜서를 사용하여 구성 요소와 지정된 리소스 관리자 간의 연결과 같은 공유된 대체 불가능한 상태 정보에 액세스하고 관리합니다. 런타임 시 데이터베이스 연결, 네트워크 연결, 큐에 대한 연결, 스레드, 개체 및 메모리 블록과 같은 리소스의 동적 풀을 리소스 디스펜서에서 사용할 수 있습니다. 애플리케이션 프로세스는 자주 사용하는 리소스의 최소 수를 사용하여 고성능을 달성합니다. 자원 분배기는 트랜잭션 및 회수를 자동화할 수도 있습니다. (이 기능에 대한 자세한 내용은 자동 리소스 매립 참조하세요.)
메모
리소스는 리소스 디스펜서에서 생성하는 모든 것입니다. 예를 들어 리소스 관리자에 대한 연결은 일반적인 리소스입니다. 리소스는 리소스 디스펜서의 메모리에 있으며 디스펜서 관리자에 복사되지 않습니다. 리소스는 불투명 핸들(RESID)에 의해서만 알려져 있으며 트랜잭션을 수행할 수도 있고 그렇지 않을 수도 있습니다. 관리되는 리소스는 지속성 상태를 관리하는 구성 요소에 대한 연결일 수 있지만 연결 자체는 지속성이 없습니다. 리소스 디스펜서는 종종 관련 리소스 관리자를 사용하여 내구 상태를 유지합니다.
아키텍처적으로 COM+ 리소스 디스펜서 시스템은 리소스 디스펜서와 디스펜서 관리자로 구성됩니다. 리소스 디스펜서는 애플리케이션에 공유 리소스에 대한 간단한 인터페이스를 제공하는 사용자 제공 구성 요소입니다. 디스펜서 관리자는 다양한 리소스 디스펜서의 활동을 조정하는 COM+에서 제공하는 구성 요소입니다.
리소스 디스펜서는 두 개 이상의 인터페이스를 제공하는 DLL(동적 연결 라이브러리) 구성 요소입니다. 첫 번째 IDispenserDriver디스펜서 관리자에게 관리하는 리소스를 만들고, 삭제하고, 등록하는 방법에 대한 기본 정보를 제공합니다. 두 번째는 애플리케이션에 노출되며 COM 인터페이스 또는 인터페이스 집합이거나 가져오기 라이브러리를 통해 구성 요소가 연결된 API(애플리케이션 프로그래밍 인터페이스)일 수 있습니다. 애플리케이션은 리소스 디스펜서를 호출할 수 있으며, 그러면 애플리케이션에 API를 제공할 수 있습니다. 리소스 디스펜서가 Automation 구성 요소인 경우 Microsoft Visual Basic에서 액세스할 수 있습니다. 리소스 디스펜서는 애플리케이션 구성 요소가 참조할 때 인스턴스화됩니다.
COM+에서 제공하는 디스펜서 관리자는 리소스 디스펜서를 추적하고 이들 간의 조정을 담당합니다. 두 인터페이스를 구현합니다: IDispenserManager 및 IHolder. 리소스 디스펜서는 IDispenserManager 인터페이스를 사용하여 자체적으로 등록합니다. 이어 디스펜서 관리자는 사용자에게 디스펜서 관리자에게 그들의 활동을 보고하는 데 사용하는 IHolder에 대한 포인터를 제공합니다.
트랜잭션 리소스 디스펜서는 DTC(Distributed Transaction Coordinator) 트랜잭션에 참여해야 합니다. 이는 OLE 트랜잭션 규격인 내부 또는 외부(리소스 디스펜서) 리소스 관리자를 사용하는 것을 의미합니다.
메모
COM+ 프로그래밍 모델에는 선언적 트랜잭션이 포함되어 있으므로 수명 동안 애플리케이션 개체에서 수행하는 작업을 보호할 수 있습니다. 애플리케이션 개체가 COM+ 리소스 디스펜서를 사용하는 경우 수행하는 작업은 자동으로 트랜잭션입니다. 즉, 구성 요소가 트랜잭션을 명시적으로 선언할 필요가 없습니다. 이러한 트랜잭션은 OLE 트랜잭션 사양에 정의되고, DTC에서 구현되며, COM+에서 애플리케이션 개체를 대신하여 시작됩니다. 자세한 내용은 DTC 개발 가이드를 참조하세요.
자원은 반드시 거래적일 필요가 없습니다. 비 트랜잭션 리소스를 풀링하는 리소스 디스펜서는 애플리케이션 개체가 이러한 리소스의 공유 풀에 액세스할 수 있도록 하여 여전히 고성능을 달성할 수 있습니다. 이 유형의 리소스 디스펜서는 IDispenserDriver::EnlistResource 메서드에서 S_FALSE 반환합니다. 즉, 리소스가 트랜잭션이 아니므로 리소스 디스펜서가 리소스를 등록하지 않았습니다.
리소스 디스펜서는 COM+에 독립적으로 작동하여 리소스 풀링 기능만 제공할 수 있습니다. 예를 들어 리소스 디스펜서가 API(예: ODBC)를 노출하는 경우 리소스 디스펜서는 가져오기 라이브러리(또는 LoadLibrary 및 GetProcAddress 함수 사용)를 통해 애플리케이션에서 액세스하는 DLL일 수 있습니다. 리소스 디스펜서는 CoCreateInstance호출하여 애플리케이션이 액세스하는 COM 구성 요소일 수도 있습니다. COM+가 없으면 디스펜서 관리자가 현재 구성 요소 트랜잭션에 대해 알지 못하기 때문에 리소스 디스펜서의 EnlistResource 메서드를 호출할 수 없습니다.
시작 시 리소스 디스펜서 DLL은 디스펜서 관리자에 등록해야 합니다. 디스펜서 관리자는 리소스 디스펜서의 로드 및 언로드를 관리하고, COM+ 컨텍스트를 제공하고, 인벤토리 통계 관리자를 제어하는 제어 임원입니다. (자세한 내용은 com+ 디스펜서 관리자 참조하세요.) 리소스 디스펜서는 먼저 GetDispenserManager 함수를 호출한 다음 IDispenserManager::RegisterDispenser 메서드를 호출하여 리소스 디스펜서가 구현하는 IDispenserDriver 포인터를 전달합니다. 이 호출은 IHolder대한 참조를 반환합니다.
종료하려면 리소스 디스펜서가 IHolder::Close호출합니다. 깨끗한 패키지 종료를 보장하기 위해, 리소스 디스펜서는 COM+가 디스펜서에 종료를 요청한 후에도 비즈니스 객체로부터 계속 호출이 오는 상황을 처리할 수 있어야 합니다.
이 섹션의 다음 항목에서는 COM+ 리소스 디스펜서 서비스에 대한 자세한 정보를 제공합니다.
- COM+ 디스펜서 관리자
- COM+ 리소스 디스펜서 스레드 형식
- 사용할 수 있는 풀된 리소스 상태 를 COM+ 리소스 디스펜서에 제공합니다.
- 트랜잭션에 리소스를 등록하기
- 리소스 디스펜서 리소스 할당 프로세스
- 할당되지 않은 리소스 추적
- 자동 리소스 회수
- 형식은 COM+ 리소스 디스펜서 인터페이스에서 사용됩니다
- COM+ 리소스 디스펜서 인터페이스
관련 항목