With transaction pattern (langage)
De Wiki1000
Version du 20 avril 2010 à 11:04 par Syfre (discuter | contributions)
Le pattern transaction permet d'encapsuler une transaction.
Sommaire |
with transaction do
Ce pattern gère une transaction.
Le code généré par ce pattern est le suivant :
begin // with transaction do // ClassManager.BeginTran; try // glbWorkerPool.BeginParallel; try h.RunAnonymous(f.sAEntry); finally glbWorkerPool.EndParallel; end; // ClassManager.Commit([]); except ClassManager.RollBack; raise; end; end;
Exemple :
begin // Create an instance with transaction do begin inst := MyClass.Create; inst.Caption := 'A new instance'; end; end;
with private transaction do
Ce pattern gère une transaction privée.
Le code généré par le pattern est le suivant :
begin // with private transaction do // old := ClassManager.NewTransContext; try ClassManager.BeginTran; try glbWorkerPool.BeginParallel; try h.RunAnonymous(f.sAEntry); finally glbWorkerPool.EndParallel; end; // ClassManager.Commit([]); except ClassManager.RollBack; raise; end; finally ClassManager.ActivateContext(old); end; end;
Exemple :
var inst:WFClasseB; begin with private Transaction do for var idx:=1 to 100 do begin inst := WFClasseB.Create; inst.unCode := 'B'+inttostr(index); inst.Caption := 'Objet B'+inttostr(index); end; end;
with long transaction do
Ce pattern gère une transaction longue.
Le code généré par ce pattern est le suivant :
begin // with long(batchSize) transaction do // ClassManager.BeginLongTran(batchSize); if batchSize>0 then begin ClassManager.CurrentTran.AutoBatch := True; ClassManager.CurrentTran.AutoBatchOptions := [coDontShowEngineError]; end; try {$IFDEF PARALLEL} glbWorkerPool.BeginParallel; try {$ENDIF} h.RunAnonymous(f.sAEntry); {$IFDEF PARALLEL} finally if not glbWorkerPool.EndParallel(E) then raise E; end; {$ENDIF} ClassManager.CommitLongTran([coDontShowEngineError,coNoConfirmDialog]); except ClassManager.RollBackLongTran; raise; end; end;
Exemple :
begin end;
with private long transaction do
Ce pattern gère une transaction longue privé.
Le code généré par ce pattern est le suivant :
begin // with private long(batchSize) transaction do // old := ClassManager.NewTransContext; try ClassManager.BeginLongTran(batchSize); if batchSize>0 then begin ClassManager.CurrentTran.AutoBatch := True; ClassManager.CurrentTran.AutoBatchOptions := [coDontShowEngineError]; end; try {$IFDEF PARALLEL} glbWorkerPool.BeginParallel; try {$ENDIF} h.RunAnonymous(f.sAEntry); {$IFDEF PARALLEL} finally if not glbWorkerPool.EndParallel(E) then raise E; end; {$ENDIF} // ClassManager.CommitLongTran([coDontShowEngineError,coNoConfirmDialog]); except ClassManager.RollBackLongTran; raise; end; finally ClassManager.ActivateContext(old); end; end;
Exemple :
begin end;