Uzamykání subjektů pomocí ORDA

Automaticky přeloženo z Deepl

Série ORDA pokračuje! V tomto příspěvku se podíváme na to, jak můžete v databázích používat zámky s koncepty ORDA! Nezřídka je třeba řešit konflikty, které mohou nastat, když několik uživatelů nebo procesů načítá a/nebo se pokouší upravit stejné záznamy současně. Zamykání záznamů je metodika používaná v relačních databázích k zamezení nekonzistentních aktualizací dat.

ORDA poskytuje kromě režimu zamykání, který již znáte (pesimistické zamykání), také optimistický režim zam ykání.

Příklad: Jak používat pesimistické zamykání pomocí ORDA

Different locking modes

Záznamy a položky

Jen pro připomenutí, záznam je fyzický záznam v databázi, ke kterému se přistupuje prostřednictvím entity. Entita je odkaz na záznam (viz část Entita ve slovníku pojmů). Záznamy se zamykají a odemykají prostřednictvím entit.

Optimistické zamykání

Při optimistickém zamykání je záznam před uložením zkontrolován, zda jej od jeho načtení v entitě nezměnily jiné procesy. Výhodou je, že záznam je uzamčen pouze během metody ukládání.

Optimistické zamykání se spoléhá na razítko záznamů. Každý záznam má interní razítko, které se automaticky inkrementuje při každém uložení záznamu do databáze. Pokud byl záznam od načtení entity aktualizován, metody save(), drop() a lock() vrátí specifický stavový kód, který indikuje, že se razítko změnilo. Pak se budete muset rozhodnout, jak tento konflikt vyřešit.

Ve výchozím nastavení pracuje ORDA s optimistickým zamykáním , ale k dispozici je i pesimistické zamykání .

PŘÍKLAD

C_OBJECT($employee;$statusSave)

// Get the first employee whose last name is "Wates"
$employee :=ds.Employee.query("lastName=:1"; "Wates").first()

If ($employee#Null)
// Set name to "Mac Arthur"
$employee .lastName:="Mac Arthur"
// Uložení zaměstnance
$statusSave :=$employee.save()
// Test if the save is successful
If ($statusSave.success)
ALERT ("Úspěšně uloženo!")
End if
End if
// Záznam v databázi byl aktualizován.

Jistě se už nemůžete dočkat, až se o optimistickém zamykání dozvíte více. Další příspěvek na blogu, plně věnovaný tomuto konceptu, se chystá již brzy. Zůstaňte naladěni!

Pessimistic locking

V režimu pesimistického zamykání jsou záznamy při čtení uzamčeny, takže je jiné procesy nemohou aktualizovat. Tím je zajištěno, že upravený záznam může být zapsán na úkor uzamčení záznamů pro ostatní uživatele. Záznam je uzamčen, i když k němu není souběžný přístup.

Při pesimistickém zamykání je nutné záznamy před aktualizací zamknout a po aktualizaci odemknout . Dokud je záznam uzamčen, ukládání/opouštění/zamykání záznamu v jiných procesech selže, dokud jej proces, který jej uzamkl, neodemkne.

Chcete-li entitu uzamknout, použijte metodu lock() a k odemknutí metodu unlock().

„Klasické“ 4D používá pesimistické zamykání.

PŘÍKLAD

C_OBJECT($employee;$statusLock;$statusSave;$statusUnLock)

// Get the first employee whose last name is "Wates"
$employee :=ds.Employee.query("lastName=:1"; "Wates").first()

If ($employee#Null)
$statusLock :=$employee.lock() // Lock the entity
// The entity has been successfully locked
If ($statusLock.success)
$employee .lastName:="Mac Arthur" // Set name to "Mac Arthur"
// Save employee-No need to check the status because the entity is locked
$statusSave :=$employee.save()
// Unlock entity, so other processes will be able to save/drop/lock it
$statusUnLock :=$employee.unlock()
End if
End if
// The record in the database has been updated

Nebojte se, že zapomenete záznam odemknout, ORDA jej automaticky odemkne, pokud na entitu, která jej uzamkla, již nejsou žádné odkazy.

Avatar
• Product Owner • Marie-Sophie Landrieu-Yvert se připojila k programovému týmu 4D jako Product Owner v roce 2017. Jako Product Owner má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací. Její úlohou je také zajistit, aby implementovaná funkce odpovídala potřebám zákazníka. Marie-Sophie vystudovala inženýrskou školu ESIGELEC a svou kariéru zahájila jako inženýrka v IBM v roce 1995. Podílela se na různých projektech (projekty údržby nebo výstavby) a pracovala jako vývojářka Cobol. Poté pracovala jako UML designer a Java developer. V poslední době byly jejími hlavními rolí analyzovat a psát funkčních požadavky a koordinovat obchodní a vývojové týmy.