« With transaction pattern (langage) » : différence entre les versions

De Wiki1000
Aucun résumé des modifications
 
(7 versions intermédiaires par un autre utilisateur non affiché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]]

Dernière version du 18 mars 2013 à 09:13

Le pattern transaction permet d'encapsuler une transaction.

withP transaction do

Ce pattern gère une transaction.

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

<source lang="delphi"> 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; </source>

Exemple d'utilisation :

<source lang="delphi"> begin

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

end; </source>

withP private transaction do

Ce pattern gère une transaction privée.

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

<source lang="delphi"> 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; </source>

Exemple d'utilisation :

<source lang="delphi"> 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; </source>

withP long transaction do

Ce pattern gère une transaction longue.

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

<source lang="delphi"> 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; </source>

Exemple d'utilisation :

<source lang="delphi"> // 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; </source>

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 :

<source lang="delphi"> 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; </source>