Ja myslim, ze tady je tezke neco radit ....
Proc nemate nakup jako radek v db a u nej priznak, ze je zruseny ... pokud
tento priznak neni nahozeny, pak vracite,
jinak reknete, ze je objednavka jiz zrusena .... :-)))
jeeff napsal(a):
>
> Ahojte,
>
> vo web rozhrani riesim ako zamedzit viacnasobnemu zavolaniu nejakej metody.
>
> Priklad:
>
> majme metodu pre stornovanie nakupu pri ktorom sa vracia suma za nakup
> na ucet nakupujuceho. Je to spravene ako staticka metoda:
>
> public class NakupyDB
> {
> public static boolean stornoNakup(NakupBean nakup)
> {
> //najskor skontrolujme ci uz nahodou nie je stornovany
> if (nakupBean.isStornovany()) return false;
> //vratime sumu na ucet
> ....
> //nastavime ze je to stornovane
> nakupBean.setStornovany(true);
> //uloz nakup do DB
> ....
> return true;
> }
> }
>
> Tato metoda je volana z JSP stranky po kliknuti na prislusnu linku.
> Chcem zamedzit tomu, ze nakupujuci 2x klikne na linku, pripadne si
> otvori stranku v 2 oknach a naraz klikne 2x. V tom pripade by sa mu suma
> za nakup mohla vratila viac krat - ak by prvy thread presiel za test if
> (nakupBean.isStornovany()) return(false); a potom sa web server prepol
> do druheho threadu a ten by sa tiez dostal za tento test.
>
> Ako najjednoduchsie riesenie sa mi zda spravit celu metodu ako
> synchronized. Nie je z nej volany ziadny iny synchronized blok, takze by
> teoreticky nemalo dojst k deadlocku. Neviem ci by sa ale zamok spravne
> odomkol, keby doslo k nejakemu divnemu stavu, napr. Out Of Memmory alebo
> nieco podobne.
>
> Padol tu aj navrh o napisani filtra, ktory by neumoznil viac krat
> sucasne (pre daneho navstevnika) zavolat rovnake URL.
>
> Akym sposobom taketo situacie riesite vy?
>
--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic