With transaction pattern (langage)

De Wiki1000
(Différences entre les versions)
(withP private long transaction do)
 
(7 révisions intermédiaires par un utilisateur sont masquées)
Ligne 1 : Ligne 1 :
 
Le pattern transaction permet d'encapsuler une transaction.
 
Le pattern transaction permet d'encapsuler une transaction.
  
===with transaction do===
+
===withP transaction do===
 
Ce pattern gère une transaction.
 
Ce pattern gère une transaction.
  
Ligne 33 : Ligne 33 :
 
begin
 
begin
 
   // Create an instance
 
   // Create an instance
   with transaction do  
+
   withP transaction do  
 
   begin
 
   begin
 
     inst := MyClass.Create;
 
     inst := MyClass.Create;
Ligne 41 : Ligne 41 :
 
</source>
 
</source>
  
===with private transaction do===
+
===withP private transaction do===
Ce pattern gère une transaction privée.  
+
Ce pattern gère une [[Transaction privée|transaction privée]].  
  
 
Le code généré par le pattern est le suivant :
 
Le code généré par le pattern est le suivant :
Ligne 48 : Ligne 48 :
 
<source lang="delphi">
 
<source lang="delphi">
 
begin
 
begin
   // with private transaction do
+
   // withP private transaction do
 
   //
 
   //
 
   old := ClassManager.NewTransContext;
 
   old := ClassManager.NewTransContext;
Ligne 77 : Ligne 77 :
 
var inst:WFClasseB;
 
var inst:WFClasseB;
 
begin
 
begin
   with private Transaction do
+
   withP private Transaction do
 
   for var idx:=1 to 100 do
 
   for var idx:=1 to 100 do
 
     begin
 
     begin
Ligne 87 : Ligne 87 :
 
</source>
 
</source>
  
===with long transaction do===
+
===withP long transaction do===
 
Ce pattern gère une transaction longue.
 
Ce pattern gère une transaction longue.
  
Ligne 125 : Ligne 125 :
  
 
<source lang="delphi">
 
<source lang="delphi">
 +
// Long transaction with default batch size
 +
var inst:WFClasseB;
 
begin
 
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;
 
end;
 
</source>
 
</source>
  
===with private long transaction do===
+
{{tip|Les patterns gérant des transactions longues utilisent le mode [[TranAutoBatch_(CM)|AutoBatch]]}}
Ce pattern gère une transaction longue privé.
+
 
 +
===withP private long transaction do===
 +
Ce pattern gère une [[Transaction privée|transaction longue privée]].
  
 
Le code généré par ce pattern est le suivant :
 
Le code généré par ce pattern est le suivant :
Ligne 136 : Ligne 159 :
 
<source lang="delphi">
 
<source lang="delphi">
 
begin
 
begin
   // with private long(batchSize) transaction do
+
   // with privateP long(batchSize) transaction do
 
   //
 
   //
 
   old := ClassManager.NewTransContext;
 
   old := ClassManager.NewTransContext;
Ligne 169 : Ligne 192 :
 
</source>
 
</source>
  
Exemple d'utilisation :
 
  
<source lang="delphi">
 
begin
 
end;
 
</source>
 
  
 
[[Category:Langage]]
 
[[Category:Langage]]
 +
[[Category:Transaction]]
 
[[Category:Code pattern]]
 
[[Category:Code pattern]]

Version actuelle en date du 18 mars 2013 à 10:13

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;
Tip-20px.png Tip : Les patterns gérant des transactions longues utilisent le mode AutoBatch

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;
Outils personnels