Dnes bych rád popsal pesimistické offline zamykání. Tento poslední díl mého mini-seriálu o zamykacích mechanismech navazuje na předchozí tři díly (1, 2, 3).
Důvody, proč někdy nestačí online zamykací mechanismy jsem popsal v minulém díle, nyní se budu tedy hned věnovat samotnému pesimistickému zamykání.
Pesimistické offline zamykání
Tento typ zamykání se nám hodí zejména v takových případech užití, kde pravděpodobnost "střetu" je velká nebo následky velké. Jen pro úplnost dodávám, že se jedná o offline zamykání, protože jinak bychom mohli použít Pesimistické online zamykání.Tento typ zamykání je řešen na aplikační úrovni aplikace a před jeho realizací je nutné si zodpovědět následující otázky:
- Co je potřeba zamykat? Objekt, mapu objektů nebo bude stačit jen určitý atribut objektu? Může se hodit např. tento přístup od Martina Fowlera.
- Kdy se data budou zamykat a odemykat?
- Jaký typ zámku použiji? Použiji zámek pouze na zápis dat nebo i pro jejich čtení?
- Jak budu identifikovat vlastníka zámku? Bude to HTTP Session ID nebo uživatelské ID nebo něco jiného?
- Jak budu udržovat zámky? Bude mi stačit interní paměť nebo budu potřebovat databázi.
- Jak budu uvolňovat zámky? Mám na mysli standardní případy, kdy někdo bude mít zamknutá data a odejde na oběd. Má se zámek po určité době automaticky uvolnit, dovolíme jiným uživatelům tento zámek získat?
Těch otázek není málo a od jejich odpovědí se odvyjí implementace. Znám dvě:
- Centrální zamykací systém (lock manager). Tento způsob používám, protože se mi líbí, že je to neinvazivní způsob (nemusím měnit objekty, pouze kde potřebuji přidám LockManager), je to centralizované řešení a dle potřeby mohu zvolit implementace uložení zámků - paměť vs. databáze.
- Ukládání zámků přímo v objektech. Ty objekty, které potřebuji zamykat vybavím speciálními atributy, abych poznal, že daný objekt je nebo není zamknutý.
Pozn.: Většinu informací, které jsem v této sérii článků prezentoval, jsem našel v knížce POJO in Facade.
1 komentář:
Zdravím Petře, předem díky za pěkné články. Uvítal bych ještě nějaký příklad použítí, případně konfigurace ORM nástroje, pak by byly články naprosto dokonalé :-). Měj se. Jakub
Okomentovat