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