« With transaction pattern (langage) » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 1 : | Ligne 1 : | ||
Le pattern transaction permet d'encapsuler une transaction. | Le pattern transaction permet d'encapsuler une transaction. | ||
=== | ===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 | ||
withP transaction do | |||
begin | begin | ||
inst := MyClass.Create; | inst := MyClass.Create; | ||
| Ligne 41 : | Ligne 41 : | ||
</source> | </source> | ||
=== | ===withP private transaction do=== | ||
Ce pattern gère une transaction privée. | Ce pattern gère une transaction privée. | ||
| Ligne 48 : | Ligne 48 : | ||
<source lang="delphi"> | <source lang="delphi"> | ||
begin | begin | ||
// | // withP private transaction do | ||
// | // | ||
old := ClassManager.NewTransContext; | old := ClassManager.NewTransContext; | ||
| Ligne 77 : | Ligne 77 : | ||
var inst:WFClasseB; | var inst:WFClasseB; | ||
begin | begin | ||
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> | ||
=== | ===withP long transaction do=== | ||
Ce pattern gère une transaction longue. | Ce pattern gère une transaction longue. | ||
| Ligne 129 : | Ligne 129 : | ||
</source> | </source> | ||
=== | ===withP private long transaction do=== | ||
Ce pattern gère une transaction longue privé. | Ce pattern gère une transaction longue privé. | ||
| Ligne 136 : | Ligne 136 : | ||
<source lang="delphi"> | <source lang="delphi"> | ||
begin | begin | ||
// with | // with privateP long(batchSize) transaction do | ||
// | // | ||
old := ClassManager.NewTransContext; | old := ClassManager.NewTransContext; | ||
Version du 15 septembre 2011 à 13:51
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"> begin end; </source>
withP private long transaction do
Ce pattern gère une transaction longue privé.
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>
Exemple d'utilisation :
<source lang="delphi"> begin end; </source>