Funzionamento del pool di oggetti
Quando si configura un componente da raggruppare, COM+ ne gestirà le istanze in un pool, pronto per essere attivato per qualsiasi client che richiede il componente. Tutte le richieste di creazione di oggetti verranno gestite tramite gestione pool.
I pool vengono configurati e gestiti in base ai singoli componenti. Un pool è costituito da oggetti omogenei che condividono lo stesso CLSID. L'unica eccezione è per gli oggetti transazionali, per i quali i sottopool vengono mantenuti contenenti oggetti con affinità di transazione mentre una transazione è in sospeso.
All'avvio dell'applicazione, il pool verrà popolato fino al livello minimo specificato in modo amministrativo, purché la creazione di oggetti abbia esito positivo. Man mano che arrivano richieste client per il componente, vengono soddisfatte in base al primo servizio dal pool. Se non sono disponibili oggetti in pool e il pool non è ancora al livello massimo specificato, viene creato e attivato un nuovo oggetto per il client.
Quando il pool raggiunge il livello massimo, le richieste client vengono accodate e riceveranno il primo oggetto disponibile dal pool. Il numero di oggetti, inclusi attivato e disattivato, non supererà mai il valore massimo del pool. Le richieste di creazione di oggetti avranno un timeout dopo un periodo specificato dall'amministratore in modo che sia possibile controllare per quanto tempo i client attenderanno la creazione di oggetti. In caso di errore di timeout, il client restituirà l'errore E_TIMEOUT da CoCreateInstance.
Quando possibile, COM+ tenterà di riutilizzare un oggetto dopo il rilascio di un client, fino a quando il pool non raggiunge il livello massimo. L'oggetto è responsabile del monitoraggio dello stato per determinare se può essere riutilizzato e deve restituire un valore appropriato per IObjectControl::CanBePooled.
Quando viene creato un oggetto in pool, viene aggregato in un oggetto più grande che gestirà la durata dell'oggetto. L'oggetto esterno chiama i metodi su IObjectControl in momenti appropriati nel ciclo di vita dell'oggetto, come indicato di seguito:
- Il metodo Activate viene chiamato ogni volta che l'oggetto viene restituito a un client, attivato in un contesto specifico.
- Il metodo Deactivate viene chiamato ogni volta che un oggetto viene rilasciato dal client o, nel caso di un oggetto attivato tramite JIT, quando viene disattivato.
- Il metodo CanBePooled viene chiamato ogni volta che un oggetto deve essere restituito al pool generale. Se l'oggetto rileva che alcune risorse riutilizzabili sono in uno stato non valido, deve restituire FAL edizione Standard per questo metodo e il gestore del pool eliminerà l'oggetto.
Un oggetto non deve necessariamente implementare IObjectControl. In caso contrario, le istanze verranno sempre riutilizzate fino al raggiungimento del livello massimo del pool.
Per informazioni dettagliate su come configurare i componenti da raggruppare, vedere Configurazione di un componente da raggruppare.
Argomenti correlati