Zdravim,

pochopitelne pesimisticke zamykani zaznamu je jednou z moznosti, dalsi moznosti 
resici zmineny problem konkurence je verzovani zaznamu (optimisticke rizeni 
konkurence, kdy se predpoklada, ze nejsou v DB horka mista). Pro pesimisticke 
zamykani zaznamu musi byt podpora jak na strane DB (napr. FOR UPDATE v Oracle) 
tak na strane frameworku. Pro reseni verzovani postacuje podpora na urovni 
frameworku a domnivam se, ze DB nemusi ani podporovat transakce.

Napr. hibernate zcela jiste umi lock, ktery se pro jiz zmineny Oracle prepise 
dotaz na SELECT ... FOR UPDATE. U nekterych EJB kontejneru (napr. BEA nebo 
OC4J) je mozno tento princip vynutit nastavenim a prekryt tak defaultni chovani 
s opakovanym nacitanim zaznamu, ktere ma podle me v teto oblasti urcite mezery.

Doufam, ze jsem nastinil alespon neco, doporucuji kouknout na Hibernate 
dokumentaci a pripadne zdrojove kody. Na nekolika projektech jsem Hibernate 
celkem ke sve spokojenosti pouzil, ale jen jednou jsem se setkal s verzovanim. 
Vetsinou jsem prave pouzival lock vzhledem k tomu, ze vetsinou jsem pracoval s 
Oracle nebo jinou DB s podporou tohoto mechanismu. Mel jsem ovsem nekdy 
vykonove problemy a musel jsem vytvorit pokud mozno strategii, kdy se zamykal 
vzdy jen nejaky vstupni radek a ne radky ve vsech tabulkach, ktere dohromady 
daji konkretni instanci...

JM

------------ Původní zpráva ------------
Od: Honza <[EMAIL PROTECTED]>
Předmět: Synchronizace persistentnich objektu
Datum: 04.10.2006 21:50:28
----------------------------------------
Zdravim,

muj dotaz se primo netyka Javy, ale spise navrhu aplikaci. Doufam ze neni prilis off-topic.

Jak se ve viceuzivatelskem prostredi resi sychronizace a zamykani
persistetnich dat?

At uz pisu dvou nebo tri vrstvou aplikaci, vzdycky se nakonec potkam s
problemem, kdy si jeden uzivatel vyzada nejaky objekt (ktery v DB
reprezentovan nekolika zaznamy v ruznych tabulkach) a tento objekt
upravuje nebo prohlizi.

V pripade, ze s timto objektem bude chtit pracovat i jiny uzivatel, tak
mu musim zmeny na takovemto objektu zakazat (zamek uz vlastni jiny
uzivatel).

Jedna se o klasickou situaci read/write zamku branici vzniku
inkonzistentnich dat. Read zamek muze mit kdokoli. Write zamek muze mit
jen jeden.

Napadlo me nekolik zpusobu reseni, ale zadny jsem si zatim nedokazal obhajit jako zivota schopny (na mapovani objektu DB-Java pouzivam
vlastni knihovnu). Resi nektere opensource frameworky tuto problematiku?
Resite ji vy ve svych aplikacich? Jak?

Predem velice dekuji za jakekoly ohlasy.

Honza




Odpovedet emailem