With transaction pattern (langage)

De Wiki1000
(Différences entre les versions)
(withP private transaction do)
(withP private long transaction do)
Ligne 198 : Ligne 198 :
  
 
[[Category:Langage]]
 
[[Category:Langage]]
 +
[[Category:Transaction]]
 
[[Category:Code pattern]]
 
[[Category:Code pattern]]

Version du 16 septembre 2011 à 14:38

Le pattern transaction permet d'encapsuler une transaction.

Sommaire

withP 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 d'utilisation :

begin
  // Create an instance
  withP transaction do 
   begin
     inst := MyClass.Create;
     inst.Caption := 'A new instance';
   end;
end;

withP private transaction do

Ce pattern gère une transaction privée.

Le code généré par le pattern est le suivant :

begin
  // withP 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 d'utilisation :

var inst:WFClasseB;
begin
  withP 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;

withP 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 d'utilisation :

// Long transaction with default batch size
var inst:WFClasseB;
begin
  withP long(100) 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;
 
// Long transaction with a batch size of 100
var inst:WFClasseB;
begin
  withP long(100) 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;

withP private long transaction do

Ce pattern gère une transaction longue privée.

Le code généré par ce pattern est le suivant :

begin
  // with privateP 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 d'utilisation :

begin
end;




Whos here now:   Members 0   Guests 0   Bots & Crawlers 1
 
Outils personnels