Transaktions-Test über mehre DB-Verbindungen (Firebird bzw. IBTransaction)

05/11/2008 - 21:03 von Hubert Seidel | Report spam
Hi NG,

ich versuche mich an verteilte, und frage mich ob ich es
richtig mache: http://www.hubert-seidel.de/images/fbxatest.jpg

Auf dem Bild ist eine Minimal-Applikation zu sehen auf der ich
zwei DB-Verbindungen zusammen geklebt habe sowie ein paar
Inhalte der Properties aus dem Objekt-Inspektor.

In IBDatabase1 u. IBDatabase2 habe ich IBTransaktion1 zugewiesen.
Im Kern wird nun folgendes ausgeführt:

IBTransaction1.StartTransaction;
try
Insert -> DB1
Insert -> DB2 -> Extra provozierte Index-Verletzung
IBTransaction1.Commit;
except
IBTransaction1.Rollback;
// Exception wird nur für den Test "verschluckt" ;-)
end;

Das dies vernünftig Rückabgewickelt wird, ist eigentlich klar.
Wenn ich das richtig verstanden habe, arbeitet das ganze
intern mit einem 2-Phasen-Commit?!
D.h. eingelich teste ich den dan falsch, richtig?
Ich müsste die Index-Verletzung entfernen (also kein UNIQUE
INDEX oder eindeutige Werte für erfolgreiche Inserts)
und quasi eine Exception zwischen den Phasen erzeigen.
Richtig?
Hat jemand dazu eine Idee/Vorstellung was ich vor
habe und wie ich das testen kann?
(Ich hoffe, ich bin nicht völlig auf dem Holzweg :)

Ich habe irgendwie nicht sonderlich viele Informationen
gefunden mit denen ich etwas anfangen konnte.
Liegt aber daran das ich nicht weis wonach ich da suchen muss.

mfg.
Herby

http://www.hubert-seidel.de
 

Lesen sie die antworten

#1 NineBerry Schwarz
06/11/2008 - 12:10 | Warnen spam
Hallo Hubert.

Hubert Seidel wrote:

Das dies vernünftig Rückabgewickelt wird, ist eigentlich klar.
Wenn ich das richtig verstanden habe, arbeitet das ganze
intern mit einem 2-Phasen-Commit?!
D.h. eingelich teste ich den dan falsch, richtig?
Ich müsste die Index-Verletzung entfernen (also kein UNIQUE
INDEX oder eindeutige Werte für erfolgreiche Inserts)
und quasi eine Exception zwischen den Phasen erzeigen.



Eine Exception "zwischen den Phasen" kannst du nicht simulieren, Da die
Phasen ja im Firebird-Server ablaufen, nach außen hin atomar erscheinen.

Eine solche Exception kann eigentlich nur auftreten, wenn hardware-màßig
etwas schief làuft (Speicherfehler, Plattenfehler, Stromausfall) etc.

Neun

Ähnliche fragen