Lukas Barton wrote:
Ge wrote:
> Zdravím,
> je pěkné používat zámky read/write, ale myslim že to není zaručená cesta k 
> úspěchu.
> Ja radím použít některý framework, například Hibernate. Ten řeší operace nad 
> databází transakčně. Znamená to

uživatel požaduje data, Hibernate mu je vrátí, uživatel změní jejich stav, a 
Hibernate (na požádání nebo

automaticky) uloží změny do databáze (v transakci). Tím se vyhneš souběhu a 
dalším nepříjemnostem. Je dobre použít k

Hibernate Spring, ten ti práci s trasakcema ještě více zjednodušší. V podstatě 
se o ně nebudeš muset starat.
> Hibernate jsem použil na několik projektů a práce je opravdu jednoduchá. 
> Stačí trochu proniknout do ORM.
>
Problem je v tom, pokud chcete uzivateli data zobrazit na formular k
editaci.
To uz potom nemuze bezet v transakci.
Tam je nejlepsi spravne reseni verzovani zaznamu, pripadne jak psal Dagi
coarse grained locking (verzovani).

Dalsi problem je pokud chcete menit v jedne transakci hodne dat, potom 
pri pesimistickem zamykani dostanete dost nizkou propustnost - viz
teorie databazi a ruzne izolacni urovne transakci.
Ale tam uz zalezi na vice faktorech - jak objekty (tabulky) menite
(zavislosti na prectenych hodnotach), zda umi vase databaze MVCC (to by
vubec bylo na dlouho), apod.

Na ORM se porad divam jako na nastroj, ktery mi umoznuje rozumne
pohodlne obalit JDBC.
ORM proste nektere problemy nevyresi - vyresit nemuze, protoze ma pod
sebou jen relacni databazi.
Je napr. nesmysl to pouzivat pro batch processing (proste to nemuze
fungovat dost rychle) apod.

   Lukas
> doufam že odpovídám na tvůj dotaz....
>
> Ondra.
>

Ahoj Lukasi.
Nevím jestli tě správně chápu. Tak jen aby bylo jasno. :) Kdyz používáš zámky, 
můžeš si zamknout data, ktera chceš editovat (updatovat), jakmile změníš data, 
uložíš změny a zámky odstraníš.
Při transakčním zpracování, nemůžeš započat transakci při zobrazení editačního 
formuláře. Transakci nastartuješ až při samotné změně, ne při zobrazení dat pro 
editaci uživateli.
Pokud databáze umí řešit transakce efektivně, a přiznám se že tak hluboko jsem 
se jeste nedostal, (abych odlišil jak řeší transakce různé SRBD), tak by mělo 
vše proběhnout hladce.
Pokud potřebuješ data těsně po načtení uzamknout, protože je budeš chtít 
editovat, a záleží ti na tom aby si uživatelé navzájem nepřepisovali data, 
můžeš i v Hibernate uzamknout data. Například session.lock(t, LockMode.READ);. 
Se zámky jsem jestě nepracoval a nevím jaké přesně jsou tam potíže, ale vypadá 
to jednoduše a příjemně :).

Ondra.

Odpovedet emailem