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

Odpovedet emailem