Processo operativo COM+ CRM

Nel normale funzionamento, un componente dell'applicazione in esecuzione in un processo dell'applicazione server userebbe un CRM COM+ creando un ruolo di lavoro CRM. Il ruolo di lavoro CRM implementa un'interfaccia COM specifica per l'attività che è progettata per l'esecuzione. Il componente dell'applicazione deve essere in esecuzione in una transazione in modo che il ruolo di lavoro CRM erediti la transazione del componente dell'applicazione. I ruoli di lavoro CRM richiedono sempre una transazione.

Per accedere a COM+ CRM, il ruolo di lavoro CRM ottiene innanzitutto l'interfaccia ICrmLogControl , che consente al ruolo di lavoro CRM di scrivere record nel log durevole. Il ruolo di lavoro CRM ottiene questa interfaccia creando un componente clerk CRM.

Successivamente, il ruolo di lavoro CRM deve indicare al impiegato CRM il nome dell'crm Disacoltore che vuole usare. A tale scopo, chiamare il metodo ICrmLogControl::RegisterCompensator. Dopo aver chiamato questo metodo, l'infrastruttura CRM Crm Viene creata dall'infrastruttura CRM al termine della transazione.

Dopo che il ruolo di lavoro CRM ha registrato il suo CRM Crm Package, può scrivere record nel log CRM usando ICrmLogControl. Il ruolo di lavoro CRM deve scrivere in anticipo, ovvero deve scrivere un record nel log che descrive un'azione prima di eseguire effettivamente l'azione, nel caso in cui si verifichi un arresto anomalo immediatamente dopo il completamento dell'azione. Senza questi record di log write-ahead, non è possibile correggere l'azione.

Inoltre, scrivere in anticipo significa che CRM Compensat, che è il componente che riceve i record di log in fase di ripristino, deve gestire il caso in cui i record di log sono stati scritti, ma l'azione non è stata effettivamente eseguita. Le azioni da parte del CRM Crm Compensato devono essere idempotenti, vale a dire che dovrebbero essere in grado di essere eseguite più volte, ma dovrebbero portare allo stesso risultato. Ad esempio, impostare un saldo del conto sul valore di $100 è un'azione idempotente; l'aggiunta di $100 al saldo del conto non è.

L'interfaccia ICrmLogControl fornisce i due metodi seguenti per la scrittura di record di log:

  • WriteLogRecordVariants viene usato per scrivere un record di log strutturato compilato come raccolta di varianti. È principalmente da usare quando si sviluppano CRL in Microsoft Visual Basic.
  • WriteLogRecord viene usato per scrivere un record di log non strutturato come BLOB di byte. È principalmente da usare per lo sviluppo di CMS in Microsoft Visual C++.It is principalmente for use when developing CRMs in Microsoft Visual C++. Poiché le strutture di record in C sono spesso costituite da un set di intestazioni e campi che possono essere sparsi in memoria, il metodo WriteLogRecord implementa una funzionalità di raccolta che riduce la copia dei dati.

Nota

Non è consigliabile usare tipi di puntatore utente all'interno di strutture di dati in un record di log. I puntatori non sono più validi durante la fase di recupero perché crm è in esecuzione in un processo diverso da quello del ruolo di lavoro CRM che ha scritto il record di log. L'inclusione dei tipi di puntatore in un record di log potrebbe causare l'arresto anomalo o il danneggiamento di un'applicazione durante il ripristino.

 

Entrambi questi metodi di scrittura scrivono un record di log su disco, ma non garantiscono la durabilità del record. Sebbene sia possibile accumulare scritture lazy prima di forzare il disco può migliorare le prestazioni, è possibile usare il metodo ICrmLogControl::ForceLog per garantire che tutte le scritture eseguite da CRM siano durevoli su disco, che è importante per il ripristino degli errori.

Quando il ruolo di lavoro CRM viene eseguito con le azioni e ha terminato di scrivere e forzare i record nel log, deve rilasciare ICrmLogControl. Al termine della transazione (in genere a causa del componente dell'applicazione che chiama SetComplete o SetAbort), l'infrastruttura CRM crea il componente CRM Component, che implementa l'interfaccia ICrmCompensator o LCrmCompensatorVariants. Queste interfacce vengono usate per passare i record non strutturati (Visual C++) o strutturati (Visual Basic) al CRM Compensat insieme alle notifiche relative ai risultati delle transazioni.

Crm Crm È la prima notifica della fase di preparazione del completamento della transazione e può votare sì o no alla richiesta di preparazione. Se CRM Crm Crm voterà no, non riceverà ulteriori notifiche di interruzione. Se vota sì alla richiesta di preparazione, riceve le notifiche di commit o interruzione. Nel caso di un'interruzione del client, non vengono ricevute notifiche di preparazione, ma solo notifiche di interruzione. Crm Crm Deve essere preparato per gestire tutti questi casi e deve anche gestire il caso in cui nessun record di log è stato scritto correttamente dal ruolo di lavoro CRM. Il CRM Crm Non deve presupporre che la stessa istanza crm di Crm Crm Riceverà sia la fase 1 (preparazione) che le notifiche della fase 2 (commit o interruzione), in quanto potrebbero essere interrotte dal ripristino.

In genere, un CRM Compensat utilizza la notifica di interruzione per invertire l'azione eseguita dal ruolo di lavoro CRM. Il ruolo di lavoro CRM potrebbe lasciare disponibile uno stato nel caso in cui debba annullare l'azione. Tale stato potrebbe essere completamente contenuto nei record di log e, in caso contrario, crm è necessario pulire tale stato se la transazione esegue il commit. Questo è il motivo per cui CRM Compensat riceve la notifica di commit. Crm Non viene eseguito con una transazione DTC.

Crm Crm è in grado di registrare nuovi record, se richiesto tramite ICrmLogControl, che riceve durante la creazione. Sia il ruolo di lavoro CRM che CRM Compensat possono anche dimenticare l'ultimo record di log scritto, che potrebbe essere necessario per evitare il recupero non necessario.

Concetti relativi a COM+ Compensating Resource Manager

Avvio e ripristino di COM+ CRM