Steuern der Lebensdauer und des Zustands von Objekten
Ein gepooltes Objekt kann daran teilnehmen, wie COM+ seine Aktivität im Pool verwaltet, indem es IObjectControl implementiert. Wenn ein Poolobjekt erstellt wird, wird es in ein größeres Objekt aggregiert, das das Objekt verwaltet, indem die folgenden Methoden in IObjectControl an regelmäßigen Punkten im Lebenszyklus des Objekts aufgerufen werden:
- Activate– Wird immer aufgerufen, wenn das Objekt an einen Client zurückgegeben wird, das in einem bestimmten Kontext aktiviert wird.
- Deaktivieren: Wird immer aufgerufen, wenn ein Objekt vom Client freigegeben wird, oder im Fall eines JIT-aktivierten Objekts, wenn es deaktiviert wird.
- CanBePooled: Wird immer aufgerufen, wenn ein Objekt an den allgemeinen Pool zurückgegeben werden soll.
Die Implementierung von IObjectControl ist optional, mit Ausnahme von Transaktionsobjekten, die immer CanBePooled implementieren sollten, um den Zustand der darin enthaltenen Ressourcen zu überwachen. In den meisten Fällen ist es jedoch ratsam, IObjectControl zu implementieren, da es eine effiziente Möglichkeit zum Verwalten des Verhaltens eines gepoolten Objekts bietet, wie unten beschrieben.
Durchführen der Context-Specific Initialisierung
Mit Activate können Sie das Objekt in dem Kontext initialisieren, in dem es für einen bestimmten Client aktiviert wird. Um beispielsweise zu bestimmen, ob das Objekt eine Transaktionsaffinität aufweist (seine Ressourcen sind möglicherweise bereits eingetragen), können Sie die Transaktions-ID abrufen, die dem Kontext zugeordnet ist.
In der Regel würden Sie Activateverwenden, um eine Initialisierung durchzuführen, die über alle Methoden hinweg konsistent ist, die vom Objekt verfügbar gemacht werden, wobei es als kontextspezifischer Teil des Konstruktors des Objekts behandelt wird.
Bereinigen beliebiger Clientstatus
Mithilfe von Deactivate können Sie alle clientspezifischen Zustände entfernen, die vorhanden sein könnten, sodass Ihr Objekt in einem vollständig generischen Zustand an den Pool zurückkehrt und dann von jedem Client verwendet werden kann, ohne die Sicherheit oder Isolation zu beeinträchtigen.
Steuern der Wiederverwendung des Objekts
Mit CanBePooled können Sie den internen Zustand Ihres Objekts überwachen und melden, ob es für die Wiederverwendung geeignet ist. Wenn CanBePooled True zurückgibt und das Poolmaximus nicht erreicht wurde, wird das Objekt wieder im allgemeinen Pool platziert. Wenn CanBePooled False zurückgibt, wird das Objekt verworfen. Im Fall von Transaktionskomponenten führt die Rückgabe von False zu einer Kehrseite der aktuellen Transaktion.
In der Regel würden Sie einige globale Datenmember für das Objekt beibehalten. Wenn Sie feststellen, dass eine Verbindung schlecht ist oder sich eine Ressource in einem schlechten Zustand befindet, legen Sie dies fest, um die aktuelle Situation widerzuspiegeln, und geben Sie sie über CanBePooled zurück.
Wenn ein Objekt CanBePooled nicht implementiert, werden Instanzen weiterhin wiederverwendet, bis die maximale Poolebene erreicht ist.
Zugehörige Themen