Freigeben über


COM+-Ressourcenspenderkonzepte

Anwendungskomponenten verwenden den COM+-Ressourcenspender, um auf freigegebene, nicht dauerbare Zustandsinformationen zuzugreifen und diese zu verwalten, z. B. Verbindungen zwischen Komponenten und einem bestimmten Ressourcen-Manager. Zur Laufzeit werden dynamische Pools von Ressourcen wie Datenbankverbindungen, Netzwerkverbindungen, Verbindungen mit Warteschlangen, Threads, Objekten und Speicherblöcken für den Ressourcenspender zur Verfügung gestellt. Der Anwendungsprozess erzielt eine hohe Leistung, indem eine mindeste Anzahl häufig genutzter Ressourcen verwendet wird. Der Ressourcenspender kann auch Transaktionen und Rückgewinnung automatisieren. (Weitere Informationen zu diesem Feature finden Sie unter Automatische Ressourcenrückgewinnung .)

Hinweis

Eine Ressource ist alles, was ein Ressourcenspender erstellt. Beispielsweise ist eine Verbindung mit einem Ressourcen-Manager eine häufige Ressource. Ressourcen befinden sich im Arbeitsspeicher des Ressourcenspenders und werden nie in den Dispenser-Manager kopiert. Eine Ressource ist nur durch ein undurchsichtiges Handle (RESID) bekannt und kann Transaktionen ausführen oder nicht. Obwohl es sich bei den verwalteten Ressourcen häufig um Verbindungen mit einer Komponente handelt, die einen dauerhaften Zustand verwaltet, sind die Verbindungen selbst nicht dauerhaft. Ein Ressourcenspender verwendet häufig einen entsprechenden Ressourcen-Manager, um den dauerhaften Zustand beizubehalten.

 

Architektonisch besteht das COM+-Ressourcenspendersystem aus Ressourcenspendern und einem Dispenser-Manager. Ressourcenspender sind vom Benutzer bereitgestellte Komponenten, die Anwendungen mit einfachen Schnittstellen zu freigegebenen Ressourcen bereitstellen. Der Dispenser-Manager ist eine von COM+ bereitgestellte Komponente, die die Aktivitäten der verschiedenen Ressourcenspender koordiniert.

Ein Ressourcenspender ist eine DLL-Komponente (Dynamic Link Library), die mindestens zwei Schnittstellen bereitstellt. Der erste, IDispenserDriver, stellt dem Dispenser-Manager grundlegende Informationen zum Erstellen, Zerstören und Auflisten der von ihm verwalteten Ressourcen bereit. Die zweite wird für die Anwendungen verfügbar gemacht und kann eine COM-Schnittstelle oder eine Gruppe von Schnittstellen oder eine Anwendungsprogrammierschnittstelle (Application Programming Interface, API) sein, mit der eine Komponente über eine Importbibliothek verknüpft ist. Eine Anwendung kann einen beliebigen Ressourcenspender aufrufen, der wiederum eine beliebige API für die Anwendung anbieten kann. Wenn es sich bei dem Ressourcenspender um eine Automation-Komponente handelt, kann über Microsoft Visual Basic darauf zugegriffen werden. Ein Ressourcenspender wird instanziiert, wenn eine Anwendungskomponente darauf verweist.

Der von COM+ bereitgestellte Dispenser-Manager verfolgt Ressourcenspender und -koordinaten unter ihnen nach. Es implementiert zwei Schnittstellen: IDispenserManager und IHolder. Ressourcenspender registrieren sich über die IDispenserManager-Schnittstelle . Der Dispenser-Manager gibt ihnen dann einen Zeiger auf einen IHolder , den sie verwenden, um den Dispenser-Manager über ihre Aktivitäten zu benachrichtigen.

Ein Transaktionsressourcenspender muss sich in eine DTC-Transaktion (Distributed Transaction Coordinator) eintragen. Dies impliziert die Verwendung eines internen oder eines externen Ressourcen-Managers (für den Ressourcenspender), der OLE-Transaktionen kompatibel ist.

Hinweis

Das COM+-Programmiermodell enthält deklarative Transaktionen, mit denen die von einem Anwendungsobjekt während seiner Lebensdauer ausgeführte Arbeit geschützt wird. Wenn ein Anwendungsobjekt einen COM+-Ressourcenspender verwendet, wird die Arbeit automatisch transaktional ausgeführt. Das heißt, die Komponente muss Transaktionen nicht explizit deklarieren. Diese Transaktionen werden in der OLE-Transaktionsspezifikation definiert, vom DTC implementiert und im Auftrag des Anwendungsobjekts von COM+ initiiert. Weitere Informationen finden Sie im DTC-Entwicklungsleitfaden.

 

Ressourcen müssen nicht transaktional sein. Ein Ressourcenspender, der nicht transaktionale Ressourcen bündelt, kann dennoch eine hohe Leistung erzielen, indem Anwendungsobjekten den Zugriff auf einen freigegebenen Pool dieser Ressourcen ermöglicht. Dieser Typ von Ressourcenspender gibt S_FALSE von der IDispenserDriver::EnlistResource-Methode zurück, was bedeutet, dass der Ressourcenspender die Ressource nicht auflistet, da die Ressource nicht transaktional ist.

Der Ressourcenspender kann auch unabhängig von COM+ funktionieren und nur Ressourcenpoolfunktionen bereitstellen. Wenn ein Ressourcenspender beispielsweise eine API (z. B. ODBC) verfügbar macht, kann es sich bei dem Ressourcenspender um eine DLL handeln, auf die die Anwendung über eine Importbibliothek (oder mithilfe der Funktionen LoadLibrary und GetProcAddress ) zugreift. Ein Ressourcenspender kann auch eine COM-Komponente sein, auf die eine Anwendung durch Aufrufen von CoCreateInstance zugreift. Ohne COM+ kann die EnlistResource-Methode eines Ressourcenspenders nie aufgerufen werden, da der Dispenser-Manager keine Kenntnis von der aktuellen Komponententransaktion hat.

Beim Start muss sich eine Ressourcenspender-DLL beim Dispenser-Manager registrieren. Der Dispenser-Manager ist die leitende Führungskraft, die das Laden und Entladen von Ressourcenspendern verwaltet, den COM+-Kontext bereitstellt und den Bestandsstatistik-Manager steuert. (Weitere Informationen finden Sie unter COM+ Dispenser Manager.) Der Ressourcenspender ruft zuerst die GetDispenserManager-Funktion und dann die IDispenserManager::RegisterDispenser-Methode auf, wobei der IDispenserDriver-Zeiger übergeben wird, den der Ressourcenspender implementiert. Dieser Aufruf gibt einen Verweis auf IHolder zurück.

Zum Herunterfahren ruft ein Ressourcenspender IHolder::Close auf. Um sicherzustellen, dass ein sauber Paket heruntergefahren wird, muss ein Ressourcenspender in der Lage sein, die Situation zu verarbeiten, wenn weiterhin Anrufe von Geschäftsobjekten eingehen, nachdem COM+ den Dispenser zum Herunterfahren aufgefordert hat.

Die folgenden Themen in diesem Abschnitt enthalten ausführlichere Informationen zum COM+-Ressourcenspenderdienst:

COM+ Resource Dispenser Tasks