Re: java.security.Permission

2006-07-27 Tema obsahu Richard Malaschitz
A este si treba pozriet Javadoc k samotnemu objektu java.lang.Object. Tam sa pise o metode hashCode(), ze musi byt implementovana tak aby dva objekty, ktore su equals() musia mat rovnaky hshCode(). 


Re: java.security.Permission

2006-07-27 Tema obsahu Kamzik-II

Dobre, ale potom nechapu proc neni soucasti
rodicovske tridy Permission zakladni implementace
zalozena treba na metode getName (), tak jako je toho
docileno v BasicPermission tride...

Ja se chtel jenom zeptat, jestli v tom neni nejakej
figl, nebo jestli je to jenom nedomyslenost...


- Original Message - 
From: Jiří Mareš [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 7:31 AM
Subject: Re: java.security.Permission




Ja bych teda pouzil javadoc, kde jsem se vysvetleni dobral naprosto v 
pohode ...


The required hashCode behavior for Permission Objects is the following:

   * Whenever it is invoked on the same Permission object more than once 
during an execution of a Java application, the
hashCode method must consistently return the same integer. This integer 
need not remain consistent from one execution of

an application to another execution of the same application.

   * If two Permission objects are equal according to the equals method, 
then calling the hashCode method on each of

the two Permission objects must produce the same integer result.

Nevim proc jsou tyto pozadavky, ale jsou. Standardni implementace hashcode 
vychazi z toho, jak je objekt alokovan, tj.
kde v heapu je a proto ma kazda instance jiny hash, zda ho pozaduji mit 
stejny i napric ruznymi instancemi JVM. Proto si

jej musite implementovat sam ...

Priste se mrknete do javadoc a pak se ptejte  :-)

Kamzik-II napsal(a):


Hm asi mate v tomhle pravdu :)
Jak se vyznate s Permission? Nemohl byste mi
poradit nejakej fine tutorial, kde je popsana tvorba
vlastni implementace? BtW: Diky
- Original Message - From: Lumír Návrat 
[EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Wednesday, July 26, 2006 10:16 PM
Subject: Re: java.security.Permission


No klasicky priklad se uvadi u entitnich objektu, kdy si predstav, ze
mas  vytisk knihy, ten je identifikovan jednak cislem titulu a dale
prirustkovym cislem v ramci daneho titulu.
Pokud by jsi pouzil defaultni implementaci, tak by se to porovnavalo
pouze na rovnost instanci.

To znamena, ze pokud by jsi udelal:

Vytisk v1 = new Vytisk(123455,1/2006);
Vytisk v2 = new Vytisk(123455,2/2006);
v1.equals(v2);   // vysledek je false, jelikoz:   v1 = this, v2 = object
a telo metody equals obsahuje return this == object, coz je porovnavani
adres instacni.

Proto je nutne provest nasledujici reimplementaci:

public boolean equals(Object object) {
   if (object == null) {
  return false;
   }
   if (object instanceof Vytisk) {
   Vytisk pomV = (Vytisk)object)
   return this.id ==  pomV  prirustek.equals(pomV.prirustek);
   }
   return false;
}

Samotna implementace hashcode sice neni zivotne nutna, ale je s ruznych
duvodu, ktere si jiz nepamatuji doporucena.

Lumi(r)

Kamzik-II wrote:

No tak to mi potom neni vubec jasne, proc
bych to mel reimplementovat


- Original Message - From: Lumír Návrat
[EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Wednesday, July 26, 2006 9:14 PM
Subject: Re: java.security.Permission



Nazdar,

strucne co si pamatuji z knizky 57 rad efektivne v JAVe (nebo
obdobne) od Blochua, tak to vychazi ze zakladu jedinecnosti objektu a
zpusobu jeho porovnavani ve virtualnim stroji. Tyto metody se dedi
primo z tridy Object a maji je implementovane vsechny tridy. pravidlo
je takove, ze equals zajistuje shodu na urovni aplikace a hashcode na
urovni VM = v ruznych instancich VM hashcode myslim muze byt ruzny,
zatimco equals je vzdy stejne, ale nejsem si tim ted jisty:(

Plati vsak, pokud se reimplementuje equals, tak se musi
reimplementovat i hashcode

Lumi(r)

Kamzik-II wrote:

Dobry vecer,
prokousavam se bezpecnosti v Jave
a narazil jsem na tridu Permission.
Rad bych si napsal svou vlastni implementaci,
ale trochu me desi nektere metody, oznacene, jako
abstraktni, napriklad mi neni jasne, proc by mel
Permission objekt povinne reimplementovat metodu hashcode a equals,
to equals bych mozna jeste pochopil,
ale hashcode mi prijde jako uplna blbost.
















--
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic






Re: java.security.Permission

2006-07-27 Tema obsahu Lukas Barton




Kamzik-II wrote:

  
  
  
  Ale paklize by tohle vzdy platilo,
pak by byla uplna blbost
  predefinovat metodu equals, protoze
by v ni stacilo porovnavat hascode, kdezto v rodicovske implementaci se
porovnavaji pouze instance

Ta implikace plati pouze jednim smerem!

Dva objekty muzou mit stejny hashCode, ale dle metody equals se
nerovnaji.
Hashcode nemusi byt perfektni ;-)





Re: java.security.Permission

2006-07-27 Tema obsahu Jiří Mareš

Ja bych doporucoval precist si nejake zaklady programovani, kde se dozvite 
takovedle zalezitosti a pak hned navazat
zakladama programovani v jave :-))

Kamzik-II napsal(a):
 Ale paklize by tohle vzdy platilo, pak by byla uplna blbost
 predefinovat metodu equals, protoze by v ni stacilo porovnavat hascode,
 kdezto v rodicovske implementaci se porovnavaji pouze instance.
 
 - Original Message -
 *From:* Richard Malaschitz mailto:[EMAIL PROTECTED]
 *To:* Java mailto:konference@java.cz
 *Sent:* Thursday, July 27, 2006 10:58 AM
 *Subject:* Re: java.security.Permission
 
 A este si treba pozriet Javadoc k samotnemu objektu
 java.lang.Object. Tam sa pise o metode hashCode(), ze musi byt
 implementovana tak aby dva objekty, ktore su equals() musia mat
 rovnaky hshCode().
 
 

-- 
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic


Re: java.security.Permission

2006-07-27 Tema obsahu Martin Kuba

Kamzik-II wrote:


Ale paklize by tohle vzdy platilo, pak by byla uplna blbost
predefinovat metodu equals, protoze by v ni stacilo porovnavat hascode, 
kdezto v rodicovske implementaci se porovnavaji pouze instance.


Mozna byste si o tom mel neco precist, dobry clanek je treba
http://www.javaworld.com/javaworld/jw-01-1999/jw-01-object-p2.html

hashCode() vraci integer, takze moznych ruznych ( z hlediska equals())
objektu muze byt vice, nez je integer hodnot, napriklad
ruznych objektu typu Long. Proto equals() nemuze jenom porovnavat 
hashCode() hodnoty.


Makub
--
~~
Supercomputing Center Brno Martin Kuba
Institute of Computer Scienceemail: [EMAIL PROTECTED]
Masaryk University http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775
--


smime.p7s
Description: S/MIME Cryptographic Signature


Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Tomas Hubalek
Co takhle to resit jako constraint/trigger v databazi? Jde prece o to, 
aby data sedele, tj. abych mel bud nakup a nebo zaznam o stornu. Pokud 
mate spravne integritni omezeni v databazi, nemela by se vam takovato 
vec stat.


Tom

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?





Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Mirek Stohr
Ja to resil pres ulozen objektu nakupniho kosiku do session uzivatele, 
plus synchronized metoda aby ji nemohl volat dokud nedobehla. Pokud ma 
dve okna prohlizece, jsou to dve session, takze problem nevznikne -- 
nakupni kosiky ma taky dva, a stornuje kazdy zvlast. A session listener 
v metode  sessionDestroyed() kosik automaticky vysype, pokud v nem tedy 
neco je. Pokud padne cely server kvuli OutOfMemoryError, tak to pravd. 
bude vetsi problem a bude se to muset resit rucne. Funguje to zatim 
celkem dobre :-))


Mirek


Tomas Hubalek napsal(a):
Co takhle to resit jako constraint/trigger v databazi? Jde prece o to, 
aby data sedele, tj. abych mel bud nakup a nebo zaznam o stornu. Pokud 
mate spravne integritni omezeni v databazi, nemela by se vam takovato 
vec stat.


Tom

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?






Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Tomas Hubalek
Podle me tu nejde ale o nakupni kosik, ale o to, aby z uctu neodesly 
penize dvakrat. A to si opravdu myslim ze je integritni omezeni a ne 
zalezitost business logiky. Navic napsat trigger, ktery se zavola 
vzdycky pri stornu objednavky a podiva se, jestli je na storno narok je 
celkem jednoducha vec.


Na urovni business logiky/web ui pak uz jenom jednoduse odchytite 
patricnou exception a tu pak ukazete uzivateli (samozrejme bez 
stacktrace ;-))...


Tom

Mirek Stohr napsal(a):
Ja to resil pres ulozen objektu nakupniho kosiku do session uzivatele, 
plus synchronized metoda aby ji nemohl volat dokud nedobehla. Pokud ma 
dve okna prohlizece, jsou to dve session, takze problem nevznikne -- 
nakupni kosiky ma taky dva, a stornuje kazdy zvlast. A session 
listener v metode  sessionDestroyed() kosik automaticky vysype, pokud 
v nem tedy neco je. Pokud padne cely server kvuli OutOfMemoryError, 
tak to pravd. bude vetsi problem a bude se to muset resit rucne. 
Funguje to zatim celkem dobre :-))


Mirek


Tomas Hubalek napsal(a):
Co takhle to resit jako constraint/trigger v databazi? Jde prece o 
to, aby data sedele, tj. abych mel bud nakup a nebo zaznam o stornu. 
Pokud mate spravne integritni omezeni v databazi, nemela by se vam 
takovato vec stat.


Tom

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?










Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Jiří Mareš

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


Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II



O boze, equals tady nekdo pekne vysvetlil 
na
vytiscich knih, hascode vicemene taky chapu, 
ale
neni mi jasne na co je mi dobrej ;-)

- Original Message - 

  From: 
  Vit Novak 
  To: 'Java' 
  Sent: Thursday, July 27, 2006 1:07 
  PM
  Subject: equals a hashCode (WAS: 
  java.security.Permission)
  
  
  Zdravim.
  
  Doporucuji precist si 
  knizku od pana Blocha (cesky Java efektivne, anglicky Effective Java). Pan 
  Bloch tuto problematiku rozebira pomerne podrobne a myslim, ze tohle patri k 
  zakladnim znalostem, bez kterych dobry Java kod proste psat nebudete. Jedna se 
  totiz o to, ze predefinovani metody equals nebo hashCode vas zavazuje k 
  dodrzeni urcitych pravidel, bez kterych vam treba Collections budou chodit 
  _velmi_ divne nebo 
  vubec.
  
  Samozrejme je mozne 
  nadefinovat hashCode a equals implementovat jen jako porovnani hashCode, to 
  ovsem casto neni to, co chcete. Vetsinou jdete obracene  nejak si urcite, kdy 
  maji byt dve instance nejake tridy rovne a to naimplementujete. Napriklad 
  budete mozna chtit aby dve ruzne instance tridy mujBigInt, reprezentujici 
  cislo 37, vratily na equals true, ale reprezentace cisla 37 a cisla 
  56498765654987984632159789 by na equals true vratit nemela. Pak Vas ovsem 
  hashCode zavazuje, aby equals instance vracely stejny hashCode, ale nijak Vas 
  nenuti, aby pro dve instance, ktere equals nejsou byly hashCode ruzne. A 
  zrovna u mujBigIntu hashCode tak, aby pro kazda dve nonequals cisla vratil 
  ruzne hashe, proste nevymyslite.
  
  Dalsi vec je, ze kod, 
  kde equals je implementovano jako porovnani hashi, nebude zrovna moc 
  citelny...
  
  Toz tak, hodne 
  stesti
  
  V.
  
  
  
  
  
  From: 
  [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kamzik-IISent: 27. července 2006 12:49To: JavaSubject: Re: 
  java.security.Permission
  
  
  Ale paklize by tohle vzdy platilo, 
  pak by byla uplna blbost
  
  predefinovat metodu equals, 
  protoze by v ni stacilo porovnavat hascode, kdezto v rodicovske implementaci 
  se porovnavaji pouze instance.
  

- Original Message - 


From: Richard Malaschitz 


To: Java 


Sent: 
Thursday, July 27, 2006 10:58 AM

Subject: Re: 
java.security.Permission


A este si treba pozriet Javadoc k 
samotnemu objektu java.lang.Object. Tam sa pise o metode hashCode(), ze musi 
byt implementovana tak aby dva objekty, ktore su equals() musia mat rovnaky 
hshCode(). 



Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Kamil Podlesak

jeeff wrote:



Takze znova opakujem, storno nakupu je len priklad, moze to byt 
cokolvek co nechcem aby sa cez web rozhranie dalo zavolat 2x nez to 
zbehne cele do konca. Vobec to nemusi pracovat s databazou. Riesite 
taketo veci, alebo si poviete, ze taka situacia nenastane a kaslete na 
to?


Samozrejme, pro vsechny multithreadove aplikace (a vubec nezalezi na tom 
zda jsou webove ci ne) plati, ze je nutne synchronizovat (ci pouzit 
nejakou sofistikovanejsi techniku).


Pouzivani synchronized neni neco navic - je to jedna ze zakladnich 
veci nutna pri psani v Jave. Vsude a stale. Tim samozrejme nemyslim ze 
by se vsude melo cpat synchronized, chran buh - jen je nutne nad tim 
premyslet.


--
Kamil Podlesak [EMAIL PROTECTED]



Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamil Podlesak

Kamzik-II wrote:


O boze, equals tady nekdo pekne vysvetlil na
vytiscich knih, hascode vicemene taky chapu, ale
neni mi jasne na co je mi dobrej ;-)


Hashcode je dobrej v okamziku, kdyz se patricny objekt uklada do 
hashtabulky ci mnoziny. A to s nejvetsi pravdepodobnosti bude.


--
Kamil Podlesak [EMAIL PROTECTED]




Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Pavel Kubal



Porovnavat objekty podle hashCode je hloupost. 
HashCode vubec nemusi byt unikatni. Tzn. muzete mit vice ruznych objektu se 
stejnym hashCodem. Neni zadny problem vracet konstantu jako hashCode, ale je to 
krajne neefektivni reseni.

  - Original Message - 
  From: 
  Kamzik-II 
  
  To: Java 
  Sent: Thursday, July 27, 2006 3:24 
  PM
  Subject: Re: equals a hashCode (WAS: 
  java.security.Permission)
  
  O boze, equals tady nekdo pekne vysvetlil 
  na
  vytiscich knih, hascode vicemene taky chapu, 
  ale
  neni mi jasne na co je mi dobrej ;-)
  
  - Original Message - 
  
From: 
Vit Novak 
To: 'Java' 
Sent: Thursday, July 27, 2006 1:07 
PM
Subject: equals a hashCode (WAS: 
java.security.Permission)


Zdravim.

Doporucuji precist 
si knizku od pana Blocha (cesky Java efektivne, anglicky Effective Java). 
Pan Bloch tuto problematiku rozebira pomerne podrobne a myslim, ze tohle 
patri k zakladnim znalostem, bez kterych dobry Java kod proste psat 
nebudete. Jedna se totiz o to, ze predefinovani metody equals nebo hashCode 
vas zavazuje k dodrzeni urcitych pravidel, bez kterych vam treba Collections 
budou chodit _velmi_ divne 
nebo vubec.

Samozrejme je mozne 
nadefinovat hashCode a equals implementovat jen jako porovnani hashCode, to 
ovsem casto neni to, co chcete. Vetsinou jdete obracene  nejak si urcite, 
kdy maji byt dve instance nejake tridy rovne a to naimplementujete. 
Napriklad budete mozna chtit aby dve ruzne instance tridy mujBigInt, 
reprezentujici cislo 37, vratily na equals true, ale reprezentace cisla 37 a 
cisla 56498765654987984632159789 by na equals true vratit nemela. Pak Vas 
ovsem hashCode zavazuje, aby equals instance vracely stejny hashCode, ale 
nijak Vas nenuti, aby pro dve instance, ktere equals nejsou byly hashCode 
ruzne. A zrovna u mujBigIntu hashCode tak, aby pro kazda dve nonequals cisla 
vratil ruzne hashe, proste nevymyslite.

Dalsi vec je, ze 
kod, kde equals je implementovano jako porovnani hashi, nebude zrovna moc 
citelny...

Toz tak, hodne 
stesti

V.





From: 
[EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kamzik-IISent: 27. července 2006 
12:49To: JavaSubject: Re: 
java.security.Permission


Ale paklize by tohle vzdy 
platilo, pak by byla uplna blbost

predefinovat metodu equals, 
protoze by v ni stacilo porovnavat hascode, kdezto v rodicovske implementaci 
se porovnavaji pouze instance.

  
  - Original Message - 
  
  
  From: Richard Malaschitz 
  
  
  To: Java 
  
  
  Sent: 
  Thursday, July 27, 2006 10:58 AM
  
  Subject: Re: 
  java.security.Permission
  
  
  A este si 
  treba pozriet Javadoc k samotnemu objektu java.lang.Object. Tam sa pise o 
  metode hashCode(), ze musi byt implementovana tak aby dva objekty, ktore 
  su equals() musia mat rovnaky hshCode(). 
  !DSPAM:44c8be3a124801581612101! 



Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II

Jo jo jasne, ale me spis zajima, proc je
v ramci vm a ne v ramci aplikace, btw: neni to nahodou to same?


- Original Message - 
From: Kamil Podlesak [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 3:25 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Kamzik-II wrote:


O boze, equals tady nekdo pekne vysvetlil na
vytiscich knih, hascode vicemene taky chapu, ale
neni mi jasne na co je mi dobrej ;-)


Hashcode je dobrej v okamziku, kdyz se patricny objekt uklada do 
hashtabulky ci mnoziny. A to s nejvetsi pravdepodobnosti bude.


--
Kamil Podlesak [EMAIL PROTECTED]







RE: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Moravec Jan



V 
HashMap,Hashtable apod. V nich jsou prvky organizovany dle jejich hashcodu 
(rychlejsi vyhodnoceni (ne)shody pri hledani) a teprve v zaverecne fazy se 
pouzijeequals. V hash tabulkach jsou totiz prvky organizovany dle jejich 
hashcode (kolize se resi prostym retezenim za sebou, nebo do spojoveho 
seznamu).

Tudiz 
pri dotazech typu containsKey, get apod senejprve hleda dle hashcode a 
nasledne se provadi porovnani pres equals.

Honza

  -Original Message-From: [EMAIL PROTECTED] 
  [mailto:[EMAIL PROTECTED]On Behalf Of 
  Kamzik-IISent: Thursday, July 27, 2006 3:25 PMTo: 
  JavaSubject: Re: equals a hashCode (WAS: 
  java.security.Permission)
  O boze, equals tady nekdo pekne vysvetlil 
  na
  vytiscich knih, hascode vicemene taky chapu, 
  ale
  neni mi jasne na co je mi dobrej ;-)
  
  - Original Message - 
  
From: 
Vit Novak 
To: 'Java' 
Sent: Thursday, July 27, 2006 1:07 
PM
Subject: equals a hashCode (WAS: 
java.security.Permission)


Zdravim.

Doporucuji precist 
si knizku od pana Blocha (cesky Java efektivne, anglicky Effective Java). 
Pan Bloch tuto problematiku rozebira pomerne podrobne a myslim, ze tohle 
patri k zakladnim znalostem, bez kterych dobry Java kod proste psat 
nebudete. Jedna se totiz o to, ze predefinovani metody equals nebo hashCode 
vas zavazuje k dodrzeni urcitych pravidel, bez kterych vam treba Collections 
budou chodit _velmi_ divne 
nebo vubec.

Samozrejme je mozne 
nadefinovat hashCode a equals implementovat jen jako porovnani hashCode, to 
ovsem casto neni to, co chcete. Vetsinou jdete obracene  nejak si urcite, 
kdy maji byt dve instance nejake tridy rovne a to naimplementujete. 
Napriklad budete mozna chtit aby dve ruzne instance tridy mujBigInt, 
reprezentujici cislo 37, vratily na equals true, ale reprezentace cisla 37 a 
cisla 56498765654987984632159789 by na equals true vratit nemela. Pak Vas 
ovsem hashCode zavazuje, aby equals instance vracely stejny hashCode, ale 
nijak Vas nenuti, aby pro dve instance, ktere equals nejsou byly hashCode 
ruzne. A zrovna u mujBigIntu hashCode tak, aby pro kazda dve nonequals cisla 
vratil ruzne hashe, proste nevymyslite.

Dalsi vec je, ze 
kod, kde equals je implementovano jako porovnani hashi, nebude zrovna moc 
citelny...

Toz tak, hodne 
stesti

V.





From: 
[EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kamzik-IISent: 27. července 2006 
12:49To: JavaSubject: Re: 
java.security.Permission


Ale paklize by tohle vzdy 
platilo, pak by byla uplna blbost

predefinovat metodu equals, 
protoze by v ni stacilo porovnavat hascode, kdezto v rodicovske implementaci 
se porovnavaji pouze instance.

  
  - Original Message - 
  
  
  From: Richard Malaschitz 
  
  
  To: Java 
  
  
  Sent: 
  Thursday, July 27, 2006 10:58 AM
  
  Subject: Re: 
  java.security.Permission
  
  
  A este si 
  treba pozriet Javadoc k samotnemu objektu java.lang.Object. Tam sa pise o 
  metode hashCode(), ze musi byt implementovana tak aby dva objekty, ktore 
  su equals() musia mat rovnaky hshCode(). 
  


Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu jeeff

Ahoj,

to je presne jasne aj mne, v povodnom prispevku som pisal ze ako
najjednoduchsie riesenie vidim dat danu metodu synchronized. Chcel som
len vediet, ci je to spravne riesenie, alebo pouzivate nejaky iny postup.

Bojim sa toho, ze ked z jednej synchronized metody zavolam inu
synchronized metodu ze mi vznikne deadlock, takze preto sa snazim najst
aj ine riesenie.


Kamil Podlesak wrote:

jeeff wrote:



Takze znova opakujem, storno nakupu je len priklad, moze to byt 
cokolvek co nechcem aby sa cez web rozhranie dalo zavolat 2x nez to 
zbehne cele do konca. Vobec to nemusi pracovat s databazou. Riesite 
taketo veci, alebo si poviete, ze taka situacia nenastane a kaslete 
na to?


Samozrejme, pro vsechny multithreadove aplikace (a vubec nezalezi na 
tom zda jsou webove ci ne) plati, ze je nutne synchronizovat (ci 
pouzit nejakou sofistikovanejsi techniku).


Pouzivani synchronized neni neco navic - je to jedna ze zakladnich 
veci nutna pri psani v Jave. Vsude a stale. Tim samozrejme nemyslim ze 
by se vsude melo cpat synchronized, chran buh - jen je nutne nad tim 
premyslet.





--
jeeff


Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II
Koukal sem do toho JavaDocu a neni mi teda jasne, k cemu by se to dalo 
vyuzit... Je tam psano o hashtables, ktere jsem asi taky nepochopil, nebo 
nwim, asi jsem uplne mimo, myslel jsem, ze je to nejake id objektu, ale 
pokud stejne cislo muze vracet vic objektu, tak se to neda pouzit ani na 
to...
- Original Message - 
From: Kamzik-II [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 3:30 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Jo jo jasne, ale me spis zajima, proc je
v ramci vm a ne v ramci aplikace, btw: neni to nahodou to same?


- Original Message - 
From: Kamil Podlesak [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 3:25 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Kamzik-II wrote:


O boze, equals tady nekdo pekne vysvetlil na
vytiscich knih, hascode vicemene taky chapu, ale
neni mi jasne na co je mi dobrej ;-)


Hashcode je dobrej v okamziku, kdyz se patricny objekt uklada do 
hashtabulky ci mnoziny. A to s nejvetsi pravdepodobnosti bude.


--
Kamil Podlesak [EMAIL PROTECTED]










Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II



Aha takze ciste jenom kvuli rychlosti?

  - Original Message - 
  From: 
  Moravec 
  Jan 
  To: Java 
  Sent: Thursday, July 27, 2006 3:32 
  PM
  Subject: RE: equals a hashCode (WAS: 
  java.security.Permission)
  
  V 
  HashMap,Hashtable apod. V nich jsou prvky organizovany dle jejich 
  hashcodu (rychlejsi vyhodnoceni (ne)shody pri hledani) a teprve v zaverecne 
  fazy se pouzijeequals. V hash tabulkach jsou totiz prvky organizovany 
  dle jejich hashcode (kolize se resi prostym retezenim za sebou, nebo do 
  spojoveho seznamu).
  
  Tudiz pri dotazech typu containsKey, get apod senejprve hleda dle 
  hashcode a nasledne se provadi porovnani pres equals.
  
  Honza
  
-Original Message-From: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED]On Behalf Of 
Kamzik-IISent: Thursday, July 27, 2006 3:25 PMTo: 
JavaSubject: Re: equals a hashCode (WAS: 
java.security.Permission)
O boze, equals tady nekdo pekne vysvetlil 
na
vytiscich knih, hascode vicemene taky chapu, 
ale
neni mi jasne na co je mi dobrej 
;-)

- Original Message - 

  From: 
  Vit Novak 
  To: 'Java' 
  Sent: Thursday, July 27, 2006 1:07 
  PM
  Subject: equals a hashCode (WAS: 
  java.security.Permission)
  
  
  Zdravim.
  
  Doporucuji 
  precist si knizku od pana Blocha (cesky Java efektivne, anglicky Effective 
  Java). Pan Bloch tuto problematiku rozebira pomerne podrobne a myslim, ze 
  tohle patri k zakladnim znalostem, bez kterych dobry Java kod proste psat 
  nebudete. Jedna se totiz o to, ze predefinovani metody equals nebo 
  hashCode vas zavazuje k dodrzeni urcitych pravidel, bez kterych vam treba 
  Collections budou chodit _velmi_ divne nebo 
  vubec.
  
  Samozrejme je 
  mozne nadefinovat hashCode a equals implementovat jen jako porovnani 
  hashCode, to ovsem casto neni to, co chcete. Vetsinou jdete obracene  
  nejak si urcite, kdy maji byt dve instance nejake tridy rovne a to 
  naimplementujete. Napriklad budete mozna chtit aby dve ruzne instance 
  tridy mujBigInt, reprezentujici cislo 37, vratily na equals true, ale 
  reprezentace cisla 37 a cisla 56498765654987984632159789 by na equals true 
  vratit nemela. Pak Vas ovsem hashCode zavazuje, aby equals instance 
  vracely stejny hashCode, ale nijak Vas nenuti, aby pro dve instance, ktere 
  equals nejsou byly hashCode ruzne. A zrovna u mujBigIntu hashCode tak, aby 
  pro kazda dve nonequals cisla vratil ruzne hashe, proste 
  nevymyslite.
  
  Dalsi vec je, ze 
  kod, kde equals je implementovano jako porovnani hashi, nebude zrovna moc 
  citelny...
  
  Toz tak, hodne 
  stesti
  
  V.
  
  
  
  
  
  From: 
  [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kamzik-IISent: 27. července 2006 
  12:49To: 
  JavaSubject: Re: 
  java.security.Permission
  
  
  Ale paklize by tohle vzdy 
  platilo, pak by byla uplna blbost
  
  predefinovat metodu equals, 
  protoze by v ni stacilo porovnavat hascode, kdezto v rodicovske 
  implementaci se porovnavaji pouze 
  instance.
  

- Original Message - 


From: Richard Malaschitz 


To: Java 


Sent: 
Thursday, July 27, 2006 10:58 AM

Subject: Re: 
java.security.Permission


A este si 
treba pozriet Javadoc k samotnemu objektu java.lang.Object. Tam sa pise 
o metode hashCode(), ze musi byt implementovana tak aby dva objekty, 
ktore su equals() musia mat rovnaky hshCode(). 



RE: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Moravec Jan



To je 
daleko starsi koncept. Pamatuji se, ze ve skole jsme se o tom ucili v zakladech 
programovani a to bylo min 2 roky pred Javou (uz jsemkmet 
;)
H.

  -Original Message-From: [EMAIL PROTECTED] 
  [mailto:[EMAIL PROTECTED]On Behalf Of 
  Kamzik-IISent: Thursday, July 27, 2006 3:41 PMTo: 
  JavaSubject: Re: equals a hashCode (WAS: 
  java.security.Permission)
  Hm dumyslne ;-)
  Ti navrhari javy nebyli uplne "blbi" 
  :)
  
- Original Message - 
From: 
Moravec 
Jan 
To: Java 
Sent: Thursday, July 27, 2006 3:38 
PM
Subject: RE: equals a hashCode (WAS: 
java.security.Permission)

Trefa do cernyho ;) Pres hashcode se "nablizite", pres equals 
dohledate. Princip je ten, ze nedelate equals pres vsechno (u slozitejsich 
objektu muze byt pomale,treba i u Stringu by ten equals nemusel byt 
uplne idealni).

H.
-Original Message-From: 
[EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED]On Behalf Of 
Kamzik-IISent: Thursday, July 27, 2006 3:37 PMTo: 
JavaSubject: Re: equals a hashCode (WAS: 
java.security.Permission)

  Aha takze ciste jenom kvuli 
  rychlosti?
  
- Original Message - 
From: 
Moravec Jan 
To: Java 
Sent: Thursday, July 27, 2006 3:32 
PM
Subject: RE: equals a hashCode 
(WAS: java.security.Permission)

V HashMap,Hashtable apod. V nich jsou prvky organizovany 
dle jejich hashcodu (rychlejsi vyhodnoceni (ne)shody pri hledani) a 
teprve v zaverecne fazy se pouzijeequals. V hash tabulkach jsou 
totiz prvky organizovany dle jejich hashcode (kolize se resi prostym 
retezenim za sebou, nebo do spojoveho seznamu).

Tudiz pri dotazech typu containsKey, get apod senejprve 
hleda dle hashcode a nasledne se provadi porovnani pres 
equals.

Honza

  -Original Message-From: 
  [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]On 
  Behalf Of Kamzik-IISent: Thursday, July 27, 2006 3:25 
  PMTo: JavaSubject: Re: equals a hashCode (WAS: 
  java.security.Permission)
  O boze, equals tady nekdo pekne vysvetlil 
  na
  vytiscich knih, hascode vicemene taky 
  chapu, ale
  neni mi jasne na co je mi dobrej 
  ;-)
  
  - Original Message - 
  
From: 
Vit Novak 
To: 'Java' 
Sent: Thursday, July 27, 2006 
1:07 PM
Subject: equals a hashCode 
(WAS: java.security.Permission)


Zdravim.

Doporucuji 
precist si knizku od pana Blocha (cesky Java efektivne, anglicky 
Effective Java). Pan Bloch tuto problematiku rozebira pomerne 
podrobne a myslim, ze tohle patri k zakladnim znalostem, bez kterych 
dobry Java kod proste psat nebudete. Jedna se totiz o to, ze 
predefinovani metody equals nebo hashCode vas zavazuje k dodrzeni 
urcitych pravidel, bez kterych vam treba Collections budou chodit 
_velmi_ divne nebo 
vubec.

Samozrejme 
je mozne nadefinovat hashCode a equals implementovat jen jako 
porovnani hashCode, to ovsem casto neni to, co chcete. Vetsinou 
jdete obracene  nejak si urcite, kdy maji byt dve instance nejake 
tridy rovne a to naimplementujete. Napriklad budete mozna chtit aby 
dve ruzne instance tridy mujBigInt, reprezentujici cislo 37, vratily 
na equals true, ale reprezentace cisla 37 a cisla 
56498765654987984632159789 by na equals true vratit nemela. Pak Vas 
ovsem hashCode zavazuje, aby equals instance vracely stejny 
hashCode, ale nijak Vas nenuti, aby pro dve instance, ktere equals 
nejsou byly hashCode ruzne. A zrovna u mujBigIntu hashCode tak, aby 
pro kazda dve nonequals cisla vratil ruzne hashe, proste 
nevymyslite.

Dalsi vec 
je, ze kod, kde equals je implementovano jako porovnani hashi, 
nebude zrovna moc citelny...

Toz tak, 
hodne stesti

V.





From: 
[EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
On Behalf Of 
Kamzik-IISent: 27. července 2006 
12:49To: 
JavaSubject: Re: 
java.security.Permission


Ale paklize by tohle 
vzdy platilo, pak by byla uplna 
blbost

predefinovat metodu 
equals, protoze by v ni stacilo porovnavat hascode, kdezto v 

Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Pavel Kubal
Predstavte si kolekci jako soubor plechovek. Kazda plechovka ma cislo podle
hashCode a obsahuje urcity pocet prvku.

Dejme tomu, ze se hashCode pro kazdy klic v HashMap pocita tak, ze u kazdeho
pismena se zjisti poradi v abecede a pricte se k vyslednemu hashCode.

mame klice : Mary(20), Amy(15), May(15), Dirk(34) - hodnoty nemusite
prepocitavat...nejsou presne, ale pro ilustraci to staci

takze plechovka s cislem 20 bude obsahovat klic Mary, plechovka s cislem
15 klice Amy a May atd.

Vyhledavani v kolekcich funguje tak, ze se pomoci hashCode najde spravna
plechovka a ta se projde pomoci metody equals!

Muzete vracet konstantu jako hashCode, ale to by bylo neefektivni - jedna
plechovka a prilis mnoho volani equals. Takze je vyhodne vracet hodnotu
vypocitanou z atributu klice.

Je dulezite si uvedomit, ze hashCode se musi pocitat tak, aby bylo
KONZISTENTNI. Tzn. nemuzeme ho pocitat pomoci transientnich atributu.
Mohl byste ulozit jiny hashCode, nez pomoci ktereho budete hledat. Tzn.
objekt byste podle daneho hashCode nemohl vubec dohledat. Stejne tak by mohl
fungovat nahodne generovany hashCode.

Takze hashCode neni jen o rychlosti, ale take o fungovani v kolekcich!

Doufam, ze to trochu pomohlo.

- Original Message - 
From: Kamzik-II [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 3:36 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


 Koukal sem do toho JavaDocu a neni mi teda jasne, k cemu by se to dalo
 vyuzit... Je tam psano o hashtables, ktere jsem asi taky nepochopil, nebo
 nwim, asi jsem uplne mimo, myslel jsem, ze je to nejake id objektu, ale
 pokud stejne cislo muze vracet vic objektu, tak se to neda pouzit ani na
 to...
 - Original Message - 
 From: Kamzik-II [EMAIL PROTECTED]
 To: Java konference@java.cz
 Sent: Thursday, July 27, 2006 3:30 PM
 Subject: Re: equals a hashCode (WAS: java.security.Permission)


  Jo jo jasne, ale me spis zajima, proc je
  v ramci vm a ne v ramci aplikace, btw: neni to nahodou to same?
 
 
  - Original Message - 
  From: Kamil Podlesak [EMAIL PROTECTED]
  To: Java konference@java.cz
  Sent: Thursday, July 27, 2006 3:25 PM
  Subject: Re: equals a hashCode (WAS: java.security.Permission)
 
 
  Kamzik-II wrote:
 
  O boze, equals tady nekdo pekne vysvetlil na
  vytiscich knih, hascode vicemene taky chapu, ale
  neni mi jasne na co je mi dobrej ;-)
 
  Hashcode je dobrej v okamziku, kdyz se patricny objekt uklada do
  hashtabulky ci mnoziny. A to s nejvetsi pravdepodobnosti bude.
 
  -- 
  Kamil Podlesak [EMAIL PROTECTED]
 
 
 
 



 !DSPAM:44c8c0dd124801367610778!







Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Jiří Mareš

Synchronized nemusi byt idealni, protoze je to synchronized pro cely system a 
ne jenom pro jednoho uzivatele, navic co
kdyz vam to nekdy v budoucnu pobezi na vice strojich ...

Ja myslim, ze prave z tohoto duvodu vznikly transakce, tak je kurna pouzivejte 
... a ze se az na konci zjisti, ze se
neco delalo zbytecne, no pak tu mame rollback, ne?

jeeff napsal(a):
 
 Ahoj,
 
 to je presne jasne aj mne, v povodnom prispevku som pisal ze ako
 najjednoduchsie riesenie vidim dat danu metodu synchronized. Chcel som
 len vediet, ci je to spravne riesenie, alebo pouzivate nejaky iny postup.
 
 Bojim sa toho, ze ked z jednej synchronized metody zavolam inu
 synchronized metodu ze mi vznikne deadlock, takze preto sa snazim najst
 aj ine riesenie.
 
 
 Kamil Podlesak wrote:
 jeeff wrote:


 Takze znova opakujem, storno nakupu je len priklad, moze to byt
 cokolvek co nechcem aby sa cez web rozhranie dalo zavolat 2x nez to
 zbehne cele do konca. Vobec to nemusi pracovat s databazou. Riesite
 taketo veci, alebo si poviete, ze taka situacia nenastane a kaslete
 na to?

 Samozrejme, pro vsechny multithreadove aplikace (a vubec nezalezi na
 tom zda jsou webove ci ne) plati, ze je nutne synchronizovat (ci
 pouzit nejakou sofistikovanejsi techniku).

 Pouzivani synchronized neni neco navic - je to jedna ze zakladnich
 veci nutna pri psani v Jave. Vsude a stale. Tim samozrejme nemyslim ze
 by se vsude melo cpat synchronized, chran buh - jen je nutne nad tim
 premyslet.

 
 

-- 
Jiří Mareš (mailto:[EMAIL PROTECTED])
ČSAD SVT Praha, s.r.o. (http://www.svt.cz)
Czech Republic


Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamil Podlesak

Kamzik-II wrote:

Koukal sem do toho JavaDocu a neni mi teda jasne, k cemu by se to dalo 
vyuzit... Je tam psano o hashtables, ktere jsem asi taky nepochopil, 
nebo nwim, asi jsem uplne mimo, myslel jsem, ze je to nejake id 
objektu, ale pokud stejne cislo muze vracet vic objektu, tak se to 
neda pouzit ani na to...


Prosim, prosim, na webu jsou tisice a tisice ruznych popisu hashtabulek 
a na jakem principu funguji. Popis teto datove struktury sem nepatri, 
navic KAZDY programator ji musi znat, protoze se jedna o jednu z 
nejpouzivanejsich datovych struktur (obzvlaste v Jave).


--
Kamil Podlesak [EMAIL PROTECTED]




Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Lukas Barton




Moravec Jan wrote:

  
  

  
  To je daleko starsi koncept. Pamatuji se, ze ve
skole jsme se o tom ucili v zakladech programovani a to bylo min 2 roky
pred Javou (uz jsem kmet ;)
  H.

Myslim, ze hashovani vymysleli 50 letech v IBM :-)




Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II



To nic nemeni na tom, ze je to genialni a pritom 
tak jednoduche;-)

  - Original Message - 
  From: 
  Moravec 
  Jan 
  To: Java 
  Sent: Thursday, July 27, 2006 3:43 
  PM
  Subject: RE: equals a hashCode (WAS: 
  java.security.Permission)
  
  To 
  je daleko starsi koncept. Pamatuji se, ze ve skole jsme se o tom ucili v 
  zakladech programovani a to bylo min 2 roky pred Javou (uz jsemkmet 
  ;)
  H.
  
-Original Message-From: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED]On Behalf Of 
Kamzik-IISent: Thursday, July 27, 2006 3:41 PMTo: 
JavaSubject: Re: equals a hashCode (WAS: 
java.security.Permission)
Hm dumyslne ;-)
Ti navrhari javy nebyli uplne "blbi" 
:)

  - Original Message - 
  From: 
  Moravec 
  Jan 
  To: Java 
  Sent: Thursday, July 27, 2006 3:38 
  PM
  Subject: RE: equals a hashCode (WAS: 
  java.security.Permission)
  
  Trefa do cernyho ;) Pres hashcode se "nablizite", pres equals 
  dohledate. Princip je ten, ze nedelate equals pres vsechno (u slozitejsich 
  objektu muze byt pomale,treba i u Stringu by ten equals nemusel byt 
  uplne idealni).
  
  H.
  -Original 
  Message-From: [EMAIL PROTECTED] 
  [mailto:[EMAIL PROTECTED]On Behalf Of 
  Kamzik-IISent: Thursday, July 27, 2006 3:37 
  PMTo: JavaSubject: Re: equals a hashCode (WAS: 
  java.security.Permission)
  
Aha takze ciste jenom kvuli 
rychlosti?

  - Original Message - 
  From: 
  Moravec Jan 
  To: Java 
  Sent: Thursday, July 27, 2006 
  3:32 PM
  Subject: RE: equals a hashCode 
  (WAS: java.security.Permission)
  
  V HashMap,Hashtable apod. V nich jsou prvky organizovany 
  dle jejich hashcodu (rychlejsi vyhodnoceni (ne)shody pri hledani) a 
  teprve v zaverecne fazy se pouzijeequals. V hash tabulkach jsou 
  totiz prvky organizovany dle jejich hashcode (kolize se resi prostym 
  retezenim za sebou, nebo do spojoveho seznamu).
  
  Tudiz pri dotazech typu containsKey, get apod senejprve 
  hleda dle hashcode a nasledne se provadi porovnani pres 
  equals.
  
  Honza
  
-Original Message-From: 
[EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]On 
Behalf Of Kamzik-IISent: Thursday, July 27, 2006 3:25 
PMTo: JavaSubject: Re: equals a hashCode (WAS: 
java.security.Permission)
O boze, equals tady nekdo pekne 
vysvetlil na
vytiscich knih, hascode vicemene taky 
chapu, ale
neni mi jasne na co je mi dobrej 
;-)

- Original Message - 

  From: 
  Vit Novak 

  To: 'Java' 
  Sent: Thursday, July 27, 2006 
  1:07 PM
  Subject: equals a hashCode 
  (WAS: java.security.Permission)
  
  
  Zdravim.
  
  Doporucuji 
  precist si knizku od pana Blocha (cesky Java efektivne, anglicky 
  Effective Java). Pan Bloch tuto problematiku rozebira pomerne 
  podrobne a myslim, ze tohle patri k zakladnim znalostem, bez 
  kterych dobry Java kod proste psat nebudete. Jedna se totiz o to, 
  ze predefinovani metody equals nebo hashCode vas zavazuje k 
  dodrzeni urcitych pravidel, bez kterych vam treba Collections 
  budou chodit _velmi_ divne nebo 
  vubec.
  
  Samozrejme 
  je mozne nadefinovat hashCode a equals implementovat jen jako 
  porovnani hashCode, to ovsem casto neni to, co chcete. Vetsinou 
  jdete obracene  nejak si urcite, kdy maji byt dve instance nejake 
  tridy rovne a to naimplementujete. Napriklad budete mozna chtit 
  aby dve ruzne instance tridy mujBigInt, reprezentujici cislo 37, 
  vratily na equals true, ale reprezentace cisla 37 a cisla 
  56498765654987984632159789 by na equals true vratit nemela. Pak 
  Vas ovsem hashCode zavazuje, aby equals instance vracely stejny 
  hashCode, ale nijak Vas nenuti, aby pro dve instance, ktere equals 
  nejsou byly hashCode ruzne. A zrovna u mujBigIntu hashCode tak, 
  aby pro kazda dve nonequals cisla vratil ruzne hashe, proste 
  nevymyslite.
  
  Dalsi vec 
  je, ze kod, kde equals je implementovano jako porovnani hashi, 
  nebude zrovna moc citelny...
  
  Toz tak, 
  hodne stesti
  
  V.
  
  
  
  
 

Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Lukas Barton

Kamil Podlesak wrote:

Kamzik-II wrote:

Koukal sem do toho JavaDocu a neni mi teda jasne, k cemu by se to 
dalo vyuzit... Je tam psano o hashtables, ktere jsem asi taky 
nepochopil, nebo nwim, asi jsem uplne mimo, myslel jsem, ze je to 
nejake id objektu, ale pokud stejne cislo muze vracet vic objektu, 
tak se to neda pouzit ani na to...


Prosim, prosim, na webu jsou tisice a tisice ruznych popisu 
hashtabulek a na jakem principu funguji. Popis teto datove struktury 
sem nepatri, navic KAZDY programator ji musi znat, protoze se jedna o 
jednu z nejpouzivanejsich datovych struktur (obzvlaste v Jave).
Jo, kazdy spravny programator by mel mit doma v knihovnicce neco jako 
http://www.mpi-sb.mpg.de/~mehlhorn/DatAlgbooks.html
Stejne tak by mel kazdy programator svuj program dokazat, jak si to 
predstavoval pan Dijkstra ;-)




Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Lumír Návrat
Tady je opet potreba se na to podivat skrz teorii algoritmu. Ale jinak 
jak pisou ostatni na webu je spousta popisu ktere to vysvetli podrobneji 
a lepe.


Hastable, jsou tabulky zalozene na slovniku. tj, na dvojicich (klic, 
jeho vyznam). Pricemz zakladni vyznam, je v rychlejsim nalezeni hodnoty 
k danemu klici.


Kdyz si tedy predstavite nejaky slovnik, treba AN-CZ, v nem mate nejaky 
klic, ten klic muze mit v cestine vice vyznamu. Zde pak zalezi na 
konkretni implementaci hashovaci tabulky.


Jedna z implementaci napriklad funguje tak, ze spocita hashcode klice a 
bude to jeho umisteni v tabulce, pokud ale nastane pripad, ze nejaky 
objekt ma stejny hashcode, a jeho pozice je jiz obsazena, tak nalezne 
prvni volne misto v tabulce za timto objektem a tam jej ulozi. 
Samozrejme, jen tehdy,pokud to tabulka dovoli (muze prohlasit, s 
hashcodem tam muze byt jen jeden stejny objekt a pak ho prepise).


Dalsi implementace je takova, ze na pozici s danou hodnotou hashcode ma 
ulozeny nejakou jinou strukturu (pole, kolekci apod).a ta obsahuje 
vsechny objekty se stejnym hashcode. Pokud potom vyzaduje aplikace 
nalezt  konkretni objekt, tak pak zalezi zda vrati na zaklade hashcode 
vsechny, nebo pak prochazi jinym zpusobem tu strukturu obsahujici dane 
objekty (napr. pomoci metody equals).


Lumi(r)


Kamzik-II wrote:
Koukal sem do toho JavaDocu a neni mi teda jasne, k cemu by se to dalo 
vyuzit... Je tam psano o hashtables, ktere jsem asi taky nepochopil, 
nebo nwim, asi jsem uplne mimo, myslel jsem, ze je to nejake id 
objektu, ale pokud stejne cislo muze vracet vic objektu, tak se to 
neda pouzit ani na to...

- Original Message - From: Kamzik-II [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 3:30 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Jo jo jasne, ale me spis zajima, proc je
v ramci vm a ne v ramci aplikace, btw: neni to nahodou to same?


- Original Message - From: Kamil Podlesak [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 3:25 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Kamzik-II wrote:


O boze, equals tady nekdo pekne vysvetlil na
vytiscich knih, hascode vicemene taky chapu, ale
neni mi jasne na co je mi dobrej ;-)


Hashcode je dobrej v okamziku, kdyz se patricny objekt uklada do 
hashtabulky ci mnoziny. A to s nejvetsi pravdepodobnosti bude.


--
Kamil Podlesak [EMAIL PROTECTED]













Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Kamil Podlesak

jeeff wrote:


Ahoj,
to je presne jasne aj mne, v povodnom prispevku som pisal ze ako
najjednoduchsie riesenie vidim dat danu metodu synchronized. Chcel som
len vediet, ci je to spravne riesenie, alebo pouzivate nejaky iny postup.


Dat danou metodu synchronized neni spravne reseni, je to hack a skutecne 
je nebezpecny (viz dale).


Staci synchronizovat jen nezbytne nutnou sekci:
synchronized (nakupBean) {
  if (nakupBean.isStornovany()) return false;  
  nakupBean.setStornovany(true);

}
Take by slo pouzit java.util.concurrent.AtomicBoolean (java 1.5+).


Bojim sa toho, ze ked z jednej synchronized metody zavolam inu
synchronized metodu ze mi vznikne deadlock, takze preto sa snazim najst
aj ine riesenie.


Deadlock v Jave vznikne jen tak, ze si ruzna vlakna zamknou vice 
stejnych monitoru, ale v navzajem ruznem poradi. To se nestane, pokud 
jsou synchronized sekce a metody pouzity jen tam kde je to nutne (datove 
struktury, operace ktere musi byt atomicke a podobne). V podstate se to 
muze stat jenom v pripade, ze se na vice vlaken vzpomene pozde a do 
hotoveho kodu se nasazi klicova slovicka synchronized u tech hlavnich 
metod (coz je bohuzel tento pripad).


To je to o cem jsem psal - na synchronizaci je nutne myslet stale. 
Jedine tak se synchronizuji jen ty opravdu nejmensi nutne useky. A neni 
nutne se nejak synchronized vyhybat a pak resit nejake otazky jako zda 
ho vyuzit nebo ne... nejde o zadnou cernou magii.


--
Kamil Podlesak [EMAIL PROTECTED]



Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Tomas Hubalek




Pokud jde o synchronized, tak jsem si zrovna nedavno nechutne nabehl,
protoze to co bylo uvnitr synchronized bloku trvalo dele nez jsem si
myslel a pak transformace malinkeho XSLT trvala jednou 7 minut a jednou
mene nez vterinu, protoze vsichni cekali ve fronte pred synchronized
blokem. 

Rozhodne souhlasim s Jirim, ze na datovou konzistenci ma dohlizet
databaze a ne business logika. Jinak vam proste jednou nekdo sprasi
data pres TOAD nebo sqlplus a budete se divit ;-)

Tom

Jiří Mareš napsal(a):

  Synchronized nemusi byt idealni, protoze je to synchronized pro cely system a ne jenom pro jednoho uzivatele, navic co
kdyz vam to nekdy v budoucnu pobezi na vice strojich ...

Ja myslim, ze prave z tohoto duvodu vznikly transakce, tak je kurna pouzivejte ... a ze se az na konci zjisti, ze se
neco delalo zbytecne, no pak tu mame rollback, ne?

jeeff napsal(a):
  
  
Ahoj,

to je presne jasne aj mne, v povodnom prispevku som pisal ze ako
najjednoduchsie riesenie vidim dat danu metodu synchronized. Chcel som
len vediet, ci je to spravne riesenie, alebo pouzivate nejaky iny postup.

Bojim sa toho, ze ked z jednej synchronized metody zavolam inu
synchronized metodu ze mi vznikne deadlock, takze preto sa snazim najst
aj ine riesenie.


Kamil Podlesak wrote:


  jeeff wrote:

  
  
Takze znova opakujem, storno nakupu je len priklad, moze to byt
cokolvek co nechcem aby sa cez web rozhranie dalo zavolat 2x nez to
zbehne cele do konca. Vobec to nemusi pracovat s databazou. Riesite
taketo veci, alebo si poviete, ze taka situacia nenastane a kaslete
na to?

  
  Samozrejme, pro vsechny multithreadove aplikace (a vubec nezalezi na
tom zda jsou webove ci ne) plati, ze je nutne synchronizovat (ci
pouzit nejakou sofistikovanejsi techniku).

Pouzivani synchronized neni neco "navic" - je to jedna ze zakladnich
veci nutna pri psani v Jave. Vsude a stale. Tim samozrejme nemyslim ze
by se vsude melo cpat synchronized, chran buh - jen je nutne nad tim
premyslet.

  



  
  
  






Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Pavel Kubal
Ne;-)

- Original Message - 
From: Kamzik-II [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:11 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


 no equals a hashcode uz chapu ;-)
 jeste jedna otazka ohledne kolekci, muze
 kolekce Map mit pro jeden klic vice objektu?


 - Original Message - 
 From: Stanislav Ošmera [EMAIL PROTECTED]
 To: Java konference@java.cz
 Sent: Thursday, July 27, 2006 4:04 PM
 Subject: Re: equals a hashCode (WAS: java.security.Permission)


  Mimo jine se doporucuje aby funkce ktera vraci hashcode byla velmi
  jednoducha a rychla protoze se pouzije jako prvni a nejcasteji (kdyz
  je ruzny hashcode tak se jiz dale nic nezjistuje)
  A az pak funkce equals muze byt velmi slozita na vyhodnoceni.
  Napriklad mam slozity objekt ktery ma spoustu atributu. Hashcode
  vytvorim jen treba pouzitim 3 z nich ktery jsou primitivni typy,
  kdezto pri equals porovnavam vsechny atributy a to u nekterych muze
  znamenat porovnavani jinych objektu s podobnou slozitosti.
 
  Ale opravdu bude lepe si precist nejakou knizku o tehlech hlavnich
  algoritmickych myslenkach ktere jsou v Jave, ten zminovany Bloch je
  treba zrovna na tohle vyborny.
 
  P.S. jinak tomu spojeni equal a hashCode se rika equals contract
  -- 
  Stanislav Ošmera
  Work: +44 (0)2075 980 348
  Cell: +44 (0)7914 635 412
 



 !DSPAM:44c8c935124803984916995!







Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II

V tom pripade teda nechapu, jak muze hashtable mit
vic objektu pro jeden klic, kdyz je to vlastne implementace hashmapy, ktera 
je odvozena od map?


- Original Message - 
From: Pavel Kubal [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:09 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Ne;-)

- Original Message - 
From: Kamzik-II [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:11 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



no equals a hashcode uz chapu ;-)
jeste jedna otazka ohledne kolekci, muze
kolekce Map mit pro jeden klic vice objektu?


- Original Message - 
From: Stanislav Ošmera [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:04 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


 Mimo jine se doporucuje aby funkce ktera vraci hashcode byla velmi
 jednoducha a rychla protoze se pouzije jako prvni a nejcasteji (kdyz
 je ruzny hashcode tak se jiz dale nic nezjistuje)
 A az pak funkce equals muze byt velmi slozita na vyhodnoceni.
 Napriklad mam slozity objekt ktery ma spoustu atributu. Hashcode
 vytvorim jen treba pouzitim 3 z nich ktery jsou primitivni typy,
 kdezto pri equals porovnavam vsechny atributy a to u nekterych muze
 znamenat porovnavani jinych objektu s podobnou slozitosti.

 Ale opravdu bude lepe si precist nejakou knizku o tehlech hlavnich
 algoritmickych myslenkach ktere jsou v Jave, ten zminovany Bloch je
 treba zrovna na tohle vyborny.

 P.S. jinak tomu spojeni equal a hashCode se rika equals contract
 -- 
 Stanislav Ošmera

 Work: +44 (0)2075 980 348
 Cell: +44 (0)7914 635 412




!DSPAM:44c8c935124803984916995!












Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Pavel Kubal
API dokumentace pravi :

metoda put() :
Associates the specified value with the specified key in this map (optional
operation). If the map previously contained a mapping for this key, the old
value is replaced by the specified value. (A map m is said to contain a
mapping for a key k if and only if m.containsKey(k) would return true.))

Jak by mohla mit mapa vic objektu pro jeden klic?

Pavel Kubal

- Original Message - 
From: Kamzik-II [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:15 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


 V tom pripade teda nechapu, jak muze hashtable mit
 vic objektu pro jeden klic, kdyz je to vlastne implementace hashmapy,
ktera
 je odvozena od map?

 - Original Message - 
 From: Pavel Kubal [EMAIL PROTECTED]
 To: Java konference@java.cz
 Sent: Thursday, July 27, 2006 4:09 PM
 Subject: Re: equals a hashCode (WAS: java.security.Permission)


  Ne;-)
 
  - Original Message - 
  From: Kamzik-II [EMAIL PROTECTED]
  To: Java konference@java.cz
  Sent: Thursday, July 27, 2006 4:11 PM
  Subject: Re: equals a hashCode (WAS: java.security.Permission)
 
 
  no equals a hashcode uz chapu ;-)
  jeste jedna otazka ohledne kolekci, muze
  kolekce Map mit pro jeden klic vice objektu?
 
 
  - Original Message - 
  From: Stanislav Ošmera [EMAIL PROTECTED]
  To: Java konference@java.cz
  Sent: Thursday, July 27, 2006 4:04 PM
  Subject: Re: equals a hashCode (WAS: java.security.Permission)
 
 
   Mimo jine se doporucuje aby funkce ktera vraci hashcode byla velmi
   jednoducha a rychla protoze se pouzije jako prvni a nejcasteji (kdyz
   je ruzny hashcode tak se jiz dale nic nezjistuje)
   A az pak funkce equals muze byt velmi slozita na vyhodnoceni.
   Napriklad mam slozity objekt ktery ma spoustu atributu. Hashcode
   vytvorim jen treba pouzitim 3 z nich ktery jsou primitivni typy,
   kdezto pri equals porovnavam vsechny atributy a to u nekterych muze
   znamenat porovnavani jinych objektu s podobnou slozitosti.
  
   Ale opravdu bude lepe si precist nejakou knizku o tehlech hlavnich
   algoritmickych myslenkach ktere jsou v Jave, ten zminovany Bloch je
   treba zrovna na tohle vyborny.
  
   P.S. jinak tomu spojeni equal a hashCode se rika equals contract
   -- 
   Stanislav Ošmera
   Work: +44 (0)2075 980 348
   Cell: +44 (0)7914 635 412
  
 
 
 
 
 
 
 
 
 
 



 !DSPAM:44c8ca12124801431714180!







Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu jeeff

Kamil Podlesak wrote:

jeeff wrote:


Ahoj,
to je presne jasne aj mne, v povodnom prispevku som pisal ze ako
najjednoduchsie riesenie vidim dat danu metodu synchronized. Chcel som
len vediet, ci je to spravne riesenie, alebo pouzivate nejaky iny 
postup.


Dat danou metodu synchronized neni spravne reseni, je to hack a 
skutecne je nebezpecny (viz dale).


Staci synchronizovat jen nezbytne nutnou sekci:
synchronized (nakupBean) {
  if (nakupBean.isStornovany()) return false;
nakupBean.setStornovany(true);

}
Take by slo pouzit java.util.concurrent.AtomicBoolean (java 1.5+).


nad tymto som presne uvazoval, respektive synchronizoval by som to nad
userom co spravil ten nakup. Totiz volanie
nakupBean.setStornovany(true); ja teraz volam az ked zbehne vsetko pred
tym (vratenie penazi na ucet nakupujuceho). Ale teoreticky to mozem
spravit aj takto nazaciatku a keby sa mi z nejakeho dovodu nepodarilo
spravit financnu tranzakciu tak to stornovanie zrusim.

Jiri Mares radil pouzit tranzakcie, tiez su tu rady, ze datovu
konzistenciu ma drzat databaza, ale co ked vratenie penazi na ucet
nakupujuceho je nejake XML volanie do banky. Cize sa to neda spravit
ako nejaka databazova tranzakcia, ani to databaza nemoze riesit svojou
konzistenciou.



Bojim sa toho, ze ked z jednej synchronized metody zavolam inu
synchronized metodu ze mi vznikne deadlock, takze preto sa snazim najst
aj ine riesenie.


Deadlock v Jave vznikne jen tak, ze si ruzna vlakna zamknou vice 
stejnych monitoru, ale v navzajem ruznem poradi. To se nestane, pokud 
jsou synchronized sekce a metody pouzity jen tam kde je to nutne 
(datove struktury, operace ktere musi byt atomicke a podobne). V 
podstate se to muze stat jenom v pripade, ze se na vice vlaken 
vzpomene pozde a do hotoveho kodu se nasazi klicova slovicka 
synchronized u tech hlavnich metod (coz je bohuzel tento pripad).


To je to o cem jsem psal - na synchronizaci je nutne myslet stale. 
Jedine tak se synchronizuji jen ty opravdu nejmensi nutne useky. A 
neni nutne se nejak synchronized vyhybat a pak resit nejake otazky 
jako zda ho vyuzit nebo ne... nejde o zadnou cernou magii.


hej, ved prave na tu synchronizaciu myslim, doteraz som to ziadno
neriesil, ale pri financnych operaciach to moze byt problem... Ak by sa
jednalo len o to storno nie je problem ked sa to do databazy zapise aj
10x, ze atribut storno je true. Problem je v tom, ze ked sa vykona
storno vratim peniaze na ucet nakupujuceho a to by som bol nerad, keby
sa niekomu podarilo viac krat.


--
jeeff


RE: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Jiri Fabian









Transakce samozrejme, ale to Vase reseni s
triggerem je hack.



fil











From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf
Of Tomas Hubalek
Sent: Thursday, July 27, 2006 4:12
PM
To: Java
Subject: Re: Zamedzenie
viacnasobnemu vykonaniu metody





Pokud jde o synchronized, tak jsem si zrovna nedavno
nechutne nabehl, protoze to co bylo uvnitr synchronized bloku trvalo dele nez
jsem si myslel a pak transformace malinkeho XSLT trvala jednou 7 minut a jednou
mene nez vterinu, protoze vsichni cekali ve fronte pred synchronized blokem. 

Rozhodne souhlasim s Jirim, ze na datovou konzistenci ma dohlizet databaze a ne
business logika. Jinak vam proste jednou nekdo sprasi data pres TOAD nebo
sqlplus a budete se divit ;-)

Tom

Jiří Mareš napsal(a): 

Synchronized nemusi byt idealni, protoze je to synchronized pro cely system a ne jenom pro jednoho uzivatele, navic cokdyz vam to nekdy v budoucnu pobezi na vice strojich ...Ja myslim, ze prave z tohoto duvodu vznikly transakce, tak je kurna pouzivejte ... a ze se az na konci zjisti, ze seneco delalo zbytecne, no pak tu mame rollback, ne?jeeff napsal(a):  

Ahoj,to je presne jasne aj mne, v povodnom prispevku som pisal ze akonajjednoduchsie riesenie vidim dat danu metodu synchronized. Chcel somlen vediet, ci je to spravne riesenie, alebo pouzivate nejaky iny postup.Bojim sa toho, ze ked z jednej synchronized metody zavolam inusynchronized metodu ze mi vznikne deadlock, takze preto sa snazim najstaj ine riesenie.Kamil Podlesak wrote:    

jeeff wrote:  

Takze znova opakujem, storno nakupu je len priklad, moze to bytcokolvek co nechcem aby sa cez web rozhranie dalo zavolat 2x nez tozbehne cele do konca. Vobec to nemusi pracovat s databazou. Riesitetaketo veci, alebo si poviete, ze taka situacia nenastane a kasletena to?    

Samozrejme, pro vsechny multithreadove aplikace (a vubec nezalezi natom zda jsou webove ci ne) plati, ze je nutne synchronizovat (cipouzit nejakou sofistikovanejsi techniku).Pouzivani synchronized neni neco navic - je to jedna ze zakladnichveci nutna pri psani v Jave. Vsude a stale. Tim samozrejme nemyslim zeby se vsude melo cpat synchronized, chran buh - jen je nutne nad timpremyslet.  

    

  










Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Kamzik-II

Uz ctu... a stydim se ;-)

- Original Message - 
From: Jiri Fabian [EMAIL PROTECTED]

To: 'Java' konference@java.cz
Sent: Thursday, July 27, 2006 4:30 PM
Subject: RE: equals a hashCode (WAS: java.security.Permission)


To je diskuze o @. Jeden o voze, druhej o koze. Slovnik je pred tebou
skrytej, takze ten zahashovanej vlacek k jednomu policku nevidis, nestaras o
nej - musis jen mit hashcode() i equals().

Kamziku, nespamuj a mazej si cist. Pripominas mi malyho fakana, co taha tatu
za kosili a furt se ho dokolecka pta k cemu je volant.

fil

-Original Message-
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On
Behalf Of Lumír Návrat
Sent: Thursday, July 27, 2006 4:20 PM
To: Java
Subject: Re: equals a hashCode (WAS: java.security.Permission)

Protoze, nejcastejsi reseni je, ze si to managujete sam.

Zde je totiz rozdil, mezi teorii a JAVou, Java totiz nepovoluje mit vice
objektu k jednomu klici, takze se to obchazi tak, ze si k danemu klici
vlozite jako hodnotu nejakou kolekci a v ni si udrzujete objekty patrici
danemu klici. Zda ta dalsi kolekce je hashmap, ci nejaky list, set apod.
je jiz na Vas a na potrebach projektu

Lumi(r)

Kamzik-II wrote:

V tom pripade teda nechapu, jak muze hashtable mit
vic objektu pro jeden klic, kdyz je to vlastne implementace hashmapy,
ktera je odvozena od map?

- Original Message - From: Pavel Kubal [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:09 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Ne;-)

- Original Message - From: Kamzik-II [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:11 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



no equals a hashcode uz chapu ;-)
jeste jedna otazka ohledne kolekci, muze
kolekce Map mit pro jeden klic vice objektu?


- Original Message - From: Stanislav Ošmera
[EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:04 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


 Mimo jine se doporucuje aby funkce ktera vraci hashcode byla velmi
 jednoducha a rychla protoze se pouzije jako prvni a nejcasteji (kdyz
 je ruzny hashcode tak se jiz dale nic nezjistuje)
 A az pak funkce equals muze byt velmi slozita na vyhodnoceni.
 Napriklad mam slozity objekt ktery ma spoustu atributu. Hashcode
 vytvorim jen treba pouzitim 3 z nich ktery jsou primitivni typy,
 kdezto pri equals porovnavam vsechny atributy a to u nekterych muze
 znamenat porovnavani jinych objektu s podobnou slozitosti.

 Ale opravdu bude lepe si precist nejakou knizku o tehlech hlavnich
 algoritmickych myslenkach ktere jsou v Jave, ten zminovany Bloch je
 treba zrovna na tohle vyborny.

 P.S. jinak tomu spojeni equal a hashCode se rika equals contract
 --  Stanislav Ošmera
 Work: +44 (0)2075 980 348
 Cell: +44 (0)7914 635 412




!DSPAM:44c8c935124803984916995!






















Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Lukas Barton

jeeff wrote:

nad tymto som presne uvazoval, respektive synchronizoval by som to nad
userom co spravil ten nakup. Totiz volanie
nakupBean.setStornovany(true); ja teraz volam az ked zbehne vsetko pred
tym (vratenie penazi na ucet nakupujuceho). Ale teoreticky to mozem
spravit aj takto nazaciatku a keby sa mi z nejakeho dovodu nepodarilo
spravit financnu tranzakciu tak to stornovanie zrusim.

Jiri Mares radil pouzit tranzakcie, tiez su tu rady, ze datovu
konzistenciu ma drzat databaza, ale co ked vratenie penazi na ucet
nakupujuceho je nejake XML volanie do banky. Cize sa to neda spravit
ako nejaka databazova tranzakcia, ani to databaza nemoze riesit svojou
konzistenciou.

Potom at most once semantika neni mozna.
Musite i odeslani penez do banky napsat jako idempotentni.

  Lukas


Re: equals a hashCode (WAS: java.security.Permission)

2006-07-27 Tema obsahu Lumír Návrat
Kdyz se podivate do API, tak zjistite, ze Dictionary je obsolete a ma se 
pouzit Map, jenze zaroven to je stale abstraktni trida, ktera Vam 
implementuje to spolecne pro vsechny (key, value) colekce.
Jednim ze zasadnich zvratu ve vyvoji Javy, byl prepracovani Collections 
API mezi verzemi JAVy 1.1.x a 1.2.x a vyssi.


S ohledem na implementaci HashMap, HashTable v JAVe je ten muj priklad, 
se slovnikem opravdu mirne zavadejici, ale podle obecne teorie v tom 
problem neni. Samozjreme si muzete napsat vlastni implementaci HashMapy, 
ktera Vam mnou popsane reseni vice objektu pro klic bude resit sama. 
Mozna jej dokonce jiz naleznete implementovane v baliku Apache 
Collections. (Vim, ze zde minimalne existuje podpora pro hastamap s 
klicem, skladajicim, se ze dvou objektu.


Lumi(r)

Kamzik-II wrote:

a proc se to obchazi a nepouzije se rozhranni Dictionary?
- Original Message - From: Lumír Návrat 
[EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:19 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


Protoze, nejcastejsi reseni je, ze si to managujete sam.

Zde je totiz rozdil, mezi teorii a JAVou, Java totiz nepovoluje mit vice
objektu k jednomu klici, takze se to obchazi tak, ze si k danemu klici
vlozite jako hodnotu nejakou kolekci a v ni si udrzujete objekty patrici
danemu klici. Zda ta dalsi kolekce je hashmap, ci nejaky list, set apod.
je jiz na Vas a na potrebach projektu

Lumi(r)

Kamzik-II wrote:

V tom pripade teda nechapu, jak muze hashtable mit
vic objektu pro jeden klic, kdyz je to vlastne implementace hashmapy, 
ktera je odvozena od map?


- Original Message - From: Pavel Kubal 
[EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:09 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



Ne;-)

- Original Message - From: Kamzik-II [EMAIL PROTECTED]
To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:11 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)



no equals a hashcode uz chapu ;-)
jeste jedna otazka ohledne kolekci, muze
kolekce Map mit pro jeden klic vice objektu?


- Original Message - From: Stanislav Ošmera 
[EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 4:04 PM
Subject: Re: equals a hashCode (WAS: java.security.Permission)


 Mimo jine se doporucuje aby funkce ktera vraci hashcode byla velmi
 jednoducha a rychla protoze se pouzije jako prvni a nejcasteji (kdyz
 je ruzny hashcode tak se jiz dale nic nezjistuje)
 A az pak funkce equals muze byt velmi slozita na vyhodnoceni.
 Napriklad mam slozity objekt ktery ma spoustu atributu. Hashcode
 vytvorim jen treba pouzitim 3 z nich ktery jsou primitivni typy,
 kdezto pri equals porovnavam vsechny atributy a to u nekterych muze
 znamenat porovnavani jinych objektu s podobnou slozitosti.

 Ale opravdu bude lepe si precist nejakou knizku o tehlech hlavnich
 algoritmickych myslenkach ktere jsou v Jave, ten zminovany Bloch je
 treba zrovna na tohle vyborny.

 P.S. jinak tomu spojeni equal a hashCode se rika equals contract
 --  Stanislav Ošmera
 Work: +44 (0)2075 980 348
 Cell: +44 (0)7914 635 412




!DSPAM:44c8c935124803984916995!






















hashCode equals

2006-07-27 Tema obsahu Kamzik-II



Mimochodem dekuju za pomoc,
sice jsem dotedka tyhle 2 metody nikde 
nepotreboval,
ale tak nejak tusim, ze by si mi brzy vymstili... 
Diky moc


Re: equals, hashcode, permission

2006-07-27 Tema obsahu Roman Pichlik

zakladni zacatecnicka chyba:
 - porovnava se pres equal metodu
 - muze vam to padnout na NullPointerException

Kamzik-II napsal(a):

Tak jsem si to vsechno vyzkousel,
a implementace by mela tim padem vypadat asi takhle:
 
class CustomPermission

{
 
public CustomPermission ( String name )

{
 
super ( name );
 
}
 
...
 
public int hashCode ()

{
 
return this.getName ().hashCode ();
 
}
 
public boolean equals ( Object object )

{
 
if ( object instanceof CustomPermission )

{
 
CustomPermission cp = (CustomPermission) object;   
if ( ( cp.getName == this.getName () )  cp.getActions () == 
this.getActions ()  )

return true;
 
 
}

return false;
 
}
 
}
 
nemam tam nejakou salamounskou chybu?


--
S pozdravem Roman Dagi Pichlik

/* http://www.sweb.cz/pichlik/ Blog pro kodery */


__
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
__


Re: equals, hashcode, permission

2006-07-27 Tema obsahu Kamzik-II

Jj dost casto na to zapominam, zil jsem dlouho
v php svete a navykl jsem si na type-hinting, kterej
ale v php funguje trochu jinak (neumoznuje null).
Je tam jeste nejaka chyba?

- Original Message - 
From: Roman Pichlik [EMAIL PROTECTED]

To: Java konference@java.cz
Sent: Thursday, July 27, 2006 5:14 PM
Subject: Re: equals, hashcode, permission



zakladni zacatecnicka chyba:
 - porovnava se pres equal metodu
 - muze vam to padnout na NullPointerException

Kamzik-II napsal(a):

Tak jsem si to vsechno vyzkousel,
a implementace by mela tim padem vypadat asi takhle:
 
class CustomPermission

{
 
public CustomPermission ( String name )

{
 
super ( name );
 
}
 
...
 
public int hashCode ()

{
 
return this.getName ().hashCode ();
 
}
 
public boolean equals ( Object object )

{
 
if ( object instanceof CustomPermission )

{
 
CustomPermission cp = (CustomPermission) object;   
if ( ( cp.getName == this.getName () )  cp.getActions () == 
this.getActions ()  )

return true;
 
 
}

return false;
 
}
 
}
 
nemam tam nejakou salamounskou chybu?


--
S pozdravem Roman Dagi Pichlik

/* http://www.sweb.cz/pichlik/ Blog pro kodery */


__
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email 
__






Re: Zamedzenie viacnasobnemu vykonaniu metody

2006-07-27 Tema obsahu Kamil Podlesak



Jiri Mares radil pouzit tranzakcie, tiez su tu rady, ze datovu
konzistenciu ma drzat databaza, ale co ked vratenie penazi na ucet
nakupujuceho je nejake XML volanie do banky. Cize sa to neda spravit
ako nejaka databazova tranzakcia, ani to databaza nemoze riesit svojou
konzistenciou.


No, ono cele je to trochu slozitejsi problem, nez synchronizace - jde o 
to nejak nasimulovat distribuovanou transakci (predpokladam ze nemate k 
dispozici system s distribuovanymi transakcemi).


Osobne bych to resil tak, ze bych zcela oddelil webove rozhrani a 
banovni operace. V operaci stornovani bych jen do zvlastni tabulky 
zapsal, ze se ma provest storno:


INSERT INTO bank_operations (id_purchase, operation, time_planned, 
time_processed) VALUES (?,'storno',?, NULL)


To by se samozrejme provedlo v jedne transakci s UPDATE ... SET storned 
= true;


No a po dokonce by se spustil/naplanoval/probudil/upozornil mel nejaky 
task (treba pres JMS, nebo cokoliv) ktery by z te tabulky cetl a 
provadel ty jednotlive bankovni operace.


Samozrejme, operace na storno by mela byt synchronizovana primo 
vbusiness logice, aby se neprovedla dvakrat; ale v kazdem pripade to 
chcipne v databazi na omezeni:

UNIQUE(id_purchase, operation)

To je vse jen takovy nastin co me napadlo. Vyhoda je, ze je v databazi 
zaznamenano co se v bance melo provest a co se provedlo a kdy (to je 
rozhodne dobry napad) a navic se neceka. Jiste, muze dojit k tomu ze 
banka operaci odmitne, ale takove pripady se daji resit postou (v 
podstate musi - stejne se bankovni operace neprovadeji v realnem case).


--
Kamil Podlesak [EMAIL PROTECTED]




Re: equals, hashcode, permission

2006-07-27 Tema obsahu Richard Malaschitz
Je tam jeste nejaka chyba?Uz iba ta klasicka o porovnavani Stringov. Takze namiesto:
 if (( 
cp.getName == this.getName () )  cp.getActions () == this.getActions 
())
  
 ma byt if ( cp.getName().equals(this.getName())  cp.getActions () == this.getActions 
())
  
 return true;


Re: equals, hashcode, permission

2006-07-27 Tema obsahu Kamzik-II



Jasne, ale i v tom druhem pripade musi byt take 
equals, protoze getActions je taky jenom String,

Nic jineho uz tam krome equalsa 
nullpointerexception neni?

  - Original Message - 
  From: 
  Richard Malaschitz 
  To: Java 
  Sent: Thursday, July 27, 2006 5:59 
  PM
  Subject: Re: equals, hashcode, 
  permission
  
  
  Je 
tam jeste nejaka chyba?Uz iba ta klasicka o 
  porovnavani Stringov. Takze namiesto: if 
  (( cp.getName == this.getName () )  cp.getActions () == 
  this.getActions ()) 

   ma bytif ( 
  cp.getName().equals(this.getName())  cp.getActions () == 
  this.getActions ()) 

   return 
true;


Re: equals, hashcode, permission

2006-07-27 Tema obsahu Filip Jirsák
Java umožňuje u Stringů dělat tzv. internalizaci (metoda intern()), tzn. že pokud se má vytvořit String a String se stejným textem už existuje, vrátí ten původní. Při vytváření pomocí literálu se STring internalizuje vždy. Tzn. ve vašem případě při vytváření objektu b si Java zjistí, že už String s obsahem TEXT má a místro vytvoření nového objektu použije ten. Takže a i b jsou v tomto případě opravdu stejný objket a platí tedy a == b.
Pokud byste to upravil např. naString a = TEXT;String b =
 xTEXT.substring(1);
 if ( 
a == b )
System.out.println ( a and b are the 
same. );už možná podmínka a == b splněna nebude.Filip Jirsák2006/7/27, Kamzik-II 
[EMAIL PROTECTED]:






Jeste me trochu zarazi to equals...
Protoze jsem zkousel napsat si 
program:


String a = TEXT;
String b = TEXT;

if ( 
a == b )
System.out.println ( a and b are the 
same. );

A v pohode to proslo a funguvalo, takze jsem z toho 
trosku paf ;-)



  - Original Message - 
  
From: 
  Kamzik-II


 
  
  To: 
Java


 
  Sent: Thursday, July 27, 2006 6:03 
  PM
  Subject: Re: equals, hashcode, 
  permission
  
  Jasne, ale i v tom druhem pripade musi byt take 
  equals, protoze getActions je taky jenom String,
  
  Nic jineho uz tam krome equalsa 
  nullpointerexception neni?
  
- Original Message - 

From: 
Richard Malaschitz


 
To: 
Java


 
Sent: Thursday, July 27, 2006 5:59 
PM
Subject: Re: equals, hashcode, 
permission


Je 
  tam jeste nejaka chyba?Uz iba ta klasicka o 
porovnavani Stringov. Takze namiesto: if 
(( cp.getName == this.getName () )  cp.getActions () == 
this.getActions ()) 
  
 ma bytif ( 
cp.getName().equals(this.getName())  cp.getActions () == 
this.getActions ()) 
  
 return 
true;

-- Filip Jirsák[EMAIL PROTECTED]


Literatura

2006-07-27 Tema obsahu Kamzik-II



Práv si objednávám dnes zmiovanou knihu Effective 
Java,
doporucily byste mi nkdo ješt njakou 
jinou?
Pedem íkám, že nemám zájem o knihu, kde je 
plka
nebo více obsahu vnovaná gui (awt, swing, ...), 
nemám
prost o gui vbec zájem. Poradí mi 
nkdo?


  - Original Message - 
  From: 
  Vladimir Bobes Tuzinsky 
  To: Java 
  Sent: Thursday, July 27, 2006 6:11 
  PM
  Subject: Re: equals, hashcode, 
  permission
  to suvisi s tym, ze a aj b ukazuje na ten isty objekt. Je to 
  vdaka String poolu. Ale to je opat jedna zo zakladnych veci, ktore sa daju 
  nastudovat v beznej literature. Mam pocit, ze este jeden den pride na 
  konferenciu tolko spamu ako dnes, tak sa z nej odhlasim... :( 
  On 27/07/06, Kamzik-II [EMAIL PROTECTED] wrote:
  


Jeste me trochu zarazi to 
equals...
Protoze jsem zkousel napsat si 
program:


String a = "TEXT"; 
String b = "TEXT"; 

if ( a == b ) 
System.out.println ( "a and b are the same." );

A v pohode to proslo a funguvalo, takze jsem z 
toho trosku paf ;-)



  - 
  Original Message - 
  From: 
  Kamzik-II 
  To: 
  Java 
  Sent: 
  Thursday, July 27, 2006 6:03 PM
  Subject: 
  Re: equals, hashcode, permission
  
  Jasne, ale i v tom druhem pripade musi byt 
  take equals, protoze getActions je taky jenom String,
  
  Nic jineho uz tam krome equalsa 
  nullpointerexception neni?
  
- 
Original Message - 
From: 
Richard 
Malaschitz 
To: 
Java 
Sent: 
Thursday, July 27, 2006 5:59 PM
Subject: 
Re: equals, hashcode, permission


Je 
  tam jeste nejaka chyba?Uz iba ta klasicka o 
porovnavani Stringov. Takze namiesto: if 
(( cp.getName == this.getName () )  cp.getActions () == 
this.getActions ()) 
  
 ma bytif ( 
cp.getName().equals(this.getName())  cp.getActions () == 
this.getActions ()) 
  
 return 
true;


Re: Literatura

2006-07-27 Tema obsahu Kamzik-II



Jo a jeste me nezajimaji ruzne frameworky, jako je 
treba
spring, hibernate, atp... proste me zajima jenom 
non-gui java cast

  - Original Message - 
  From: 
  Kamzik-II 
  
  To: Java 
  Sent: Thursday, July 27, 2006 6:19 
  PM
  Subject: Literatura
  
  Práv si objednávám dnes zmiovanou knihu 
  Effective Java,
  doporucily byste mi nkdo ješt njakou 
  jinou?
  Pedem íkám, že nemám zájem o knihu, kde je 
  plka
  nebo více obsahu vnovaná gui (awt, swing, ...), 
  nemám
  prost o gui vbec zájem. Poradí mi 
  nkdo?
  
  
- Original Message - 
From: 
Vladimir Bobes Tuzinsky 
To: Java 
Sent: Thursday, July 27, 2006 6:11 
PM
Subject: Re: equals, hashcode, 
permission
to suvisi s tym, ze a aj b ukazuje na ten isty objekt. Je to 
vdaka String poolu. Ale to je opat jedna zo zakladnych veci, ktore sa daju 
nastudovat v beznej literature. Mam pocit, ze este jeden den pride na 
konferenciu tolko spamu ako dnes, tak sa z nej odhlasim... :( 
On 27/07/06, Kamzik-II [EMAIL PROTECTED] wrote: 

  
  
  Jeste me trochu zarazi to 
  equals...
  Protoze jsem zkousel napsat si 
  program:
  
  
  String a = "TEXT"; 
  String b = "TEXT"; 
  
  if ( a == b ) 
  System.out.println ( "a and b are the same." );
  
  A v pohode to proslo a funguvalo, takze jsem 
  z toho trosku paf ;-)
  
  
  
- 
Original Message - 
From: 
Kamzik-II 
To: 
Java 
Sent: 
Thursday, July 27, 2006 6:03 PM
Subject: 
Re: equals, hashcode, permission

Jasne, ale i v tom druhem pripade musi byt 
take equals, protoze getActions je taky jenom String,

Nic jineho uz tam krome equalsa 
nullpointerexception neni?

  - 
  Original Message - 
  From: 
  Richard 
  Malaschitz 
  To: 
  Java 
  Sent: 
  Thursday, July 27, 2006 5:59 PM
  Subject: 
  Re: equals, hashcode, permission
  
  
  Je 
tam jeste nejaka chyba?Uz iba ta klasicka o 
  porovnavani Stringov. Takze namiesto: if (( cp.getName == this.getName () )  
  cp.getActions () == this.getActions ()) 

   ma bytif 
  ( cp.getName().equals(this.getName())  cp.getActions () == 
  this.getActions ()) 

   return 
  true;