Condividi tramite


Concetti relativi all'attivazione JUST-in-time COM+

Il servizio di attivazione JIT consente a COM+ di disattivare un oggetto mentre un client contiene ancora un riferimento attivo a tale oggetto. La volta successiva che il client chiama un metodo sull'oggetto , che il client ritiene ancora attivo, il servizio di attivazione COM+ JIT riattiva l'oggetto in modo trasparente al client, just-in-time.

Il vantaggio principale dell'uso dell'attivazione COM + JIT consiste nel fatto che è possibile consentire ai client di contenere riferimenti agli oggetti per tutto il tempo necessario, senza necessariamente legare risorse server preziose, ad esempio memoria. Altri vantaggi importanti includono i seguenti:

  • L'uso del servizio di attivazione JIT COM+ semplifica notevolmente il modello di programmazione per il client perché il client non deve pensare a come usa oggetti server costosi e risorse server. Senza l'attivazione JIT, i client possono comportare una penalità significativa quando spesso devono chiamare e rilasciare oggetti.

    Nota

    È possibile perfezionare ulteriormente questo vantaggio in termini di prestazioni usando il servizio COM+ Object Pooling . Eseguendo il pool di oggetti attivati tramite JIT, è possibile velocizzare notevolmente la riattivazione degli oggetti per i client riutilizzando le risorse che potrebbero contenere, offrendo un controllo più preciso sulla quantità di memoria usata da un determinato oggetto nel server. Per altri dettagli, vedere Pool di oggetti e Attivazione JIT COM+.

     

  • Con le applicazioni distribuite, è necessario un round trip di rete costoso per la creazione di ogni oggetto e più lontano il client proviene dal server, maggiore è il costo di attivazione e marshalling dell'oggetto server, l'apertura del canale e la configurazione del proxy e dello stub. Usando il servizio di attivazione COM+ JIT, è possibile ridurre al minimo la frequenza di creazione di oggetti per migliorare significativamente le prestazioni dell'applicazione.

  • Quando si usa l'attivazione COM+ JIT per attivare gli oggetti a cui i client contengono riferimenti di lunga durata, ma che non usano necessariamente tutto il tempo, la memoria del server non è sempre associata mantenendo tali oggetti attivi. Ciò può aumentare significativamente la scalabilità dell'applicazione. L'unico riscontro delle prestazioni che i client vedono è il tempo necessario per riattivare l'oggetto, in genere solo marginalmente più tempo di quanto sia necessario allocare memoria per l'oggetto e sostanzialmente meno del round trip di rete per la creazione di oggetti remoti.

Abilitazione dell'attivazione JIT COM+

È possibile abilitare il servizio di attivazione COM+ JIT per un componente usando lo strumento di amministrazione di Servizi componenti o le funzioni Amministrazione istrative. Per informazioni dettagliate su come eseguire questa operazione, vedere Abilitazione dell'attivazione JIT per un componente.

L'attivazione COM+ JIT può interagire con altri servizi COM+, ad esempio:

  • Quando il componente richiede transazioni, l'attivazione JIT viene abilitata automaticamente. Per maggiori dettagli, vedere Transazioni e attivazione JIT COM+.
  • Quando il componente è abilitato per l'attivazione JIT, la sincronizzazione viene impostata automaticamente su obbligatoria. Ciò significa che se due client chiamano simultaneamente un componente attivato da JIT e una chiamata di metodo per uno di essi restituisce, causando la disattivazione dell'oggetto, l'altro non viene bloccato.

Modalità di attivazione della disattivazione

COM+ disattiva un oggetto in base allo stato del bit di doneness nel contesto dell'oggetto. L'oggetto può usare questo bit per segnalare se è fatto, ovvero pronto per essere disattivato, durante una determinata chiamata al metodo. Per altre informazioni, vedere Impostazione del bit completato.

Utilizzo della proprietà Auto-Done

Usando lo strumento di amministrazione di Servizi componenti, è possibile configurare un metodo in modo che l'oggetto venga disattivato automaticamente al ritorno del metodo. (Vedere Abilitazione del completamento automatico per un metodo per istruzioni su come impostare questa proprietà. Selezionando questa opzione, è possibile eliminare le chiamate di metodo ripetitive per il voto nelle transazioni. Poiché l'impostazione predefinita per il bit di coerenza è True, se il bit completato è stato modificato anche su True e non si esegue alcuna azione per modificare queste impostazioni, IObjectContext::SetComplete viene chiamato automaticamente dopo che il metodo viene restituito.

Tuttavia, esiste un'avvertenza a questo comportamento: COM+ esaminerà il valore HRESULT restituito dal metodo. Se HRESULT indica un errore, il bit di coerenza è impostato su False e il risultato è uguale a quello di se fosse stato chiamato IObjectContext::SetAbort.

Per riepilogare, se si seleziona il completamento automatico per un metodo e non si esegue alcuna azione per impostare alcun bit e se viene restituito un HRESULT(hr), si applica quanto segue:

  • Se SUCC edizione Enterprise DS(hr), è come se fosse stato chiamato SetComplete.
  • Se FAILED(hr), è come se fosse stato chiamato SetAbort.

Uso di IObjectControl per gestire l'attivazione e la disattivazione degli oggetti

È possibile implementare l'interfaccia IObjectControl in modo che il runtime COM+ gestisca automaticamente la disattivazione e la riattivazione per gli oggetti. Quando un oggetto implementa questa interfaccia, COM+ chiama IObjectControl::D eactivate quando disattiva l'oggetto e IObjectControl::Activate quando viene riattivato. Questi metodi abilitano l'inizializzazione automatica del contesto sull'attivazione degli oggetti e la pulizia dello stato in caso di disattivazione.

Se si esegue il pool di oggetti che usano l'attivazione COM+ JIT, è consigliabile implementare IObjectControl. Per altri dettagli, vedere Pool di oggetti e Attivazione JIT COM+.

Attivazione JIT e senza stato

Gli oggetti transazionali sono necessariamente senza stato perché non è possibile condividere lo stato attraverso un limite di transazione. Pertanto, si userebbe l'attivazione JIT solo quando l'oggetto non contiene alcuno stato che andrebbe perso in caso di disattivazione; in caso contrario, si viola l'isolamento delle transazioni. A causa dei modelli di utilizzo naturale degli oggetti transazionali, eseguono alcune unità di lavoro e rilasciano l'oggetto quando il commit o l'interruzione della transazione, l'attivazione JIT e le transazioni automatiche sono strettamente correlate. La configurazione di un oggetto per richiedere transazioni abilita automaticamente l'attivazione JIT COM+.

Attività di attivazione JUST-in-time COM+

Attivazione JIT e pool di oggetti

Transazioni e attivazione JIT COM+