Re: Vice socket klientu ve webové aplikaci (Spring)

2014-06-12 Tema obsahu Kamil Podlesak

Problém zřejmě není v paralelním spouštění (obě varianty vypadají zcela 
správně) ale v té práci se sockety.
Jaký by to mohl být problém, to mě moc nenapadá - jedině snad že pokud je těch 
spojení opravu MOC (stovky, tisíce) tak že to narazí na maximální počet 
otevřených souborů (sockety se počítají jako otevřené soubory).
Jinak těžko radit, bez dalších informací.

Kamil Podlešák


On 12. 6. 2014, at 13:30, Vladislav Korecký vladislav_kore...@gordic.cz wrote:

 Děkuji za odpověď,
 přepsal jsem aplikaci aby místo threads používala bean s Async metodou.
 Pomocí scheduleru vyvolávám metody a ta vytváří instanci beany a na ní 
 spouští metody s anotací Async.
 Vše běží paralelně, ale problém se Socket přetrvává.
 
 Předem děkuji za pomoc,
 Korecký
 
 Ing. Vladislav Koreckýsignature.png
 GORDIC spol. s r.o., Erbenova 4, 586 01 Jihlava
 tel: +420 567 571 467 On 12.6.2014 08:29, Tomas Baca wrote:
 http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/scheduling.html
 
 example:
 @Async
 FutureString returnSomething(int i) {
 // this will be executed asynchronously
 }
 
 
 2014-06-11 19:31 GMT+02:00 Vladislav Korecký vladislav_kore...@gordic.cz:
 Dobrý den,
 prosím o radu.
 
 Mám zkušební console aplikaci, ve které mám třídu která implementuje 
 Runnable, v metodě run() vytvářím Socket (klient) a navazuji spojení se 
 serverem.
 V main metodě vyvolávám několik instancí výše zmíněné třídy a vše vesele 
 komunikuje (paralelně).
 
 Když stejnou třídu vytvořím ve webové aplikaci postavené nad Spring MVC a 
 pomocí scheduleru vyvolám třídu, která vytvoří instance zmíněného threadu a 
 spustí je, tak se mi jednotlivý socket klienti poperou (některé instance 
 hlásí, že nelze navázat spojení, jiné hlásí timeout). Když vše udělám 
 synchroně (vyvolávám jednotlivé instance threadu postupně), tak vše funguje.
 Zkoušel jsem i implementovat Spring TaskExecutor, ale se stejným výsledkem.
 
 Jak bych měl postupovat ve webové aplikaci, abych mohl navázat N paralelních 
 spojení se Socket servery ?
 Upozorňuji, že komunikace probíhá na TCP/IP úrovní pomocí zasílání 
 jednotlivých bytes. Nemohu použít HttpClient či podobné třídy.
 
 Předem děkuji za pomoc,
 Vladislav Korecký
 
 



Re: ziskanie obsahu stranky pomocou HttpClient a HttpGet a poskodene kodovanie

2012-12-06 Tema obsahu Kamil Podlesak
Klasika - je tam použito kódování aktuální platformy, takže CP1250
pokud je to spuštěno na windows.
Jednoparametrový konstruktor  InputStreamReader by měl být označen
jako deprecated - když už se tahle zhůvěřilost vůbec do JDK dostala...

2012/12/7 Ivan Polak ivan.po...@f4s.sk:
 BufferedReader reader =
 new BufferedReader(new InputStreamReader(stream));

 Ivan

-- 

Kamil Podlešák


Re: Potřebují být synchronizované jednořádkové gettery/settery?

2012-06-13 Tema obsahu Kamil Podlesak
Samotná operace by se dala považovat za atomickou, ale pokud se jedná
o objekt tak třeba ještě nemusí být korektně inicializován...

V každém případě, ten originální kód (tj. synchronized u getterů a
setterů) bych okamžitě považoval za velmi podezřelý a začal zkoumat,
jak a kde se ten objekt vůbec používá. S velmi vysokou
pravděpodobností je totiž špatně a spoléhá na tyto synchronized
místo toho aby korektně synchronizoval. Jistě, možná že bude správně,
ale na 90% očekávám něco jako:
if (a.getF()  0) {
  something( a.getF() )
} else {
  something)( 0 )
}

Kamil Podlešák

2012/6/13 Libor Jelinek ljeli...@virtage.com:
 Aaaa! Pravda! Synchronized vlastně mj. nastavuje i happens-before vztah.

 Podotázka k setteru: Kdybych z nějakého prapodivného důvodu nechtěl mít
 setter setter metodu jako synchronized, bylo by ekvivalentní nastavované
 pole označit jako volatile, že?

 Zbývající otázka: Je return f v getteru atomická operace nebo není?


 2012/6/13 Peter Štibraný pstibr...@gmail.com

 Dobry den,

 problem nie je s atomicitou operacie, ale s tym, aby tato zmena (zapis do
 premennej) bola viditelna v inych threadoch. Ak takuto viditelnost
 potrebujete, tak potrebujete nejaku formu synchronizacie. Ak tam ziadnu
 synchronizaciu mat nebudete, tak sa moze stat ze ine thready uvidia staru
 hodnotu.

 -Peter


 On Wednesday, 13. June 2012 at 10:34, Libor Jelinek wrote:

  DD,
  často při čtení kódu (ale i učebnicích) narážím na něco jako toto:
 
  class A {
  private int f;
  public synchronized int getF() { return f };
  public synchronized void setF(int f) { this.f = f };
  }
 
  Podle JLS je atomické jednoduché čtení/zápis referečnní proměnné a
  primitives krom long a double (pokud nejsou volatile). Nehrozí tedy u nich
  žádné interleaving (přerušení v půlce).
 
  To, myslím, beze zbytku platí pro setF(), kdy se jedná o jednoduché
  nastavení, a tedy nemusí být synchronized.
 
  U getF() jsou to možná dvě operace (instrukce) pro JVM (přečíst a
  vrátit), ale nejsem si jistý, a proto v tomto případě taky raději
  synchonizuju...
 
  Chci se tedy zeptat, jestli je tedy u setF() synchronizace opravdu
  zbytečná. A jak je to s getF(), zda je to atomická operace a také není 
  nutné
  synchronizovat.
 
  Díky
  Libor







--

Kamil Podlešák


Re: Jak se podívat které objekty garbage collector vymazal?

2011-09-21 Tema obsahu Kamil Podlesak
Případně PhantomReference, která je k tomu přímo určena.

podlesh

2011/9/21 Vaclav Stumbauer stum...@gmail.com:
 Alespon nejaka cesta by mohla byt pres monitoring WeakReference,
 pokud mate pristup k instanci objektu od te tridy co vas zajima.

 VS



 2011/9/21 Libor Jelinek ljeli...@virtage.com:
 Bohužel ta smutnější varianta je má situace. Jedná se o cizí třídu.
 finalize() přidat nemohu. Nicméně jsem zjistil, že nástroj JProfiler
 to dovede vypsat, ale stojí téměř 500 EUR, takže taky nic...

 I tak díky
 Libor

 Dne 21. září 2011 13:20 Pecinovský Rudolf rudolf.pecinov...@i.cz napsal(a):
 existuje nějaký způsob jak zjistit jméno třídy objektu, které bylo garbage
 collected Javou?

 Je možné definovat pro třídu, resp. její instance, metodu finalize(), která 
 kamsi cosi zapíše. Nicméně to je možné pouze pro třídy, jejichž definice 
 můžeš ovlivnit. Informace o rušení instancí tříd ze standardní knihovny 
 takto nezískáš.





Re: smerovanie javy 7,8

2011-07-14 Tema obsahu Kamil Podlesak
Já osobně jsem také zastáncem kombinování různých jazyků.

Nezapomínejme že Java je (vzhledem k JVM) low-level jazyk, troufal bych si
ho přirovnat k C na nativních platformách. Co je v Javě napsáno, to je
poměrně přímočaře vyjádřeno do bytecode. Žádný jiný tak nízkoúrovňový jazyk
na JVM není, takže pokud se z Javy udělá high-level jazyk, zůstane prázdné
místo.

Kamil Podlešák

2011/7/14 Zdenko Vrabel vrabel.zde...@gmail.com

 Ahojte,

 Len taky moj nazor. Ja to s gettes/setters nevidim tiez nejak zle. Ved dnes
 ich IDEcko dokaze generovat v priebehu jednej klavesovej skratky. Zase tie
 getters/setters ma o tolko casu neuberaju. Pisu sa len raz a pri citani ich
 clovek uz berie ako samozrejmost. V Scale  je naprikald @BeanProperty
 anotacia a nevidiet ju nejak casto pouzitu. Ako fajn, je tam a to je tak
 vsetko. Z toho mi pride ze Zdenek Tronicek ma v tomto pravdu ze to do jazyka
 asi nepatri. Neviem ci premenit Java kod na nieco kde 35% kodu budu tvorit
 anotacie rozneho druhu je dobry napad.

 Premyslam ze premenit Javu napriklad na Scalu v zamienke inovacii by
 znamenalo aj stazenie krivky ucenia tohto jazyka. Treba povedat ze Java sa
 velmi dobre uci cloveku, pretoze tam nieje tak vela rozneho voodoo na
 pozadi. Ano je dost ukecana ale to je na ukor jej jednoduchosti.

 Neviem ci sledujete v poslednej dobe co robi Twitter. Rozhodli sa pre JVM a
 zacali kombinovat Javu so Scalou. Co je zaujimave tak nepochovali Javu a to
 pred tym ficali na Ruby. Preto trosku nechapem preco sa prirovnava Java osud
 k osudu Cobolu.

 Zdeno

 2011/7/14 Zdeněk Troníček troni...@fit.cvut.cz

 Property tak jak jsou řešeny v projektu Lombok podle mého názoru do jazyka
 nepatří. Používají totiž anotace a anotace jsou v Javě prostředek pro
 specifikaci dodatečné informace o zdrojovém kódu. Proto by bylo divné,
 kdyby anotace měnily sémantiku zdrojového kódu.

 O jakém balastu to mluvíš? Gettery a settery přece umí každé IDE
 vygenerovat a psát p.speed místo p.getSpeed() mi nepřijde jako zásadní
 změna. Navíc mnohem důležitější než snadnost či obtížnost psaní je
 snadnost či obtížnost čtení (v literatuře se uvádí, že na jedno napsání
 připadá až 20 čtení toho samého kódu). A tady se hledají argumenty pro
 properties těžko.

 Mít pro anotace klíčové slovo by nebylo špatné, kdyby bylo bývalo zavedeno
 před deseti lety... Teď už se do toho nikomu nechce (z důvodů zpětné
 kompatibility a také proto, že zisk je poměrně malý - toto není palčivý
 problém jako třeba closures).

 Z.T.
 --
 Zdenek Tronicek
 FIT CTU in Prague


 x y napsal(a):
  Viete mi niekto povedat preco konecne nedaju do javy z dovodu
  sprehladnenia
  kodu praca s property ako napr. v c# - velmi to sprehladni kod(namiesto
  kopy
  balastu gettrov a settrov). Videl som projekt lombok ktory riesi tento
  problem anotaciami, ale asi vhodnejsie je zaviest klucove slovo do
 jazyka.
  (Btw mozno by to bolo vhodne sa spytat na czjugu o java7 kedze tam budu
  ludkovia z oraclu. Ozaj by ma zaujimali argumenty preco to tam konecne
  nedaju)
 
V .nete inovuju dost casto, a ten jazyk je momentalne mile pred javou,
 a
  tiez chystanou javou 7(v ktorej su podla mna kozmeticke upravy, ktore
  vecsine developerom v podstate nijak nezjednodusia pracu). Myslim ze by
  bolo
  vhodne aby oracle nezaspal navavrinoch a java8 bola konecne konkurencie
  schopny jazyk(je CO NAJSKOR NUTNY radikalny zasah do jazyka) a vzala si
 z
  roznych jazykov to dobre (napr. clojures, type inference, property,
 mozno
  delegaty..), ak neurobia RADIKALNE INOVACIE tak .net a pripadne dalsie
  jazyky nad JVM(scala,groovy..),ruby,python javu zruinuju(co sa deje
  momentalne) a java bude URCITE cobolom v korporaciach.
 





Re: Jak uvidět celý stack trace vyjímky? Ve výpisu není vůbec můj kód

2011-07-07 Tema obsahu Kamil Podlesak
Pravděpodobně se tam někde zavolá nějaký setter (příp. jiná metoda) s null
parametrem, který se uloží a později použije v tom OpenComponentAction.
Možná nějaký handler nebo něco takového?
Asi bude nejlepší vzít zdrojáky toho openide a prozkoumat.

Kamil Podlešák

2011/7/7 Libor Jelinek ljeli...@virtage.com

 Stack trace asi obsahuje vše, ale vše je mimo mou vlastní aplikaci:

 Tedy netuším od poslední revize chybu může v cizích knihovnách
 způsobovat :-( A to je právě ten zádrhel.

 java.lang.NullPointerExceptionhttp://download.oracle.com/javase/6/docs/api/java/lang/NullPointerException.html
 at
 org.openide.windows.OpenComponentAction.actionPerformed(OpenComponentAction.java:89)

 at org.openide.awt.AlwaysEnabledAction$1.run(AlwaysEnabledAction.java:137)
 at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:95)
 at
 org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:116)

 at
 org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:99)
 at
 org.openide.awt.AlwaysEnabledAction.actionPerformed(AlwaysEnabledAction.java:140)

 at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

 at
 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)

 at
 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

 at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
 at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
 at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)

 at
 javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)

 at java.awt.Component.processMouseEvent(Component.java:6437)
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
 at java.awt.Component.processEvent(Component.java:6202)
 at java.awt.Container.processEvent(Container.java:2213)
 at java.awt.Component.dispatchEventImpl(Component.java:4793)
 at java.awt.Container.dispatchEventImpl(Container.java:2271)
 at java.awt.Component.dispatchEvent(Component.java:4619)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4816)
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4476)
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4406)
 at java.awt.Container.dispatchEventImpl(Container.java:2257)
 at java.awt.Window.dispatchEventImpl(Window.java:2677)
 at java.awt.Component.dispatchEvent(Component.java:4619)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:662)
 at
 org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:148)

 [catch] at
 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)

 at
 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)

 at
 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)

 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)



 2011/7/7 Ondra Medek xmed...@gmail.com

  pokud se zásobník volání vypisuje metodou printStackTrace(), výpis se od
  konce ořezává. Pokud chcete vidět výpis zásobníku celý, asi nezbývá než

 AFAIK vypis orezava jen spolecne casti u vyjimky a getCause()
 vyjimky, tedy redundnatni informace. Vse podstatne by se melo vypsat,
 viz javadoc u java.lang.Throwable.printStackTrace().

 Mozna by problem mohl byt, pokud nejaka knihovna vyjimku nezabaluje do
 standardniho getCause() ale pouziva na to nejake svoje vlastni pole.





Re: Co se stalo s BeansBinding?!

2011-06-16 Tema obsahu Kamil Podlesak
Souhlasím, ale ještě bych rozvinul: vývoj produkčních systémů je nejenom o
programování nebo o vývoji, ale také o údržbě!
Pokud má člověk upravovat velký projekt který se postupně (a intenzivně)
vyvíjí 8 a více let, tak oceňuje úplně jiné věci než když chce za dva dny
napsat webovou aplikaci (a samozřejmě to platí naopak, jak zde propaguje
Jiří Hradil).

Ze svých zkušeností musím říci, že pro dlouhodobou údržbu (lovení bugů,
nedomyšleností v návrhu a chybějících featur) je nízkoúrovňový jazyk se
statickým typovým systémem velmi vhodný a stabilní platforma je
nedocenitelná.

Kamil Podlešák

2011/6/16 Pecinovský Rudolf rudolf.pecinov...@i.cz

 Vývoj produkčních systémů ale není jenom o programování. Je to bohužel o
 těch všech frameworcích, o spolupráci mezi různými aplikacemi, o kontinuální
 integraci, průběžném testování atd. atd. Vstřebat vše musí trvat dlouho.
 Pokud ale student přijde někam, kde dostane konkrétní úkol na konkrétním
 projektu, stačí mu toho k donastudování výrazně méně a může být velmi rychle
 platným členem týmu.




Re: Co se stalo s BeansBinding?!

2011-06-16 Tema obsahu Kamil Podlesak
Ještě bych doplnil jednu věc: Java z tohoto hlediska obsahuje několik velmi
bolavých míst, ale je typické že žádný ze zde zmiňovaných jazyků je vůbec
neřeší. Například ošetřování výjimek a související úklid (try-catch-finally)
je naprosto otřesný (psali jste někdy kód kde je potřeba operaci zkusit
vícekrát a pak teprve selhat? s timeoutem?). Vím ale jen o jediném jazyku
který to nějak řeší - Haskell. (Samozřejmě, něco by šlo si dopsat v Common
LISPu, ale to platí úplně o všem.)

2011/6/16 Kamil Podlesak kamil.podle...@gmail.com

 Souhlasím, ale ještě bych rozvinul: vývoj produkčních systémů je nejenom o
 programování nebo o vývoji, ale také o údržbě!
 Pokud má člověk upravovat velký projekt který se postupně (a intenzivně)
 vyvíjí 8 a více let, tak oceňuje úplně jiné věci než když chce za dva dny
 napsat webovou aplikaci (a samozřejmě to platí naopak, jak zde propaguje
 Jiří Hradil).

 Ze svých zkušeností musím říci, že pro dlouhodobou údržbu (lovení bugů,
 nedomyšleností v návrhu a chybějících featur) je nízkoúrovňový jazyk se
 statickým typovým systémem velmi vhodný a stabilní platforma je
 nedocenitelná.

 Kamil Podlešák

 2011/6/16 Pecinovský Rudolf rudolf.pecinov...@i.cz

 Vývoj produkčních systémů ale není jenom o programování. Je to bohužel o
 těch všech frameworcích, o spolupráci mezi různými aplikacemi, o kontinuální
 integraci, průběžném testování atd. atd. Vstřebat vše musí trvat dlouho.
 Pokud ale student přijde někam, kde dostane konkrétní úkol na konkrétním
 projektu, stačí mu toho k donastudování výrazně méně a může být velmi rychle
 platným členem týmu.




Re: Co se stalo s BeansBinding?!

2011-06-16 Tema obsahu Kamil Podlesak
Nu ano - Haskell totiž výjimky nemá, ale má monády :-)

2011/6/16 Ladislav Thon ladi...@gmail.com

 Ještě bych doplnil jednu věc: Java z tohoto hlediska obsahuje několik velmi
 bolavých míst, ale je typické že žádný ze zde zmiňovaných jazyků je vůbec
 neřeší. Například ošetřování výjimek a související úklid (try-catch-finally)
 je naprosto otřesný (psali jste někdy kód kde je potřeba operaci zkusit
 vícekrát a pak teprve selhat? s timeoutem?). Vím ale jen o jediném jazyku
 který to nějak řeší - Haskell. (Samozřejmě, něco by šlo si dopsat v Common
 LISPu, ale to platí úplně o všem.)


 Můžeš k tomu ošetřování chyb v Haskellu poslat nějaký odkaz? Já se tomu
 jazyku vyhýbám jako čert kříži, ale o řešení chyb poslední dobou občas
 přemnýšlím a mám čím dál víc pocit, že výjimky jsou dost mizerný nápad.

 LT



Re: Java fór

2011-04-12 Tema obsahu Kamil Podlesak
Ale je: return

Všechny příklady zde uvedené jsou ideální kandidáti na rozdělení do menších
metod.

Kamil Podlešák

2011/4/12 Rastislav Siekel sie...@prosoft.sk

  V jednej staručkej knihe o Opravdových programátorech a pojídačích
 koláčů bola už dávno veta, že Opravdoví programátoři se nebojí příkazu
 GOTO :-)

 A myslím, že je to pravda. Na vyskočenie z najvnútornejšieho cyklu nie je
 nič lepšie.

 Rastislav Bedo Siekel

 --
 Ing. Rastislav Siekel
 Prosoft s.r.o., Kuzmányho 8, 010 01 Žilina, Slovakia
 E-mail : sie...@prosoft.sk sie...@prosoft.sk
 Tel : 041/562 54 91
 Fax : 041/562 54 97
 Mobil : 0905 34 00 20

 On 12. 4. 2011 9:31, Tomas Studva wrote:

 Tak, tak. Urcite aby ma povodny programator co najviac potrapil :). Je to
 tak ako pisete, for(;;) je while(true) a break vyskoci iba zo switchu. break
 look, skoci na navestie. Som zvedavy ake perly ma este cakaju. Inak v
 dnesnej dobe pisat parser ak sa jedna o nieco zlozitejsie je vhodne pomocou
 lexem a gramatiky definovanej v nejakom jazyku.

 2011/4/11 Robert Novotny robert.novo...@upjs.sk

 Break z loopu sa da pouzit na vyskocenie z vnorenych cyklov cez viacero
 urovni. Nie je to nahodou preto, ze klasicky break by vyskocil zo switchu,
 ale nie z loopu?

 Otazka je, preco je tam break z poslednej vetvy switchu, ked za nou uz
 nejde nic?

 A preco je tam c-ckarsky for(;;) namiesto while(true)?

 Je pozoruhodne, ze

 On 11. 4. 2011 16:57, Tomas Studva wrote:

 Dobry den,
 vedeli by ste si precitat nasledovny program. Nie je to priklad zo skoly
 ale z praxe. Implementacia stavoveho automatu, kod je stary 10 rokov a
 samozrejme ze to je len nezmyselny uryvok.

 state = -1;
 loop: *for* (;;) {

 state = state + 1;

 *switch* (state) {
 *case* 0: state = 1; break;

 case 1: state = 0 *break*;

 case 2: break loop;

 }

 }

 Pre mna to je nieco velmi vynimocne, lebo je tam navestie a tiez ten for.

 S pozdravom Tomas






Re: OpenJDK vs. Sun JDK

2011-02-11 Tema obsahu Kamil Podlesak
Tady se musím WORE trochu zastat: zcela běžně střídám různé JVM (IBM a Sun,
5 a 6) a nemám žádné problémy.
Tedy dokud se nepoužívá GUI, tam už problémy bývají... ale ono GUI v Javě je
jeden velký problém.

Kamil Podlešák

2011/2/11 Roman Pichlík roman.pich...@gmail.com

 My jsme narazili na problem s AWTeckem na Sun JVM a OpenJDK (v nasem
 pripade IcedTea),  ktere se chovalo jinak, presne jak tu nekdo
 popisoval. Rozohdne neplati Write Once Run Everywhere, to je jenom
 takovy markentingovy cukricek, ale spolehnout se na to nemuzete. The
 Devil is in the details ;-).

 2011/2/11 Oto Buchta ta...@buchtovi.cz:
  Dne 10. února 2011 13:17 Lukas lzap Zapletal
  luka...@zapletalovi.com napsal(a):
 
  Vsechno na co se ptate mate tady
 
  http://en.wikipedia.org/wiki/OpenJDK
 
  K tomu pridam, ze je nutne davat pozor na to, pod kterou javou sve
 programy
  spoustite a pod cim jsou testovany. Neni problem pouzivat jednu nebo
 druhou
  implementacy, ale ony se lisi. Takze je nutne pouzivat tu, pod kterou je
  autor programu testuje.
 
  Musím se přiznat, že když u Javy slyším o NUTNOSTI používat stejné JVM,
  pod kterým byla aplikace vyvíjena, vždycky mne jímá hrůza a běs.
  Tolik k Write Once Run Everywhere :-(
  --
  Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com
 



 --
 S pozdravem Roman Dagi Pichlik

 /* http://dagblog.cz/ Blog pro kodery */



Re: Desetinná čísla

2011-02-09 Tema obsahu Kamil Podlesak
Doporučuji sehnat si nějaká scripta pro základy programování (FEL, MFF, FIT,
FAV etc) a nastudovat.
Klidně se může jednat o scripta dvacet let stará (naopak čím starší tím
lepší, v dnešní době se už floating point docela odbývá).

Kamil Podlešák

2011/2/8 Libor Jelinek ljeli...@virtage.com

 To znamená, že bych měl na double a float provždy zapomenout a všechno
 nahradit třídou BigDecimal (jak doporučuje Oráclí Java Tutorial)?


 Dne 8. února 2011 16:13 Filip Jirsák fi...@jirsak.org napsal(a):
  Zdravím,
 
 
  floating point number - desetinné číslo
 
  v tomhle bude zakopaný pes. Floating point number není desetinné číslo,
  ale číslo s plovoucí řádovou (nebo desetinnou) čárkou
  (vizte
 http://cs.wikipedia.org/wiki/Plovouc%C3%AD_desetinn%C3%A1_%C4%8D%C3%A1rka
  ).
  Není určeno k reprezentaci přesných desetinných čísel, ale k reprezentaci
  velkého rozsahu čísel, u kterých tolik nezáleží na přesnosti, ale je
  důležitá rychlost zpracování. Tenhle typ je nevhodné používat tam, kde
 máte
  přesná desetinná čísla – klasický případ jsou peněžní částky. Naopak je
  vhodný pro reprezentaci čísel, která už z podstaty nejsou přesná – když
 vám
  nějaký přístroj naměří, že auto jelo rychlostí 53,12756 km/h nebo že
 výrobek
  váží 15,37186 kg a počítáte s přesností na celé jednotky, nic se nestane,
  pokud si to ještě trochu upraví počítač. To samozřejmě neplatí v případě,
  kdy to vážíte s přesností na 5 desetinných míst a tuhle přesnost
 potřebujete
  zachovat – to vám opět float nebo double nezaručí a musíte použít nějaký
 typ
  se zaručenou přesností. Řekl bych, že čísla s plovoucí řádovou čárkou se
  uplatní u zpracování fyzikálních dat (např. i zpracování zvuku či
 grafika),
  v enterprise aplikacích bych na použití float nebo double skoro nastavil
  varování nějakého analyzátoru kódu.
  S pozdravem
  Filip Jirsák



Re: Co teď letí v Javě na web a verzování?

2011-02-03 Tema obsahu Kamil Podlesak
Což takhle možnost přejmenovávat a přesouvat soubory? (Aniž by se ztratila
historie)

A spousta dalších... ale zřejmě to nemá smysl

Kamil Podlešák

2011/2/3 Lukáš Záruba lukas.zar...@media-solutions.cz

  Ano, na toto jsem koukal a zdálo se mi to jako hlavní výhoda, nicméně
 pokud se to stane (a zatím se to stalo opravdu jenom párkrát) a máte k
 dispozici rozumné IDE (v mém případě eclipse), tak rozhodně nevznike
 nenapravitelný chaos. Navíc komit 100 souborů s jedním CVS komentářem není
 zrovna dobrá praktika, protože není pravděpodobné, že opravdu všechny
 soubory, které jsou touchnuté dávají smysl dohromady s tím komentářem, pak
 vznikají komity, kde do Util classy někdo přidá metodu a komentář je o
 nějakém novém aparátu, který tuto třídu jenom používá...

 Proto skutečně tuto vlastnost za tak klíčovou napovažuji. Jsou tu nějaké
 další návrhy, nebo je toto opravdu jediný klíčový rozdíl?


 Díky

 Lukáš Záruba (Lukas Zaruba)



 Dne 3.2.2011 11:26, Petr Synek napsal(a):

 Jednoznacne CVS ne proto, ze CVS nema transakcni commit.

 Pokud komitujete napr. 100 souboru a v pulce vam spadne spojeni, tak
 vznikne tezko opravitelny chaos, ktery se narocne rucne opravuje.

 Napr. SVN uz transakcni commit ma. Takze se vzdy komitne bud vse nebo nic.

 Petr

 On 03.02.2011 11:18, Lukáš Záruba wrote:

 Přemýšlel jsem nad tím, že bychom se vrhli na nějaký jiný systém, než
 CVS, ale nenašel jsem žádný argument pro podporu tohoto dost nákladného
 kroku. Můžete mi prosím říct na základě čeho CVS bych už snad ani
 nedoporučoval? Zajímá mne jestli jsem něco nepřehlédl.

 Díky

 Lukáš Záruba (Lukas Zaruba)



 Dne 3.2.2011 11:03, Tomas Vojtech napsal(a):

 CVS bych už snad ani nedoporučoval. Když už tak SVN. Ale spíš bych se
 podíval na DVCS. Jedno na který. Mně se nejvíc líbí Git.

 On 02/03/2011 10:45 AM, Michal Pavlasek wrote:

 Dobry den,

 tak z tohoto asi vznikne slusny flame :)

 Mne sa pozdava Grails ked chcem nieco nove,
 na klasicku javu najma Stripes (+displaytag, +jquery,
 +hibernate(alebo ine JPA), ...).

 A na verzionovanie SVN alebo CVS.

 bye
 CoPLaS

 2011/2/3 Libor Jelinek ljeli...@virtage.com
 mailto:ljeli...@virtage.com ljeli...@virtage.com

 Dobrý den všem,
 bohužel jsem se musel pracovně věnovat trochu jiným činnostem, než
 programování a posledních cca 4-5 let jsem na J2SE/J2EE ani nešáhnul.
 V mé době bylo top JDK 1.4 na pro web Strutsy. O JSF a Spring apod.
 se teprve začínalo mluvit :-)

 (1) Chci se zeptat, protože vím, že mi už asi docela ujel vlak, co se
 má momentálně smysl učit, pokud chci vyvíjet webové aplikace (pokud
 možno rich, tj. AJAX apod.) ? JSF nebo něco úplně už jiného?

 (2) Jaký verzovací systém se teď nejvíc používá v Javě? Stále ještě
 Mercurian? Nebo používáte Git? Mě se líbí Git a Bazaar, ale nevím
 jaký
 je tam zrovna podpora z IDEs.

 Velmi děkuji za názory :-)
 Libor





Re: Co teď letí v Javě na web a verzování?

2011-02-03 Tema obsahu Kamil Podlesak
Nuže, ono to bývá opačně - naprostá většina lidí viděla problémy CVS jako
dost zásadní na to, aby se s úlevou chytila první příležitosti se jich
zbavit.
Pokud ještě v roce 2011 CVS používáte a problémy nemáte, pak je hledání
důvodů zcela bezpředmětné.

Mimochodem, změna z CVS na SVN není nijak nákladný ani náročný proces - SVN
je tak navrženo. U jiných VCS je to náročnější, hlavně u distribuovaných kde
se výrazně mění styl práce.

Kamil Podlešák

2011/2/3 Lukáš Záruba lukas.zar...@media-solutions.cz

  Před soubor změn se můžete lehce vrátit pomocí vycheckoutování proti
 datumu a času, popřípadě pokud děláte opravdu veliké změny, tak se dá stav
 CVS otagovat a k němu vracet a porovnávat.
 Pravda veliký problém jsou přejmenované soubory (jak někdo zmiňuje dále v
 diskuzi), ale pořád to podle mého názoru nejsou rozdíly, které by
 ospravedlnily tvrzení Zkratka CVS uz radeji ne.

 Jenom bych rád upozornil, že nezastávám CVS ani SVN ani nic jiného, prostě
 se snažím dobrat DŮVODŮ, které by mohly vést ke změně. Změna verzování
 obvykle znamená dost nákladný a náročný proces, takže argumenty A spousta
 dalších... nejsou moc platné.

 Každopádně děkuji za všechny odpovědi

 S pozdravem

 Lukáš Záruba (Lukas Zaruba)


 Dne 3.2.2011 11:36, Petr Synek napsal(a):

 Navic u CVS se neda odkazat na commit ID, ktery sdruzuje komitnute soubory.
 CVS komituje soubor po souboru a dohledani toho co jsem komitnul ke
 konkretnimu tasku muzu delat leda podle text komentaru a to je dost
 neprakticke. Trochu se to da obejit pomoci CVS tagu, ale neni to ono.

 Zkratka CVS uz radeji ne :-)

 Petr

 On 03.02.2011 11:26, Petr Synek wrote:

 Jednoznacne CVS ne proto, ze CVS nema transakcni commit.

 Pokud komitujete napr. 100 souboru a v pulce vam spadne spojeni, tak
 vznikne tezko opravitelny chaos, ktery se narocne rucne opravuje.

 Napr. SVN uz transakcni commit ma. Takze se vzdy komitne bud vse nebo nic.

 Petr

 On 03.02.2011 11:18, Lukáš Záruba wrote:

 Přemýšlel jsem nad tím, že bychom se vrhli na nějaký jiný systém, než
 CVS, ale nenašel jsem žádný argument pro podporu tohoto dost nákladného
 kroku. Můžete mi prosím říct na základě čeho CVS bych už snad ani
 nedoporučoval? Zajímá mne jestli jsem něco nepřehlédl.

 Díky

 Lukáš Záruba (Lukas Zaruba)



 Dne 3.2.2011 11:03, Tomas Vojtech napsal(a):

 CVS bych už snad ani nedoporučoval. Když už tak SVN. Ale spíš bych se
 podíval na DVCS. Jedno na který. Mně se nejvíc líbí Git.

 On 02/03/2011 10:45 AM, Michal Pavlasek wrote:

 Dobry den,

 tak z tohoto asi vznikne slusny flame :)

 Mne sa pozdava Grails ked chcem nieco nove,
 na klasicku javu najma Stripes (+displaytag, +jquery,
 +hibernate(alebo ine JPA), ...).

 A na verzionovanie SVN alebo CVS.

 bye
 CoPLaS

 2011/2/3 Libor Jelinek ljeli...@virtage.com
 mailto:ljeli...@virtage.com ljeli...@virtage.com

 Dobrý den všem,
 bohužel jsem se musel pracovně věnovat trochu jiným činnostem, než
 programování a posledních cca 4-5 let jsem na J2SE/J2EE ani nešáhnul.
 V mé době bylo top JDK 1.4 na pro web Strutsy. O JSF a Spring apod.
 se teprve začínalo mluvit :-)

 (1) Chci se zeptat, protože vím, že mi už asi docela ujel vlak, co se
 má momentálně smysl učit, pokud chci vyvíjet webové aplikace (pokud
 možno rich, tj. AJAX apod.) ? JSF nebo něco úplně už jiného?

 (2) Jaký verzovací systém se teď nejvíc používá v Javě? Stále ještě
 Mercurian? Nebo používáte Git? Mě se líbí Git a Bazaar, ale nevím
 jaký
 je tam zrovna podpora z IDEs.

 Velmi děkuji za názory :-)
 Libor







Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Kamil Podlesak
Krátká verze = praktická rada: Konstrukci ? extends (a super) se
snažte vždy vyhnout. Zvlášť u proměnných.

Pro správné pochopení je potřeba plně rozumět kovarianci a
kontravanrianci
(http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29),
nicméně i tak to nemusí být intuitivně vidět. Pokusím se to popsat
zjednodušeně prakticky:

Pozn: předpokládejme   class C extends A

Proměnná typu DaoA? extends A totiž _neznamená_ instance DaoA u
které si můži za T dostadit jakéhokoliv potomka A co právě mám. To by
bylo DaoAA

Proměnná typu DaoA? extends A ve skutečnosti znamená, že do ní můžu
přiřadit nějakou instanci DaoA, která má nějaký konkrétní parametr -
může se jednat o DaoAA, DaoAB nebo DaoAC, kompilátor to neví (?
extends A mu explicitně řeklo, že to nesmí vědět).
Když pak vidí dao.doSometning(new B()) tak se podívá na ten parametr a
vidí, že tím parametrem je nějaký typ který nezná. Může to být A, může
to být B, může to být ale klidně C! Pokud by tam dovolil předat new
B(), tak v tom posledním případě klidně může dojít ke
ClassCastException.

Kamil Podlešák

2010/11/25 Martin Beranek martin.bera...@i.cz:
 Tak si trošku odpovím sám. Je třeba použít T? super B, ale neřeší to
 můj problém...

 private class A {}

 private class B extends A {}

 private abstract class DaoAT extends A {
    void doSomething(T param) {}
 }

 private class DaoB extends DaoAB {}

 a pak potrebuji

 DaoA? extends A dao = new DaoB();
 dao.doSomething(new B()); // nejde přeložit



 Dne 25.11.2010 08:06, Martin Beranek napsal(a):
 Zdravím,

 proč toto nefunguje?

 private class B {}

 private class TestT {
     void doSomething(T param) {}
 }

 a nekde potrebuji

 Test? extends B t = new TestB();
 t.doSomething(new B()); // toto nelze zkompilovat

 diky


 --
 Martin Beránek
 ICZ a.s., Pobočka Brno
 Londýnské náměstí 2/856, 639 00  Brno
 Tel.: +420 222 272 323
 Tel.: +420 222 272 111
 Fax.: +420 222 272 122
 mailto:martin.bera...@i.cz
 http://www.i.cz




Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Kamil Podlesak
Ještě intuitivnější vysvětlení je s kolekcemi:

List? extends A l;
if (externifunkce()) {
   l = new ArrayListB();
} else {
   l = new ArrayListC();
  l.add(new C());
}
//a toto nesmi byt povoleno, protoze l muze byt  ListC !
l.add( new B() );

Kamil Podlešák


Re: generika a '? extends Xxx'

2010-11-25 Tema obsahu Kamil Podlesak
Ano, to je asi nejčastější použití. To že takto deklarovaný parametr je
efektivně read-only (pokud tedy mluvíme o kolekcích) je dobré, dokonce
žádoucí.
U proměnných situace trochu jiná...

Kamil Podlešák

2010/11/25 Zdeněk Troníček troni...@fit.cvut.cz

 Konstrukci ? extends Neco bych nezavrhoval, protoze je užitečná pro
 parametry metody.
 Př.: metoda, která provede nějakou operaci se všemi prvky seznamu, v němž
 je každý prvek typu Number.

 void perform(List? extends Number p) {
for (Number n : p) {
process(n);
}
 }

 void process(Number n) { ... }

 Takto lze metodu perform volat s parametrem typu ListInteger i
 ListDouble.

 Z.
 --
 Zdenek Tronicek
 FIT CTU in Prague


 Kamil Podlesak napsal(a):
  Krátká verze = praktická rada: Konstrukci ? extends (a super) se
  snažte vždy vyhnout. Zvlášť u proměnných.
 
  Pro správné pochopení je potřeba plně rozumět kovarianci a
  kontravanrianci
  (
 http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29
 ),
  nicméně i tak to nemusí být intuitivně vidět. Pokusím se to popsat
  zjednodušeně prakticky:
 
  Pozn: předpokládejme   class C extends A
 
  Proměnná typu DaoA? extends A totiž _neznamená_ instance DaoA u
  které si můži za T dostadit jakéhokoliv potomka A co právě mám. To by
  bylo DaoAA
 
  Proměnná typu DaoA? extends A ve skutečnosti znamená, že do ní můžu
  přiřadit nějakou instanci DaoA, která má nějaký konkrétní parametr -
  může se jednat o DaoAA, DaoAB nebo DaoAC, kompilátor to neví (?
  extends A mu explicitně řeklo, že to nesmí vědět).
  Když pak vidí dao.doSometning(new B()) tak se podívá na ten parametr a
  vidí, že tím parametrem je nějaký typ který nezná. Může to být A, může
  to být B, může to být ale klidně C! Pokud by tam dovolil předat new
  B(), tak v tom posledním případě klidně může dojít ke
  ClassCastException.
 
  Kamil Podlešák
 
  2010/11/25 Martin Beranek martin.bera...@i.cz:
  Tak si trošku odpovím sám. Je třeba použít T? super B, ale neřeší to
  můj problém...
 
  private class A {}
 
  private class B extends A {}
 
  private abstract class DaoAT extends A {
 void doSomething(T param) {}
  }
 
  private class DaoB extends DaoAB {}
 
  a pak potrebuji
 
  DaoA? extends A dao = new DaoB();
  dao.doSomething(new B()); // nejde přeložit
 
 
 
  Dne 25.11.2010 08:06, Martin Beranek napsal(a):
  Zdravím,
 
  proč toto nefunguje?
 
  private class B {}
 
  private class TestT {
  void doSomething(T param) {}
  }
 
  a nekde potrebuji
 
  Test? extends B t = new TestB();
  t.doSomething(new B()); // toto nelze zkompilovat
 
  diky
 
 
  --
  Martin Beránek
  ICZ a.s., Pobočka Brno
  Londýnské náměstí 2/856, 639 00  Brno
  Tel.: +420 222 272 323
  Tel.: +420 222 272 111
  Fax.: +420 222 272 122
  mailto:martin.bera...@i.cz
  http://www.i.cz
 
 
 




Re: MD5

2010-10-15 Tema obsahu Kamil Podlesak
Špatná znaková sada, to je evidentní na první pohled.

Databáze používá UTF-8 (zkusil jsem si to a výsledek sedí)

Kamil Podlešák

2010/10/15 Radovana Straube radovana_stra...@yahoo.com:
 Dobry den,

 pouzivam Spring Security, hesla su ulozene v databaze zacryptovane s MD5. Ked 
 sa v hesle nachadzaju znaky, ktore su v ASCII tabulke do pozicie 127, vsetko 
 funguje O.K., ale akonahle niekto v pouzije v hesle znaky nad 127, MD5-kou 
 vygenerovane hashe nesedia. Samozrejme, ze mozem zakazat pouzivat v heslach 
 znaky nad 127, ale aj tak by ma zaujimalo preco to nefunguje.

 Vypis z konfiguracie Spring Security:
 authentication-manager
        authentication-provider user-service-ref=userDetailsService 
            password-encoder hash=md5/
        /authentication-provider
    /authentication-manager

 Vypis kodu, ktorym hashujem hesla:
 public static String encode(String _sPassword, String _sEncoding)
            throws NoSuchAlgorithmException, UnsupportedEncodingException {
    MessageDigest messageDigest = MessageDigest.getInstance(MD5);
    messageDigest.update(_sPassword.getBytes(_sEncoding), 0,  
 _sPassword.length());
    String hashedPass = new BigInteger(1, messageDigest.digest()).toString(16);
    if (hashedPass.length()  32) {
        hashedPass = 0 + hashedPass;
    }
    return hashedPass;
 }

 Asi by bolo riesenim zistit kde sa nachadza metoda, ktoru pouziva Spring na 
 MD5 hashovanie a pouzit priamo tu, ale to sa mi bohuzial nepodarilo.

 Robila som zopar pokusov aj s MySQL (kodovanie latin1) databazou. Ked 
 napriklad zavolam moju Javovsku metodu encode(§, ISO-8859-1),
 tak je vysledok:
 6b2b98fea11e51af3043b192f719bd69

 ale pri zavolani
 SELECT md5(§);
 je vysledok:
 bd9a4c255deec8944d99e01a64c1e322

 Vedel by prosim niekto poradit co robim nespravne? Dakujem

 Radovana Straube






Re: MD5

2010-10-15 Tema obsahu Kamil Podlesak
Screenshot je irelevantní - ukazuje jen defaultní hodnoty, neukazuje
ani ty skutečně použité u tabulky/sloupečku a neukazuje ani hodnotu
použitou pro connection (komunikaci mezi aplikací a db). MySQL je v
tomto poměrně komplikovaná.

Druhá věc je, že Spring si pravděpodobně dělá hash sám bez databáze -
tím spíš je jen očekávatelné, že používá UTF a ne latin1 (to by byl
docela bug).

Kamil Podlešák

2010/10/15 Radovana Straube radovana_stra...@yahoo.com:
 Databaza je nastavena na latin1 (vid screenshot), ale aj tak to nevysvetluje 
 problemy so Springom. Nemyslim si, ze by Spring pouzivat na MD5 hashovanie 
 metody z SQL-ka.

 --- On Fri, 10/15/10, Kamil Podlesak kamil.podle...@gmail.com wrote:

 From: Kamil Podlesak kamil.podle...@gmail.com
 Subject: Re: MD5
 To: Java konference@java.cz
 Date: Friday, October 15, 2010, 1:19 PM
 Špatná znaková sada, to je
 evidentní na první pohled.

 Databáze používá UTF-8 (zkusil jsem si to a výsledek
 sedí)

 Kamil Podlešák

 2010/10/15 Radovana Straube radovana_stra...@yahoo.com:
  Dobry den,
 
  pouzivam Spring Security, hesla su ulozene v databaze
 zacryptovane s MD5. Ked sa v hesle nachadzaju znaky, ktore
 su v ASCII tabulke do pozicie 127, vsetko funguje O.K., ale
 akonahle niekto v pouzije v hesle znaky nad 127, MD5-kou
 vygenerovane hashe nesedia. Samozrejme, ze mozem zakazat
 pouzivat v heslach znaky nad 127, ale aj tak by ma zaujimalo
 preco to nefunguje.
 
  Vypis z konfiguracie Spring Security:
  authentication-manager
         authentication-provider
 user-service-ref=userDetailsService 
             password-encoder hash=md5/
         /authentication-provider
     /authentication-manager
 
  Vypis kodu, ktorym hashujem hesla:
  public static String encode(String _sPassword, String
 _sEncoding)
             throws NoSuchAlgorithmException,
 UnsupportedEncodingException {
     MessageDigest messageDigest =
 MessageDigest.getInstance(MD5);
 
  messageDigest.update(_sPassword.getBytes(_sEncoding), 0,
  _sPassword.length());
     String hashedPass = new BigInteger(1,
 messageDigest.digest()).toString(16);
     if (hashedPass.length()  32) {
         hashedPass = 0 + hashedPass;
     }
     return hashedPass;
  }
 
  Asi by bolo riesenim zistit kde sa nachadza metoda,
 ktoru pouziva Spring na MD5 hashovanie a pouzit priamo tu,
 ale to sa mi bohuzial nepodarilo.
 
  Robila som zopar pokusov aj s MySQL (kodovanie latin1)
 databazou. Ked napriklad zavolam moju Javovsku metodu
 encode(§, ISO-8859-1),
  tak je vysledok:
  6b2b98fea11e51af3043b192f719bd69
 
  ale pri zavolani
  SELECT md5(§);
  je vysledok:
  bd9a4c255deec8944d99e01a64c1e322
 
  Vedel by prosim niekto poradit co robim nespravne?
 Dakujem
 
  Radovana Straube
 
 
 
 






Re: MD5

2010-10-15 Tema obsahu Kamil Podlesak
No, pěkně se to zamotalo, protože se tu řeší tři zcela nesouvisející věci:

1) Proč dotaz do MySQL použije UTF-8 a nikoliv latin1 jak je v databázi.
  To asi bude lepší dál nerozebírat.

2) Proč SpringSecurity (zřejmě) používá při generování hashí hesel
kódování UTF-8
 Přiznám se že netuším a ani to nechci zkoumat, protože mi to připadá
jako zcela správné a logické.

3) Vaše metoda nedokáže pracovat s UTF-8 nebo UTF-16
 Konkrétně, na této řádce je špatně počet byte:
messageDigest.update(_sPassword.getBytes(_sEncoding), 0,
_sPassword.length());
 Metoda String.length vrací počet znaků, zatímco třetí parametr
MessageDigest.update je počet byte. Tyto dvě hodnoty se shodují pro
latinX, ale pro UTF bývá počet byte větší.
 Oprava:
   messageDigest.update(_sPassword.getBytes(_sEncoding));

 Dále ještě vidím druhou chybu, menší ale o to záludnější: opravdu
stačí doplňovat jen jedinou nulu na začátek? Co když bude celý první
byte nulový?

Kamil Podlešák


2010/10/15 Radovana Straube radovana_stra...@yahoo.com:
 System.out.println(MD5Crypter.encode(§, ISO-8859-1));
 System.out.println(MD5Crypter.encode(§, UTF-8));
 System.out.println(MD5Crypter.encode(§, UTF-16));

 6b2b98fea11e51af3043b192f719bd69
 6465dad1d31752be3f3283e8f70feef7
 403ae091d3be6acf1181148527f1e0ae

 Radovana Straube







Re: Jeden beziaci proces

2010-09-06 Tema obsahu Kamil Podlesak
Dobrý den,

 Zámek v databázi má výhody:
- bude fungovat i v clusteru
- lze ho sledovat administračními nástroji databáze a případně i násilně zrušit

Kamil Podlešák

2010/9/6 Tomas Studva tstu...@gmail.com:
 Dobry den,
 v nasej aplikacii mame periodicky spustany proces. Tento proces je
 schedulovany Jbossom, a moze trvat od niekolko sekund az po niekolko minut.
 Spustany je asi kazde tri minuty. Potrebujem zarucit aby bezal iba 1 na
 celom servery. Momentalne to riesim flagom v databaze, ak je flag true, tak
 proces sa hned ukonci.

 Chcem sa spytat, ci nie je aj jednoduchsie riesenie a ako by to bolo s
 implementaciou. Ten zamok naozaj suvisi s datami, teda s databazou a
 aplikaciou. Ako druhe riesenie mi napada lockovat sa na nejakom objekte v
 aplikacii.

 Tomas Studva


Re: Divná chyba v SAX parseru?

2010-09-03 Tema obsahu Kamil Podlesak
S čím konkrétně nesouhlasíte? Nějak mi to nedává smysl...

Samozřejmě, pull parser je v takovémto případě lepší než SAX - však
také proto pull parsery vůbec existují.
Ale to neznamená, že se nikdo nepokoušel SAX parser optimalizovat.

Kamil Podlešák

2010/9/2 Oto Buchta ta...@buchtovi.cz:
 Dne 1. září 2010 15:48 Kamil Podlesak kamil.podle...@gmail.com napsal(a):
 Ono se to nezdá, ale používání stále jediné datové struktury (místo
 vytváření nových) ušetří hodně práce garbage collectoru a u opravdu
 obrovských xml to bude znát (dokonce by mohlo dojít OutOfMemoryError).

 Nesouhlasím. U opravdu velkých XML (řádově stovky MB a více) není
 konstrukce objektové reprezentace XML vůbec žádoucí a tedy pro tento
 případ je HashMapa na atributy získávaná pomocí PullParseru ideálním
 řešením. A dobrý Pull Parser používá pool, takže se akorát přesunou
 Stringy. Doufám, že takto funguje STAX (JSR 173). Nikdy jsem jiný než
 Systinetí PullParser nepoužíval - od dob Systinetu jsem nedělal s
 velkými XML.

 Kamil Podlešák

 2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Díky za tip. Zajímavé, že to v 99% funguje takto naprosto v pořádku,
 kopírovat všechny atributy do hashmapy pro každý XML element mi příjde jako
 zbytečnost, když už to je vše v instanci Attributes :-(


 --- Původní zpráva ---
  Odesilatel: Kamil Podlesak kamil.podle...@gmail.com
     Předmět: Divná chyba v SAX parseru?
       Datum: 1. září 2010, 11:25:40 (GMT +0200)
     Přílohy: none
       msgid:aanlktim1orq7=mcrkbitxqjgseuxprdncpsbrsc4s...@mail.gmail.com

 K Zdravím,

 K  Nejedná se o chybu, v dokumentaci (javadoc k metodě startElement, od
 K verze 1.5 výše) je napsáno:

 K atts - the attributes attached to the element. If there are no
 K attributes, it shall be an empty Attributes object. The value of this
 K object after startElement returns is undefined

 K  Ta poslední věta je klíčová: data z těch atributů si musíte vytahat
 K do nějaké vlastní struktury.

 K Kamil Podlešák

 K 2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Zdravím.

 Setkal se už někdo s tím, že si standardní SAX parser v JDK 1.6
 (konkrétně
 mám 1.6.0.18) vymýšlí neexistující hodnota atributů v XML?

 Konkrétně mám XML, které obsahuje kromě jiného asi 20 000 takovýchto
 elementů?
 replace key=../replace například replace
 key=unsubscribehttp://nekde.cz/neco.html/replace

 V SAX handleru, bez jakéhokoliv knihovny, jen v samotné Javě.

 V handleru pak v metod

 public void startElement() si pak pouze uložím do třídních proměnných
 atributy tagu a nuluju StringBuffer

 this.value.setLength(0);
 this.attributes = attributes;

 v endElement() pak ukládám do mapy vždy hodnotu atributu key a obsah
 celého
 elementu, tedy:

 someMap.put(attributes.getValue(key), value.toString());

 všechno funguje, až na to, že zhruba v 300 případech z těch 20 000
 elementů
 se přečte úplně jiný klíč, přípustné hodnoty jsou jen unsubscribe a link
 a v
 těch 300 případech tam je něco jako           

 Což je samozřejmě nepřípustné


 Zkoušel jsem za

 this.attributes = attributes;

 přidat

 if (attributes.getValue(0) != null 
 !link.equals(attributes.getValue(0))
  !unsubscribe.equals(attributes.getValue(0))) {
   logger.error( ' + attributes.getValue(0) + ');
 }

 abych si zalogoval všechny případy kdy k tomu dojde a přestalo to dělat,
 téměř úplně

 Takové chování VM vůbec nechápu. Kdyby to dělalo jen na jednom stroji,
 tak
 řeknu, že je něco rozbité na něm. Jenže na ten problém jsme přišli na
 Linuxovém serveru a bez problémů jsem ho napodobil i na Windows stroji.
 navíc import ještě probíhá jen v jednom vlákně.



 Datum: 9:38:09    1. září 2010
 --
 -
  Tomáš Procházka


  E-mail: t.procha...@centrum.cz
     WWW: http://www.atomsoft.cz
     ICQ: 87147320
 -


  Konec původní zprávy 

 --
 -
  Tomáš Procházka


  E-mail: t.procha...@centrum.cz
     WWW: http://www.atomsoft.cz
     ICQ: 87147320
 -




 --
 Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com



Re: Divná chyba v SAX parseru?

2010-09-03 Tema obsahu Kamil Podlesak
Tak to ano :-)
Moje poznámka rozhodně nebyla generická, týkala se opravdu jen SAXu a
jeho implementace.

Genericky však platí, že pokud zpracovávám velké množství dat, vyplatí
se zamyslet zda potřebuji vyrábět nové objekty nebo zda to bude jen
benchmark garbage collectoru. Samozřejmě ne jako _premature_
optimalization.

Kamil Podlešák

2010/9/3 Oto Buchta ta...@buchtovi.cz:
 Dne 3. září 2010 11:04 Kamil Podlesak kamil.podle...@gmail.com napsal(a):
 S čím konkrétně nesouhlasíte? Nějak mi to nedává smysl...

 S generickým tvrzením, že při zpracování obrovských XML je třeba
 hlídat OutOfMemory. Mnoho lidí o pull parserech v životě neslyšelo a
 proto by ono tvrzení mělo obsahovat klíčovou formulaci při použití
 SAXu, už jenom proto, aby to lidi trklo, že asi existuje technologie
 zpracování XML jiná než SAX, u které to nehrozí.

 Ano, mohl jsem volit slova jako ještě bych doplnil..., ale takto je
 to více do očí bijící. Takže nic proti.

 Samozřejmě, pull parser je v takovémto případě lepší než SAX - však
 také proto pull parsery vůbec existují.
 Ale to neznamená, že se nikdo nepokoušel SAX parser optimalizovat.

 Kamil Podlešák

 2010/9/2 Oto Buchta ta...@buchtovi.cz:
 Dne 1. září 2010 15:48 Kamil Podlesak kamil.podle...@gmail.com napsal(a):
 Ono se to nezdá, ale používání stále jediné datové struktury (místo
 vytváření nových) ušetří hodně práce garbage collectoru a u opravdu
 obrovských xml to bude znát (dokonce by mohlo dojít OutOfMemoryError).

 Nesouhlasím. U opravdu velkých XML (řádově stovky MB a více) není
 konstrukce objektové reprezentace XML vůbec žádoucí a tedy pro tento
 případ je HashMapa na atributy získávaná pomocí PullParseru ideálním
 řešením. A dobrý Pull Parser používá pool, takže se akorát přesunou
 Stringy. Doufám, že takto funguje STAX (JSR 173). Nikdy jsem jiný než
 Systinetí PullParser nepoužíval - od dob Systinetu jsem nedělal s
 velkými XML.

 Kamil Podlešák

 2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Díky za tip. Zajímavé, že to v 99% funguje takto naprosto v pořádku,
 kopírovat všechny atributy do hashmapy pro každý XML element mi příjde 
 jako
 zbytečnost, když už to je vše v instanci Attributes :-(


 --- Původní zpráva ---
  Odesilatel: Kamil Podlesak kamil.podle...@gmail.com
     Předmět: Divná chyba v SAX parseru?
       Datum: 1. září 2010, 11:25:40 (GMT +0200)
     Přílohy: none
       msgid:aanlktim1orq7=mcrkbitxqjgseuxprdncpsbrsc4s...@mail.gmail.com

 K Zdravím,

 K  Nejedná se o chybu, v dokumentaci (javadoc k metodě startElement, od
 K verze 1.5 výše) je napsáno:

 K atts - the attributes attached to the element. If there are no
 K attributes, it shall be an empty Attributes object. The value of this
 K object after startElement returns is undefined

 K  Ta poslední věta je klíčová: data z těch atributů si musíte vytahat
 K do nějaké vlastní struktury.

 K Kamil Podlešák

 K 2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Zdravím.

 Setkal se už někdo s tím, že si standardní SAX parser v JDK 1.6
 (konkrétně
 mám 1.6.0.18) vymýšlí neexistující hodnota atributů v XML?

 Konkrétně mám XML, které obsahuje kromě jiného asi 20 000 takovýchto
 elementů?
 replace key=../replace například replace
 key=unsubscribehttp://nekde.cz/neco.html/replace

 V SAX handleru, bez jakéhokoliv knihovny, jen v samotné Javě.

 V handleru pak v metod

 public void startElement() si pak pouze uložím do třídních proměnných
 atributy tagu a nuluju StringBuffer

 this.value.setLength(0);
 this.attributes = attributes;

 v endElement() pak ukládám do mapy vždy hodnotu atributu key a obsah
 celého
 elementu, tedy:

 someMap.put(attributes.getValue(key), value.toString());

 všechno funguje, až na to, že zhruba v 300 případech z těch 20 000
 elementů
 se přečte úplně jiný klíč, přípustné hodnoty jsou jen unsubscribe a link
 a v
 těch 300 případech tam je něco jako           

 Což je samozřejmě nepřípustné


 Zkoušel jsem za

 this.attributes = attributes;

 přidat

 if (attributes.getValue(0) != null 
 !link.equals(attributes.getValue(0))
  !unsubscribe.equals(attributes.getValue(0))) {
   logger.error( ' + attributes.getValue(0) + ');
 }

 abych si zalogoval všechny případy kdy k tomu dojde a přestalo to dělat,
 téměř úplně

 Takové chování VM vůbec nechápu. Kdyby to dělalo jen na jednom stroji,
 tak
 řeknu, že je něco rozbité na něm. Jenže na ten problém jsme přišli na
 Linuxovém serveru a bez problémů jsem ho napodobil i na Windows stroji.
 navíc import ještě probíhá jen v jednom vlákně.



 Datum: 9:38:09    1. září 2010
 --
 -
  Tomáš Procházka


  E-mail: t.procha...@centrum.cz
     WWW: http://www.atomsoft.cz
     ICQ: 87147320
 -


  Konec původní zprávy 

 --
 -
  Tomáš

Re: Divná chyba v SAX parseru?

2010-09-01 Tema obsahu Kamil Podlesak
Zdravím,

 Nejedná se o chybu, v dokumentaci (javadoc k metodě startElement, od
verze 1.5 výše) je napsáno:

atts - the attributes attached to the element. If there are no
attributes, it shall be an empty Attributes object. The value of this
object after startElement returns is undefined

 Ta poslední věta je klíčová: data z těch atributů si musíte vytahat
do nějaké vlastní struktury.

Kamil Podlešák

2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Zdravím.

 Setkal se už někdo s tím, že si standardní SAX parser v JDK 1.6 (konkrétně
 mám 1.6.0.18) vymýšlí neexistující hodnota atributů v XML?

 Konkrétně mám XML, které obsahuje kromě jiného asi 20 000 takovýchto
 elementů?
 replace key=../replace například replace
 key=unsubscribehttp://nekde.cz/neco.html/replace

 V SAX handleru, bez jakéhokoliv knihovny, jen v samotné Javě.

 V handleru pak v metod

 public void startElement() si pak pouze uložím do třídních proměnných
 atributy tagu a nuluju StringBuffer

 this.value.setLength(0);
 this.attributes = attributes;

 v endElement() pak ukládám do mapy vždy hodnotu atributu key a obsah celého
 elementu, tedy:

 someMap.put(attributes.getValue(key), value.toString());

 všechno funguje, až na to, že zhruba v 300 případech z těch 20 000 elementů
 se přečte úplně jiný klíč, přípustné hodnoty jsou jen unsubscribe a link a v
 těch 300 případech tam je něco jako           

 Což je samozřejmě nepřípustné :-(


 Zkoušel jsem za

 this.attributes = attributes;

 přidat

 if (attributes.getValue(0) != null  !link.equals(attributes.getValue(0))
  !unsubscribe.equals(attributes.getValue(0))) {
   logger.error( ' + attributes.getValue(0) + ');
 }

 abych si zalogoval všechny případy kdy k tomu dojde a přestalo to dělat,
 téměř úplně

 Takové chování VM vůbec nechápu. Kdyby to dělalo jen na jednom stroji, tak
 řeknu, že je něco rozbité na něm. Jenže na ten problém jsme přišli na
 Linuxovém serveru a bez problémů jsem ho napodobil i na Windows stroji.
 navíc import ještě probíhá jen v jednom vlákně.



 Datum: 9:38:09    1. září 2010
 --
 -
  Tomáš Procházka


  E-mail: t.procha...@centrum.cz
     WWW: http://www.atomsoft.cz
     ICQ: 87147320
 -


Re: Divná chyba v SAX parseru?

2010-09-01 Tema obsahu Kamil Podlesak
Ono se to nezdá, ale používání stále jediné datové struktury (místo
vytváření nových) ušetří hodně práce garbage collectoru a u opravdu
obrovských xml to bude znát (dokonce by mohlo dojít OutOfMemoryError).

Kamil Podlešák

2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Díky za tip. Zajímavé, že to v 99% funguje takto naprosto v pořádku,
 kopírovat všechny atributy do hashmapy pro každý XML element mi příjde jako
 zbytečnost, když už to je vše v instanci Attributes :-(


 --- Původní zpráva ---
  Odesilatel: Kamil Podlesak kamil.podle...@gmail.com
     Předmět: Divná chyba v SAX parseru?
       Datum: 1. září 2010, 11:25:40 (GMT +0200)
     Přílohy: none
       msgid:aanlktim1orq7=mcrkbitxqjgseuxprdncpsbrsc4s...@mail.gmail.com

 K Zdravím,

 K  Nejedná se o chybu, v dokumentaci (javadoc k metodě startElement, od
 K verze 1.5 výše) je napsáno:

 K atts - the attributes attached to the element. If there are no
 K attributes, it shall be an empty Attributes object. The value of this
 K object after startElement returns is undefined

 K  Ta poslední věta je klíčová: data z těch atributů si musíte vytahat
 K do nějaké vlastní struktury.

 K Kamil Podlešák

 K 2010/9/1 Tomáš Procházka t.procha...@centrum.cz:
 Zdravím.

 Setkal se už někdo s tím, že si standardní SAX parser v JDK 1.6
 (konkrétně
 mám 1.6.0.18) vymýšlí neexistující hodnota atributů v XML?

 Konkrétně mám XML, které obsahuje kromě jiného asi 20 000 takovýchto
 elementů?
 replace key=../replace například replace
 key=unsubscribehttp://nekde.cz/neco.html/replace

 V SAX handleru, bez jakéhokoliv knihovny, jen v samotné Javě.

 V handleru pak v metod

 public void startElement() si pak pouze uložím do třídních proměnných
 atributy tagu a nuluju StringBuffer

 this.value.setLength(0);
 this.attributes = attributes;

 v endElement() pak ukládám do mapy vždy hodnotu atributu key a obsah
 celého
 elementu, tedy:

 someMap.put(attributes.getValue(key), value.toString());

 všechno funguje, až na to, že zhruba v 300 případech z těch 20 000
 elementů
 se přečte úplně jiný klíč, přípustné hodnoty jsou jen unsubscribe a link
 a v
 těch 300 případech tam je něco jako           

 Což je samozřejmě nepřípustné


 Zkoušel jsem za

 this.attributes = attributes;

 přidat

 if (attributes.getValue(0) != null 
 !link.equals(attributes.getValue(0))
  !unsubscribe.equals(attributes.getValue(0))) {
   logger.error( ' + attributes.getValue(0) + ');
 }

 abych si zalogoval všechny případy kdy k tomu dojde a přestalo to dělat,
 téměř úplně

 Takové chování VM vůbec nechápu. Kdyby to dělalo jen na jednom stroji,
 tak
 řeknu, že je něco rozbité na něm. Jenže na ten problém jsme přišli na
 Linuxovém serveru a bez problémů jsem ho napodobil i na Windows stroji.
 navíc import ještě probíhá jen v jednom vlákně.



 Datum: 9:38:09    1. září 2010
 --
 -
  Tomáš Procházka


  E-mail: t.procha...@centrum.cz
     WWW: http://www.atomsoft.cz
     ICQ: 87147320
 -


  Konec původní zprávy 

 --
 -
  Tomáš Procházka


  E-mail: t.procha...@centrum.cz
     WWW: http://www.atomsoft.cz
     ICQ: 87147320
 -


Re: Rozdily v Jave na Windows a Linuxu

2010-08-10 Tema obsahu Kamil Podlesak
Pokud se nepletu, tak na windows je defaultní client VM, zatímco jinde
server VM. Liší se v tom kdy a jak provádějí kompilaci a optimalizace
JITem.

Takže teoreticky je možné, že -client  provede ihned optimalizaci a
vyhodí přetypování na Employee, zatímco -server se pokusí alespoň
jednou provést smyčku bez optimalizace.

Hodně záleží na tom, jak vypadá bytecode. Samotný kód v Javě tady moc
nepomůže, protože z něj nevidíme zda tam to přetypování opravdu je
nebo není (ale nejspíš je, když se provádí).


Kamil Podlešák

2010/8/10 Ondra Medek xmed...@gmail.com:
 Sorry, napsal jsem to spatne. Toto:

 for (Object object : list) {
   @SuppressWarnings(unchecked)
   MapString, Object map = (MapString, Object)object;
   // ...
  }

 projde na Win, ale na Linuxu ne. Toto:

 for (Object object : (List?)list) { ... }

 projde vsude.

 Take mne zarazilo, proc to na tom linuxu neprojde, kdyz se typove
 parametry odmazavaji. Jo to pripadne JRE bug?


 2010/8/10 Zdeněk Troníček troni...@fit.cvut.cz:
 Ahoj,

 vzdyt tam mas pretypovani na List?. Tak si nejsem jisty, jak jsi to
 myslel. Jinak cyklus

 for (Employee e : list) {
  ...
 }

 bude pred prekladem (ve fazi desuggaring) nahrazen cyklem

 for (IteratorEmployee i = list.iterator(); i.hasNext(); ) {
  Employee e = i.next();
  ...
 }

 Tedy cyklus

 for (Object o : list) {
  ...
 }

 kde list je typu ListEmployee bude nahrazen cyklem

 for (IteratorEmployee i = list.iterator(); i.hasNext(); ) {
  Object o = i.next();
  ...
 }

 Po odmazani typovych parametru:

 for (Iterator i = list.iterator(); i.hasNext(); ) {
  Object o = i.next();
  ...
 }

 Takze podle meho nazoru by to volani melo projit.

 Z.
 --
 Zdenek Tronicek
 FIT CTU in Prague


 Ondra Medek napsal(a):
 Ahoj,

 mam metodu

 protected void process(ListEmployee list) {
   // ...

   for (Object object : (List?)list) {
     @SuppressWarnings(unchecked)
     MapString, Object map = (MapString, Object)object;
     // ...
   }
 }

 ovsem za parametr list je misto ListEmployee pouzivan ListHashMap.
 Ano, je to prasarna, ale to je ted vedlejsi.

 na stroji WinXP s
 java version 1.6.0_18
 Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
 Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

 to projde, kdezto na Linuxu se stejnou Javou:
 java version 1.6.0_18
 Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
 Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

 to vyhodi

 java.lang.ClassCastException: java.util.HashMap cannot be cast to
 cz.prins.tiger.db.Employee

 Jen by mne zajimalo, ktere chovani je dobre? BTW. kdyz ten list
 pretypuju na List?, tak to dopadne dobre vsude.


 --
 Ondra Medek






 --
 Ondra Medek



Re: Rozdily v Jave na Windows a Linuxu

2010-08-10 Tema obsahu Kamil Podlesak
To se mi nezdá. Tento bytecode nemůže vyhodit ClassCastException, IMHO
ten poůvodní bytecode vypadal jinak.

Kamil Podlešák

2010/8/10 Zdeněk Troníček troni...@fit.cvut.cz:
 V byte kodu pretypovani neni. Metoda

   protected static void process(ListEmployee list) {
        for (Object o : list) {
            System.out.println(o);
        }
    }

 se prelozi takto:

 protected static void process(java.util.List);
  Code:
   0:   aload_0
   1:   invokeinterface #2,  1; //InterfaceMethod
 java/util/List.iterator:()Ljava/util/Iterator;
   6:   astore_1
   7:   aload_1
   8:   invokeinterface #3,  1; //InterfaceMethod
 java/util/Iterator.hasNext:()Z
   13:  ifeq    33
   16:  aload_1
   17:  invokeinterface #4,  1; //InterfaceMethod
 java/util/Iterator.next:()Ljava/lang/Object;
   22:  astore_2
   23:  getstatic       #5; //Field
 java/lang/System.out:Ljava/io/PrintStream;
   26:  aload_2
   27:  invokevirtual   #6; //Method
 java/io/PrintStream.println:(Ljava/lang/Object;)V
   30:  goto    7
   33:  return

 [WindowsXP, java version 1.6.0_17
 Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
 Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)]

 Jinak puvodni otazka byla jak to ma spravne fungovat?. Na to jsem
 odpovidal. Nicmene otazka proc to na linuxu vyhazuje vyjimku? je take
 zajimava :).

 Z.
 --
 Zdenek Tronicek
 FIT CTU in Prague


 Kamil Podlesak napsal(a):
 Pokud se nepletu, tak na windows je defaultní client VM, zatímco jinde
 server VM. Liší se v tom kdy a jak provádějí kompilaci a optimalizace
 JITem.

 Takže teoreticky je možné, že -client  provede ihned optimalizaci a
 vyhodí přetypování na Employee, zatímco -server se pokusí alespoň
 jednou provést smyčku bez optimalizace.

 Hodně záleží na tom, jak vypadá bytecode. Samotný kód v Javě tady moc
 nepomůže, protože z něj nevidíme zda tam to přetypování opravdu je
 nebo není (ale nejspíš je, když se provádí).


 Kamil Podlešák

 2010/8/10 Ondra Medek xmed...@gmail.com:
 Sorry, napsal jsem to spatne. Toto:

 for (Object object : list) {
   @SuppressWarnings(unchecked)
   MapString, Object map = (MapString, Object)object;
   // ...
  }

 projde na Win, ale na Linuxu ne. Toto:

 for (Object object : (List?)list) { ... }

 projde vsude.

 Take mne zarazilo, proc to na tom linuxu neprojde, kdyz se typove
 parametry odmazavaji. Jo to pripadne JRE bug?


 2010/8/10 Zdeněk Troníček troni...@fit.cvut.cz:
 Ahoj,

 vzdyt tam mas pretypovani na List?. Tak si nejsem jisty, jak jsi to
 myslel. Jinak cyklus

 for (Employee e : list) {
  ...
 }

 bude pred prekladem (ve fazi desuggaring) nahrazen cyklem

 for (IteratorEmployee i = list.iterator(); i.hasNext(); ) {
  Employee e = i.next();
  ...
 }

 Tedy cyklus

 for (Object o : list) {
  ...
 }

 kde list je typu ListEmployee bude nahrazen cyklem

 for (IteratorEmployee i = list.iterator(); i.hasNext(); ) {
  Object o = i.next();
  ...
 }

 Po odmazani typovych parametru:

 for (Iterator i = list.iterator(); i.hasNext(); ) {
  Object o = i.next();
  ...
 }

 Takze podle meho nazoru by to volani melo projit.

 Z.
 --
 Zdenek Tronicek
 FIT CTU in Prague


 Ondra Medek napsal(a):
 Ahoj,

 mam metodu

 protected void process(ListEmployee list) {
   // ...

   for (Object object : (List?)list) {
     @SuppressWarnings(unchecked)
     MapString, Object map = (MapString, Object)object;
     // ...
   }
 }

 ovsem za parametr list je misto ListEmployee pouzivan ListHashMap.
 Ano, je to prasarna, ale to je ted vedlejsi.

 na stroji WinXP s
 java version 1.6.0_18
 Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
 Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

 to projde, kdezto na Linuxu se stejnou Javou:
 java version 1.6.0_18
 Java(TM) SE Runtime Environment (build 1.6.0_18-b07)
 Java HotSpot(TM) 64-Bit Server VM (build 16.0-b13, mixed mode)

 to vyhodi

 java.lang.ClassCastException: java.util.HashMap cannot be cast to
 cz.prins.tiger.db.Employee

 Jen by mne zajimalo, ktere chovani je dobre? BTW. kdyz ten list
 pretypuju na List?, tak to dopadne dobre vsude.


 --
 Ondra Medek






 --
 Ondra Medek






Re: HQL syntax: select p is null from Pacient p

2010-07-13 Tema obsahu Kamil Podlesak
Předpokládám, že tazatel prostě chce resultset kde bude mít TRUE nebo FALSE

Jak toho dosáhnout, to ale nevím. Zkusil bych dát výraz do závorek a
hlavně přidal  AS jmeno_sloupce

Kamil Podlešák

2010/7/13 Oto Buchta ta...@buchtovi.cz:
 2010/7/13 Petr Prikryl peter.prik...@gmail.com:
 select p*, v.provedeno eq NULL from pacient p natural join vysetreni v;

 takze spis

 select p.*, v.provedeno from pacient p LEFT JOIN vysetreni v

 ?

 Priznam se ze konstrukci
 select a [eq| is|=|==] NULL from tabulka
 neznam

 A ani nevim, co by mela delat.

 select a from tabulka where a is null?



 Diky
 PP


 On 07/13/2010 02:36 PM, Oto Buchta wrote:

 A to ma byt SQL eqivalent k necemu jako
 select * from Pacient where vystupni_vystreni is null ???

 Pak je samozrejme potreba pouzit WHERE klausuli...

 Dne 13. července 2010 14:30 Petr Prikrylpeter.prik...@gmail.com
  napsal(a):


 Dobry den uz se 2 dny morim s 1 HQL dotazem.

 select p is null from Pacient p
 zpusobi
 Caused by: org.hibernate.QueryException: , expected in SELECT [select p
 is
 null from cz.admin24.evidencePacientu.entity.Pacient p]
        at
 org.hibernate.hql.classic.SelectParser.token(SelectParser.java:175)
        at
 org.hibernate.hql.classic.ClauseParser.token(ClauseParser.java:86)


 At zkousim dat mist is null =, ==
 nic nepomaha

 select p  from Pacient p
 funguje

 a proc to chci?
 protoze potrebuji pro view udelat prehledovou tabulku ktera bude pouzivat
 cca takove HQL




 Jak se to pise spravne
 podle BNF by ta syntax mela byt podporovana..
 http://www.finesight.com/hibernate-3.2.5/other/hql-bnf.html#selectObject
 .
 Diky
 PP

 --
 Petr Prikryl
 ---
 petrprik...@centrum.cz
 prik...@admin24.cz
 www.admin24.cz








 --
 Petr Prikryl
 ---
 petrprik...@centrum.cz
 prik...@admin24.cz
 www.admin24.cz





 --
 Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com



Re: JPA/Hibernate remove entity a cizi klice

2010-07-01 Tema obsahu Kamil Podlesak
Zdravím,

 Rád bych upozornil na jednu slabinu této metody: jakmile dojde k
výjimce, provede se automaticky rollback. Takže pokud v té transakci
máte více operací, tak je ztratíte všechny.
 Při použití čistého JDBC můžete u některých databází chybu ignorovat
a transakci commitnout i tak, ale to nebude fungovat na všech
databázích (např. postgresql automaticky při chybě také provede
rollback).

 Pokud výše uvedené nevadí, rollback se má provést a celý problém je
jen ve výjimce v logu... já bych to klidně ignoroval, pokud se to bude
stávat vzácně. Pokud je to zcela běžná situace, pak bych použil čisté
řešení: kontrolovat stav před mazáním.

Kamil Podlešák

2010/6/30 Ondra Medek xmed...@gmail.com:
 Ahoj,

 chci vymazat JPA entitu, ktera muze byt refencovana pres cizi klice. V
 takovem pripade chci uzivateli zobrazit nejake hlaseni nelze
 vymazat. Klasicke JDBC reseni bych delal pres DELETE FROM ...,
 odchytnu SQLException a zobrazim hlaseni. V JPA/Hibernate mohu delat
 neco podobneho:

 try {
 em.remove(...);
 em.flush();
 } catch () {
  // nelze vymazat
 }

 Tady mne zarazi, ze:

 1. catch chyti jakousi obecnou  javax.persistence.PersistenceException
 (nested org.hibernate.exception.GenericJDBCException a dalsi nested
 java.sql.BatchUpdateException: failed batch)
 2. Hibernate zaloguje chyby:
 14:43:09,890 WARN  [JDBCExceptionReporter] SQL Error: 0, SQLState: null
 14:43:09,890 ERROR [JDBCExceptionReporter] failed batch
 14:43:09,890 ERROR [AbstractFlushingEventListener] Could not
 synchronize database state with session

 Tak si rikam, ze to asi nebude spravne reseni, kdyz Hibernate loguje
 chyby. Navic nechci mit v logu chyby, kdyz vlastne k zadne chybe
 nedoslo. Nemohu ovsem najit, jak se ma v takovem pripade spravne
 postupovat? Manualni kontrola JPQL/HQL query pred em.remove()? Pokud
 ano, neni to trochu tezkopadne?

 Dik za radu
 Ondra Medek



Re: hibernate a instanceOf

2010-03-12 Tema obsahu Kamil Podlesak
To už jsme vyřešili, myslel jsem si že Hibernate používá přetížené
settery pro sledování změn - což není pravda, s něčím jsem si to
spletl...
Nicméně je potřeba počítat s tím že při práci s Hibernate se proxy
může objevit a že tato proxy může být odvozena od deklarovaného
předka, i když uvnitř je potomek.

Kamil Podlešák


2010/3/11 Roman Zakutny roman.zaku...@gmail.com:
 Predstavte si entitu A, ktora ma v sebe referenciu na entitu B s anotaciou
 @OneToOne(fetch=LAZY).
 Ked nacitate objekt A pomocou Hibernate, za normalnych okolnosti nebude
 proxiovany. Proxy reprezentuju len vnutorne referencie na objekty, ktore su
 natahovane lazy - v nasom pripade B. @OneToOne a @ManyToOne proxiuje Entity
 objekt, @ManyToMany a @OneToMany proxiuje Collection. Ten zapuzdrujuci
 objekt A by bol proxy, keby sme priamym pristupom na jeho getter chceli
 nacitat lazy data. To vsak nie je bezne: nenacitavame predsa meno osoby lazy
 modom...
 Cele to smeruje k tomu, ze kludne mozete pristupit na lazy referenciu B
 reprezentovanu proxy objektom a na nej dokonca na jej ID, ktore bude
 inicializovane. To je vdaka tomu, ze ID je dostupne v ramci tabulky, ktoru
 tym zapuzdrujucim objektom A mapujete a ta si toto ID natiahne. Kludne
 mozete tento lazy objekt B pouzit pri vytvarani novych dotazov. Vsetko bez
 toho, aby bol dodatocne natiahnuty! Load nastane az v momente ak pristupite
 na nejaky getter objektu B...
 2010/3/11 Roman Pichlík roman.pich...@gmail.com

  Ne často, vždy :-)
  Je to základní princip fungování Hibernate.

 to bych nerekl, ze vzdycky vraci proxy. IMHO pouze pokud je to potreba
 napr. lazy loading.

 --
 S pozdravem Roman Dagi Pichlik

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




Re: hibernate a instanceOf

2010-03-11 Tema obsahu Kamil Podlesak
Ne často, vždy :-)
Je to základní princip fungování Hibernate.

Kamil Podlešák

2010/3/11 Tomas Hubalek tomas.huba...@onsemi.com:
 Nechtel jsi spis pouzit Class.isAssignableFrom? Hibernate Ti primo v
 dokumentaci nezarucuje, ze kdyz mu das nejakou tridu, tak primo ji
 dostanes. Hodne casto dostanes nejakeho jejich potomka.

 -Original Message-
 From: konference-boun...@java.cz
 [mailto:konference-boun...@java.cz] On Behalf Of Ivan Polak
 Sent: Thursday, March 11, 2010 12:47 PM
 To: Java
 Subject: hibernate a instanceOf

 Zdravim konferenciu,

 mam v hibernate nasledovne objekty:

 objekt Customer :

 @Entity
 @Table(name=customer)
 @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
 @DiscriminatorColumn(name = customer_type,
 discriminatorType=DiscriminatorType.STRING)
 public abstract class Customer extends BaseObject { 
 }

 a od neho odvodeny objekt Shipper:

 @Entity
 @DiscriminatorValue(S)
 public class Shipper extends Customer {
 ...}

 potrebujem pouzit nasledovny test:

 returnValue = Class.forName(className).isInstance(o);

 kde className je premenna typu String s hodnotou com.project.Shipper
 a Objekt o je cez Hibernate vytiahnuty objekt z DB,
 zobraznene vo watch okne: Customer_$$_javassist_145 (...).

 preco je returnValue FALSE, ked by podla mna malo byt TRUE ?

 dakujem

 Ivan




Re: hibernate a instanceOf

2010-03-11 Tema obsahu Kamil Podlesak
Pokud si dobře pamatuji, tak tímto způsobem i sleduje, zda a kdy (a
jak) se změnily hodnoty, aby je pak uložil.

Každopádně, ještě bych dodal: původní tazatel udělal chybu v tom, že
za dynamickou obdobu operátoru instanceof považoval Class.isInstance,
což je špatně (správně je Class.isAssignableFrom).

Kamil Podlešák

2010/3/11 Roman Pichlík roman.pich...@gmail.com:
 Ne často, vždy :-)
 Je to základní princip fungování Hibernate.

 to bych nerekl, ze vzdycky vraci proxy. IMHO pouze pokud je to potreba
 napr. lazy loading.

 --
 S pozdravem Roman Dagi Pichlik

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



Re: hibernate a instanceOf

2010-03-11 Tema obsahu Kamil Podlesak
Pozor na pořadí:
 A instanceof B  ==  B.class.isAssignableFrom(A.getClass())

ALE

Podíval jsem se na to pořádně a musím si posypat popel na hlavu:
problém je někde úplně jinde a isInstance by dokonce bylo správně.
Problém je ve skutečnosti v tom, že Hibernate vytvoří proxy pro
Customer, i když objekt je ve skutečnosti potomek.

Je to specifický problém Hibernate a řešením je deproxyfikace pomocí
(HibernateProxy)o).getHibernateLazyInitializer().getImplementation(),
případně vypnutí proxy pomocí @Proxy(lazy=false)  (tady je ale otázka
zda to je použitelné...). Více podrobností (a odkazy na další varianty
řešení) na:

http://blog.smart-java.nl/blog/index.php/2010/03/08/hibernate-lazy-loading-and-inheritance/

Kamil Podlešák

PS: Asi si budu muset stáhnout aktuální zdrojáky a podívat se, jakým
způsobem sleduje změny bez proxy, to mě docela zajímá.

2010/3/11 Ivan Polak ivan.po...@f4s.sk:
 podla rady som uvedeny riadok :

 returnValue = Class.forName(className).isInstance(o);

 zmenil na:

 returnValue = o.getClass().isAssignableFrom(Class.forName(className));

 ako som uviedol className je premenna typu String s hodnotou
 com.project.Shipper
 a Objekt o je cez Hibernate vytiahnuty objekt z DB, zobraznene vo
 watch okne: Customer_$$_javassist_145 (...).


 dakujem

 Ivan

 2010/3/11 Kamil Podlesak kamil.podle...@gmail.com:
 Pokud si dobře pamatuji, tak tímto způsobem i sleduje, zda a kdy (a
 jak) se změnily hodnoty, aby je pak uložil.

 Každopádně, ještě bych dodal: původní tazatel udělal chybu v tom, že
 za dynamickou obdobu operátoru instanceof považoval Class.isInstance,
 což je špatně (správně je Class.isAssignableFrom).

 Kamil Podlešák

 2010/3/11 Roman Pichlík roman.pich...@gmail.com:
 Ne často, vždy :-)
 Je to základní princip fungování Hibernate.

 to bych nerekl, ze vzdycky vraci proxy. IMHO pouze pokud je to potreba
 napr. lazy loading.

 --
 S pozdravem Roman Dagi Pichlik

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





Re: Anotacia Override pri implementacii metody interfaceu

2010-03-09 Tema obsahu Kamil Podlesak
Ano, toto bylo v 1.5 smysluplné, bohužel nějaká HLAVA vymyslela že se
to do 1.6 změní.

Kamil Podlešák

2010/3/9 Zdenek Tronicek troni...@fit.cvut.cz:
 Pouziti anotace pri implementaci metody z rozhrani je v rozporu se
 specifikaci (JLS, str. 279):

 Note that if a method overrides a method from a superinterface but not
 from a superclass, using @Override will cause a compile-time error.

 Tj. pokud ji tam nejaky program vyzaduje, lze to povazovat za bug.
 (Moje NetBeans 6.8 ji nevyzaduji.)


Re: spring-jdbc a transakcie

2010-02-16 Tema obsahu Kamil Podlesak
Zdravím,

 První chyba je v tom, že to děláte špatně i v čistém JDBC a
používáte nestandardní a nepřenosné příkazy BEGIN/COMMIT/ROLLBACK.
Používejte přímo metody commit a rollback, když už (BEGIN je zcela
zbytečné, transakce začíná prvním příkazem po commit nebo rollback).

 No a k samotnému problému: je tam několik možných příčin, jako bych
viděl že ta transakce je nejspíš autocommit a ten
org.h2.jdbcx.JdbcDataSource vůbec neumožňuje ho vypnout. Ten fígl s
getConnection().setAutoCommit(false) rozhodně nebude fungovat - každé
volání getConnection() vrátí novou instanci, viz zdrojáky.

Jako jiný fígl by mohlo zafungovat vytvoření
org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy jako
wrapperu.
Korektní je použít nějaký connection pool (commons-dbcp, c3p0).

Je možné použít řízení transakcí Springem, jak již zde padlo, ale to
bude výrazně (a možná zbytečně) složitější.

Kamil Podlešák

2010/2/16 Dusan Zatkovsky msk.c...@gmail.com:
 Ahoj.

 Vzhladom na to, ze vsade na nete narazam na nazor, ze priamo s JDBC pracuje 
 len hazarder
 a mal by sa pouzit aspon spring-jdbc, snazim sa s nim nejak zoznamit.

 V niektorych veciach sa mi vcelku paci a dokaze co-to ulahcit,
 ale zapasim s transakciami. V cistom jdbc je to jednoduche:

 Connection c = ...;

 c.execute(begin);
 try {
  c.execute...
  c.execute...
  c.execute...
  c.execute...
  c.execute(commit); // alebo rollback
 } catch () {
  c.execute(rollback);
 }

 S pomocou JdbcTemplate to ale nefunguje:

        org.h2.jdbcx.JdbcDataSource ds = new JdbcDataSource();
        ds.setURL(jdbc:h2:/tmp/test);

        JdbcTemplate t = new JdbcTemplate(ds);
        t.getDataSource().getConnection().setAutoCommit(false);


        t.execute(drop table if exists data;);
        t.execute(create table if not exists data ( id integer, name 
 varchar););

        t.update(insert into data values ( 1, 'name1'););
        showTable(t);

        t.execute(begin);

        t.update(insert into data values ( 2, 'name2'););
        showTable(t);

        t.execute(rollback);

        showTable(t);


 Vystup:

 [{ID=1, NAME=name1}]
 [{ID=1, NAME=name1}, {ID=2, NAME=name2}]
 [{ID=1, NAME=name1}, {ID=2, NAME=name2}]

 Rollback bol ignorovany, pravdepodobne aj begin transaction.
 Bud som nespravnym sposobom naivne nastavil autocommit,
 alebo JdbcTemplate robi nejake dalsie harakiri s connection, ktore moc 
 nechapem.

 Problem je, ze nikde na webe nemozem najst nejaky JEDNODUCHY navod,
 ako na transakcie so spring-jdbc. Nasiel som len kopu otazok bez odpovedi, 
 pripadne
 odpovede s linkom na kopu xml chaosu a stovky riadkov mne nepochopitelneho 
 kodu:

 http://static.springsource.org/spring/docs/2.5.x/reference/transaction.html

 Poradi niekto?

 Dik

 --
 Dusan



Re: spring-jdbc a transakcie

2010-02-16 Tema obsahu Kamil Podlesak
Ano, prostě použijte:

 org.springframework.jdbc.datasource.SingleConnectionDataSource

Samozřejmě při růstu aplikace za chvíli narazíte, ale to můžete řešit dodatečně.

Kamil Podlešák

2010/2/16 Dusan Zatkovsky msk.c...@gmail.com:
 OK, presiel som to vsetko 3x a som na zaciatku.

 Skusim teda este raz:

 Mozem pouzivat spring-jdbc a vyuzivat jeho vyhody ( generiky v *template, row
 mappery a tak podobne ) a zaroven riadit transakcie rucne, bez roznych
 wrapperov, anotacii a uchylnych xml?

 Pretoze po preluskani vsemoznej dokumentacie a examplov tu uvedenych som
 dospel k zaveru, ze usetrene 4 riadky kodu (vypustenim PreparedStatement-u a
 try-catch) musim nahradit 50timi riadkami roznych wrapperov, callbackov a xml
 a este bohvie ako to konfigurovat (@Transactional), aby to vobec chodilo. Do
 toho sa mi fakt moc nechce ... :)

 Diky.

 Pokud se volají z jedné metody označené jako @Transactional,
 tak budou všechny v jedné transakci. Tj. klidně to může vypadat nějak
 takto:

 @Transactional
 public void hlavni(Nahrada nove) {
   Neco neco = najit();
   smazat(neco);
   vlozit(nove);
 }

 Makub



 --
 Dusan



Re: Kdy pouzit Object.finalize()?

2010-01-28 Tema obsahu Kamil Podlesak
Zdravím,

 Efektivně by se měl považovat za deprecated.

 Problém je v tom, že vlastně netušíme jaký je stav aplikace v
okamžiku volání finalize. Nevíme v jakém jsme právě vlákně, nevíme
jaké máme k dispozici prostředky. Může se docela klidně stát, že něco
co potřebujeme k uklizení je již uvolněno a finalizováno - nebo je
právě uvolňováno. Nevíme zda je bezpečné zamknout sdílené objekty nebo
není - čeká na nás GC nebo ne? A tak dále, a tak dále...
 V jednoduchých případech nic z toho nevadí; bohužel, jednoduchých
případů moc není.

 Jak jsem již napsal v předchozí diskusi: pokud potřebuji po nějakém
objektu uklízet, místo finalize() je lepší používat PhantomReference
a uklízecího démona, který vybírá události o uvolnění objektu (z
ReferenceQueue) a pak provede úklid. Má to dvě hlavní výhody:
 - uvolněný objekt již skutečně neexistuje - na rozdíl od finalize(),
kdy je v jakémsi nedefinovaném stavu (očistec ?)
 - uklízecí démon může brát v úvahu aplikační stav - zda je již
aplikace plně inicializovaná a nakonfigurovaná, nebo naopak zda
probíhá shutdown, atd
 - uklízecí démon má k dispozici všechno co celá aplikace - databáze,
komunikace s okolím, může klidně na všechno toto čekat...

 Snad jsem to napsal trochu srozumitelně.

Kamil Podlešák

2010/1/28 Ondra Medek xmed...@gmail.com:
 Ahoj,

 navazuji tak trochu na predchozi thread. Jsem ted zmaten, jesli ma
 Object.finalize() smysl nebo by mel byt @Deprecated. Pokud ma smysl,
 tak kdy ho pouzit?

 V JDK 1.6 JavaDoc dokumentaci
 http://java.sun.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29
 stoji:

 For example, the finalize method for an object that represents an
 input/output connection might perform explicit I/O transactions to
 break the connection before the object is permanently discarded.

 Clanek ja Javaworld
 http://www.javaworld.com/javaworld/jw-06-1998/jw-06-techniques.html
 tez radi ve finalize() uvolnovat systemove zdroje, ale pouze jako
 fallback mechanism. (Coz mi presne sedi pro ten java.awt.Window
 problem).

 Progrepoval jsem JDK 1.6 zdrojaky a SUN se k finalize() asi stavi
 ambivalentne: nekde ho pouziva, nekde ne. Priklady pouziti:
 java.util.zip.ZipFile - zavira IO stream
 java.io.FileInputStream + java.io.FileOutputStream : zaviraji file descriptory
 ... a dalsi

 Nejvice je onen ambivalentni pristup videt na ImageInputStreamImpl a
 FileImageOutputStream z baliku javax.imageio.stream:
 ImageInputStreamImpl ma finalize(), ktere v podstate jen nastavi
 priznak isClosed = true
 FileImageOutputStream je potomek ImageInputStreamImpl a prepisuje
 finalize(), ve kterem nedela nic.

 Dale jsem nasel treba zakomentovany finalize(), ktery puvodne zavitral
 IO stream, v com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl s
 poznamkou, ze It affects the performance greatly in multi-thread
 environment. . Tedy ZipFile vesele IO stream zavira ve finalize(),
 kdezto CoreDocumentImpl  to ma zakomentovane.

 Diky
 Ondra Medek



Re: Kdy pouzit Object.finalize()?

2010-01-28 Tema obsahu Kamil Podlesak
Tady bych opravil: výjimku ve finalize() zapsat do logu, vyhodit ji
nemá moc smysl (to je právě jeden z problémů finalize: co se stane
když vyletí výjimka?)

Jinak tuto praktiku vřele doporučuji, samozřejmě je pak nutné nechat
nějak automaticky sledovat (grepovat) aplikační log na produkci a
nalezené chyby opravovat.
Spoléhat na programátorskou disciplinu je _velmi_ deprecated :-)

Kamil Podlešák

2010/1/28 Filip Jirsák filip.jir...@gmail.com:
 Ještě doplním, že může být vhodné tu pojistku doplnit assertem, který
 upozorní na to, že někdo někde tu úklidovou metodu zavolat zapomněl. Záleží
 pak na kontextu, jestli tohle stačí, nebo jestli je k tomu potřeba si
 táhnout nějakou další informaci – typicky v konstruktoru si (pod assertem)
 vytvořit výjimku, uložit si ji, při zavolání close() ji vymazat a ve
 finalize() otestovat její přítomnost, a pokud výjimka existuje, vyhodit jí.

 S pozdravem

 Filip Jirsák

 --
 fi...@jirsak.org


 Dne 28. ledna 2010 11:44 Zdenek Tronicek troni...@fit.cvut.cz napsal(a):

 Aplikacni programator udela nejlepe, kdyz na finalize() zapomene a misto
 nej bude pouzivat metodu pro uklid a try + finally:

 InputStream is = ...
 try {
  ...
 } finally {
  is.close();
 }

 Pokud jde o to, zda ma finalize nekdy smysl, tak ano: muze to byt pojistka
 pro pripad, ze programator zapomnel zavolat uklidovou metodu. Programator
 by na to ovsem nemel spolehat a mel by se snazit, aby kazdy objekt po sobe
 uklidil.
 Jinak ten clanek, ktery uvadis, je z roku 98. Takze to asi nebude
 nejvhodnejsi zdroj.

 Z.T.
 --
 Zdenek Tronicek
 FIT CTU in Prague


 Ondra Medek napsal(a):
  Ahoj,
 
  navazuji tak trochu na predchozi thread. Jsem ted zmaten, jesli ma
  Object.finalize() smysl nebo by mel byt @Deprecated. Pokud ma smysl,
  tak kdy ho pouzit?
 
  V JDK 1.6 JavaDoc dokumentaci
 
  http://java.sun.com/javase/6/docs/api/java/lang/Object.html#finalize%28%29
  stoji:
 
  For example, the finalize method for an object that represents an
  input/output connection might perform explicit I/O transactions to
  break the connection before the object is permanently discarded.
 
  Clanek ja Javaworld
  http://www.javaworld.com/javaworld/jw-06-1998/jw-06-techniques.html
  tez radi ve finalize() uvolnovat systemove zdroje, ale pouze jako
  fallback mechanism. (Coz mi presne sedi pro ten java.awt.Window
  problem).
 
  Progrepoval jsem JDK 1.6 zdrojaky a SUN se k finalize() asi stavi
  ambivalentne: nekde ho pouziva, nekde ne. Priklady pouziti:
  java.util.zip.ZipFile - zavira IO stream
  java.io.FileInputStream + java.io.FileOutputStream : zaviraji file
  descriptory
  ... a dalsi
 
  Nejvice je onen ambivalentni pristup videt na ImageInputStreamImpl a
  FileImageOutputStream z baliku javax.imageio.stream:
  ImageInputStreamImpl ma finalize(), ktere v podstate jen nastavi
  priznak isClosed = true
  FileImageOutputStream je potomek ImageInputStreamImpl a prepisuje
  finalize(), ve kterem nedela nic.
 
  Dale jsem nasel treba zakomentovany finalize(), ktery puvodne zavitral
  IO stream, v com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl s
  poznamkou, ze It affects the performance greatly in multi-thread
  environment. . Tedy ZipFile vesele IO stream zavira ve finalize(),
  kdezto CoreDocumentImpl  to ma zakomentovane.
 
  Diky
  Ondra Medek
 





Re: Swing a uvolnovani Window

2010-01-27 Tema obsahu Kamil Podlesak
Ano, použil jsem ho několikrát právě pro takovéto případy. Například
reference na session beany v EJB2 projektu, JDBC Connection/Statement
atd.

Tedy ne že by se tím vyloženě _nahradilo_ korektní
zavírání/uvolňování, ale ono se vždy najde spousta míst kde nějak to
korektní zavření chybí. Takže druhá linie je velmi praktická.

Kamil Podlešák

2010/1/26 Oto Buchta ta...@buchtovi.cz:
 Dne 26. ledna 2010 17:28 Kamil Podlesak kamil.podle...@gmail.com napsal(a):
 Ještě bych doplnil: pokud potřebuji použít finalizér, tak správné
 řešení je použít PhantomReference a speciální vlákno (daemon) které mi
 provádí úklid.

 e.p.: Pouzil uz z vas nekdo PhantomReference?

 --
 Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com



Re: Swing a uvolnovani Window

2010-01-26 Tema obsahu Kamil Podlesak
Ještě bych doplnil: pokud potřebuji použít finalizér, tak správné
řešení je použít PhantomReference a speciální vlákno (daemon) které mi
provádí úklid.

Kamil Podlešák

2010/1/26 Ladislav Thon ladi...@gmail.com:
 GC slouží k automatické správě _paměti_ a jenom paměti. Byly sice snahy
 napasovat to i na ostatní zdroje (ve Swingu se nevyznám, ale třeba JDBC je
 ukázkový příklad), ale ukázalo se, že je s tím víc problémů než užitku
 (deadlocky v JDBC driverech).

 Možná, že ve Swingu to lze nějak bezpečně zařídit, ale obecně je spoléhání
 se na finalizéry při uvolňování zdrojů Špatné (TM).

 LT

 2010/1/26 Ondra Medek xmed...@gmail.com

 K cemu je potom GC a cely ten tezkotonazni aparat?

 Pro reseni uklidu toho Window IMHO staci WeakReference a propadne
 finalize() a je to.

 2010/1/26 Ladislav Thon ladi...@gmail.com:
  Tak objekt v pameti furt visi. To nepovazuji za stastne reseni. Priste
  abych u kazde tridy louskal manual, jestli nahodou nema specialni
  metodu, kterou musim volat, nez objekt prestanu pouzivat.
 
  To ovšem musíte stejně. Na finalizér se nemůžete spoléhat, nikdo vám
  nezaručí, že vůbec někdy bude zavolán. Uklízet po sobě je slušnost nejen
  doma v obejváku :-)
 
  LT
 



 --
 Ondra Medek




Re: Problémy se sítí

2009-12-30 Tema obsahu Kamil Podlesak
Problém bude asi v IPv6, mělo by stačit vypnout.

Kamil Podlešák


2009/12/30 Petr Prikryl peter.prik...@gmail.com

  Imho jsi povolil vse, ale byt tebou, tak se podivam proc to vlastne
 nefunguje- nefnguje DNS preklad, 
 Ja mel problemy s CORBA (moje chyba) ze fungovala napul kvuli spatne
 definici hostname notebooku (hostname neslo prelozit, popr referovalo uplne
 nekde jinde (v kodu jsem pouzival getHostname()) tedy spatna konfigurace
 PC...
 PP



 On 12/30/2009 11:41 AM, Vladimir Naprstek wrote:

 Zdravím,
 mám takový kouzelný problém. Po přechodu na javu 6 (debian linux,
 java-6-sun 1.6.0.16) mi přestaly fungovat všechny síťové operace. Jakákoliv
 aplikace mi hlásí, že sít je nedostupná (jiné aplikace problémy nemají).
 Zkoušel jsem nastavovat proxy ale nepomohlo to. Tak jsem dospěl až k tomu,
 že problém bude v oprávnění. Dokonce jsem dospěl k tomu, že v java.policy
 jsem nastavil:
 grant {permission java.security.AllPermission;};

 ale nic.

 Poradíte mi, prosím , jak securityManager úplně vypnout nebo síť povolit?

 s pozdravem
 *Vladimír Náprstek*
 e-mail: vladimir.naprs...@rwe.cz


 --
 Petr Prikryl
 ---petrprik...@centrum.czprikryl@admin24.czwww.admin24.cz




Re: Problémy se sítí

2009-12-30 Tema obsahu Kamil Podlesak
Já mluvím o tomto:
http://www.mail-archive.com/debian-qa-packa...@lists.debian.org/msg30468.html
samozřejmě, může se jednat o jiný problém

Kamil Podlešák


2009/12/30 Vladimir Naprstek vladimir.naprs...@rwe.cz

  Prave ze nemohu prijit na to, proc mi veskere java aplikace nechteji
 fungovat se siti. Jakakoliv jina aplikace (posta, prohlizec, wget, ...)
 funguji normalne. Pokud si na pozadi spustim tcpdump, tak k sitove aktivite
 ani nedojde. A drive vse fungovalo a nejsem si vedom, ze bych neco menil.
 Protoze ne-java aplikace funguji, myslim, ze problem je v jave. Ale nemohu
 prijit na to, kde. Z zadne aplikace se mi zatim nepovedlo ziskat pouzitelne
 informace.



 s pozdravem
 *Vladimír Náprstek*
 e-mail: vladimir.naprs...@rwe.cz

   Petr Prikryl píše v St 30. 12. 2009 v 11:52 +0100:

  Imho jsi povolil vse, ale byt tebou, tak se podivam proc to vlastne
 nefunguje- nefnguje DNS preklad, 
 Ja mel problemy s CORBA (moje chyba) ze fungovala napul kvuli spatne
 definici hostname notebooku (hostname neslo prelozit, popr referovalo uplne
 nekde jinde (v kodu jsem pouzival getHostname()) tedy spatna konfigurace
 PC...
 PP


 On 12/30/2009 11:41 AM, Vladimir Naprstek wrote:

 Zdravím,
 mám takový kouzelný problém. Po přechodu na javu 6 (debian linux,
 java-6-sun 1.6.0.16) mi přestaly fungovat všechny síťové operace. Jakákoliv
 aplikace mi hlásí, že sít je nedostupná (jiné aplikace problémy nemají).
 Zkoušel jsem nastavovat proxy ale nepomohlo to. Tak jsem dospěl až k tomu,
 že problém bude v oprávnění. Dokonce jsem dospěl k tomu, že v java.policy
 jsem nastavil:
 grant {permission java.security.AllPermission;};

 ale nic.

 Poradíte mi, prosím , jak securityManager úplně vypnout nebo síť povolit?

 s pozdravem
 *Vladimír Náprstek*
 e-mail: vladimir.naprs...@rwe.cz



 --
 Petr Prikryl
 ---petrprik...@centrum.czprikryl@admin24.czwww.admin24.cz




Re: JavaMail - posielanie mailov v cestine

2009-11-30 Tema obsahu Kamil Podlesak
setText nastavuje i hlavicku, takze setHeader je potom zbytecne.
Dale pouziti file.encoding je chyba, protoze javovske identifikatory
obecne nejsou shodne s temi standardnimi, takze emal clienti nemusi
Cp1250 rozpoznat (pokud vubec takove obskurni nestandardni kodovani
zna). Nastesti mame unicode, takze neni nutne si s tim nejak zvlast
lamat hlavu.

Asi takto:

MimeBodyPart text_part = new MimeBodyPart();
text_part.setText(message_text, UTF-8);
text_part.setHeader(Content-Transfer-Encoding, quoted-printable);


Kamil Podlesak

2009/11/30 Dusan Zatkovsky msk.c...@gmail.com:
 Ahoj.

 Zapasim so $SUBJ a zacinam byt znacne strateny.

 Potrebujem poslat email pomocou java mail z windows, ktory ma v sebe cesky
 text a attachment. Uz sa s tym lamem 2 hodiny a nemozem tomu prist na klb.

 Kod:

 MimeBodyPart text_part = new MimeBodyPart();
 text_part.setText(message_text);
 text_part.setHeader(Content-Type, text/plain; charset=\ +
 System.getProperty(file.encoding) + \);
 text_part.setHeader(Content-Transfer-Encoding, quoted-printable);

 Nasledne to posielam ako multipart s attachmentom.
 Vysledkom je, ze thunderbird to zobrazi ok, cokolvek ine (outlook) zle.

 Uryvok na disk ulozeneho multipart:

 Return-Path: f...@test.cz
 Delivered-To: t...@test.cz
 Received: (qmail 5290 invoked by uid 89); 30 Nov 2009 11:49:43 -
 Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys
 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws;
  s=private; d=test.cz;
  b=YCY6ijt89eDlbCYX5hlSsXNTtBiPYnBECNPYxwcWN8Lv/+SvW7MAsx6YmGH0H406;
 Received: from unknown (HELO xpprim) (dusan.zatkov...@test.cz@93.185.97.186)
  by server1.test.cz with ESMTPA; 30 Nov 2009 11:49:43 -
 Date: Mon, 30 Nov 2009 12:49:43 +0100 (CET)
 From: f...@test.cz
 To: t...@test.cz
 Message-ID: 28848200.5.1259581783779.javamail.ad...@xpprim
 Subject: =?Cp1250?Q?Zpr=E1v=E1_z_datov=E9_schr=E1nky_do_vlastn=EDch_ru?=
  =?Cp1250?Q?kou_od_test,_s.r.o.,78501_=8Aternberk,_CZ?=
 MIME-Version: 1.0
 Content-Type: multipart/mixed; boundary==_Part_3_8979901.1259581783639

 --=_Part_3_8979901.1259581783639
 Content-Type: text/plain; charset=Cp1250
 Content-Transfer-Encoding: quoted-printable

 Dne 09.10.2009 11:56:05 V=E1m byla doru=E8ena nov=E1 datov=E1 zpr=E1va s ID=
  101737.
 -- CUT --
 --=_Part_3_8979901.1259581783639
 Content-Type: application/octet-stream; name=message.zfo
 Content-Transfer-Encoding: base64
 Content-Disposition: attachment; filename=message.zfo

 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCAJIAEggPoPHE6
 TWVzc2FnZURvd25sb2FkUmVzcG9uc2UgeG1sbnM6cT0iaHR0cDovL2lzZHMuY3plY2hwb2ludC5j
 -- CUT --


 Subject je dobre ( cesky ), telo uz nie. Skusal som rozne kombinacie charset a
 transfer encoding, vzdy to bolo zle.

 Bol by niekto taky dobry a pastol mi sem example s fungujucou cestinou?
 Copy-pastol som asi 3 example z webu a ani jeden nezafungoval.

 Diky.


 --
 Dusan


 ... tykajte mi



Re: JavaMail - posielanie mailov v cestine

2009-11-30 Tema obsahu Kamil Podlesak
Subject je neco _uplne_ jineho. Tam je nutne pouzit
  MimeUtility.encodeText( subject, UTF-8, Q )

2009/11/30 Dusan Zatkovsky msk.c...@gmail.com:
 Ahoj.

 Asi takto:

 MimeBodyPart text_part = new MimeBodyPart();
 text_part.setText(message_text, UTF-8);
 text_part.setHeader(Content-Transfer-Encoding, quoted-printable);


 No a presne takto mi to nefunguje. Teraz si nie som 100% isty, ci v tomto
 pripade je zle len subject, alebo aj body.

 --
 Dusan


 ... tykajte mi



Re: OffTopic: SVN dotaz

2009-11-11 Tema obsahu Kamil Podlesak
Zdravím,

To mergeinfo obsahuje právě informaci o tom, že došlo k merge. Při
zpětném merge do trunku s tím pracuje a tyto změny (které již v trunku
samozřejmě jsou) ignoruje.
Samozřejmě by stačilo aby ten mergeinfo byl nastaven jen na jediném
místě (kořenovém adresáři). Že to cpe všude možně a pak vznikají
obludně vypadající logy, to je jen jeden z problémů které celý tento
nepříliš podařený experiment má.

Kamil Podlešák

2009/11/11 Lukáš Marek lukas.ma...@cleverlance.com:
 Ahoj,

 mám dotaz k větvení a mergeování v SVN. Mám projekt Projekt/trunk, vytvořím 
 si větev pomocí svn copy, například Projekt/branches/krtek. Switchnu se a 
 normálně pracuju. A teď - Book of SVN doporučuje sem tam provést merge s 
 hlavní větví (promítnout změny z hlavní větve) pomocí
 [code]
 svn merge svn://svn.krtek.cz/Projekt/trunk
 [/code]

 Merge proběhne úspěšně, na výstupu jsou pouze soubory, které se měnily - ať 
 už v mojí nebo v hlavní větvi. Následující svn status, ale ukáže M u velkého 
 množství souborů, které se neměnily ani v mojí, ani v hlavní větvi. Pokud 
 zkusím svn diff, dozvím se, že se soubory liší v mergeinfo:
 [code]
 Property changes on: module_xx/src/main/database
 ___
 Modified: svn:mergeinfo
   Merged /Projekt/trunk/module_xx/src/main/database:r8268-8308

 [/code]
 Takže potom commituju místo pár změn desítky souborů - tím pádem se dost 
 bojím vrátit tu větev do trunku pomocí svn merge --reintegrate (opět Book of 
 SVN).

 A teď dotaz - je to normální? Stává se vám to taky?

 Díkes,
 L.



Re: jaxb - default vytvaranie instancii complexType

2009-11-11 Tema obsahu Kamil Podlesak
A co by měly obsahovat za kód?
Vytváření přes new je samozřejmě správně.

Co se týká defaultní hodnoty, myslím že to nejde.

Kamil Podlešák

2009/11/11 Dusan Zatkovsky msk.c...@gmail.com:
 Resp. opytam sa inak:

 Vytvaram spravne instanciu Config() pomocou operatora new?

 Pohladom do kodu vidim, ze vygenerovane classy neobsahuju ziaden kod, len
 deklaracie a kopu @XmlElement, takze imho by som mal pouzit jaxb, ale neviem
 ako.

 Ahoj.

 Zapasim s jaxb. Mam nasledovne xsd:

   xsd:element name=config
         xsd:complexType
             xsd:sequence
                 xsd:element name=tst type=tns:test_ct nillable=true
 / /xsd:sequence
         /xsd:complexType
     /xsd:element

     xsd:complexType name=test_ct
         xsd:sequence
             xsd:element name=a type=xsd:string nillable=true/
         /xsd:sequence
     /xsd:complexType


 ... z ktoreho vznika class-a Config.

 Problem je, ze v nasledovnom kode:

 Config c = new Config();
 c.getTst().setA(a);

 dostavam null exception, pretoze getTst() vrati null.

 Da sa nejak jaxb donutit, aby defaultne vytvoril instanciu typu test_ct?

 Dik



 --
 Dusan


 ... tykajte mi



Re: spatna cestina pres get, dobra pres post

2006-08-04 Tema obsahu Kamil Podlesak

Burdik Petr wrote:


Ahojte,
asi pitomy dotaz, ale opravdu nevidim chybku.
 


Chybkou je uz samotne pouzivani GET pro ne-ascii znaky.
Existuji obezlicky jak si specifikovat kodovani pro URL, ale pak prijde 
nekdo s jinym browserem a je to zase blbe.


Ono totiz neni nijak presne specifikovano, v jakem kodovani se maji 
posilat. Doporucuje se pouzivat utf8 (mozna se to jiz dostalo do 
nejakeho standardu, tolik to nesleduji), ale browsery si to delaji 
ruzne: nektere pouzivaji utf8, nektere pouzivaji kodovani te stranky, 
starsi (ale stale pouzivana) verze nejmenovaneho browseru pouziva VZDY 
latin1.


Resil jsem tento problem pri implementaci WebDAV a zjistil jsem ze 
jedina moznost je natvrdo vsechna jmena konvertovat do ASCII.



Mam klasicky filtr ve webserveru ktery volam na libovolny pozadavek a
menim kodovani na UTF8. databaze v UTF8, vsechny formulare UTF8. Co vic
si prat, ze?

No ale divne je ze doted jsem vsechno posilal pres post a bylo to ok.
kdyz ot poslu pres get, prestane to fungovat. Pro jistotu posilam filtr
a konfiguraci. Servlet ktery je akci volan dostane zpravidla vysledky
spatne pres get, dobre pres post. tedy pres get jako iso8859-1, pres
post jako utf8.
 


Reseni: nepouzivat GET, vzdy pouze POST.
Jedine me napada ze by na submitu byl javascript, ktery by provedl 
zakodovani presne definovanym zpusobem. Ale to je docela hnus.


--
Kamil Podlesak [EMAIL PROTECTED]




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 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: 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 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: security reflection

2006-07-21 Tema obsahu Kamil Podlesak

Kamzik-II wrote:

No tak mel bych jeste jeden dotaz co se tyce bezpecnosti, ted to 
trosku souvisi s reflection api. Jde mi o to, jestli musi normalni 
aplikace mit nejaka specialni prava, aby mohla provadet unsafe operace 
s promennymi objektu.


Pri normalnim pouzivani reflection se kontroluje zapouzdreni (private, 
protected) beznym zpusobem. Tuto kontrolu lze vypnout metodou 
setAccessible(true) (ve tride AccessibleObject, od ktere dedni Method, 
Constructor i Field). Tato metoda kontroluje permission 
java.lang.reflect.ReflectPermission(suppressAccessChecks).


Jako normalne mi to na desktopu funguje, v klidu menim jakekoliv 
pormenne, vcetne private, ale zajima me, jestli to bude fungovat vzdy, 
a pripadne kdy to fungovat nebude...


JRE knihovna pouziva pro interni kontrolu prav 
System.getSecurityManager(). To je predevsim z duvodu zpetne 
kompatability, ale take to umoznuje vsechny tyto kontroly vypnout. 
Defaultne spustena aplikace totiz zadny security manager nema a vsechny 
tyto kontroly se preskakuji (viz napr. zdrojovy kod 
AccessibleObject.setAccessible()). To je logicke, sandbox je na desktopu 
(a vetsinou i na serveru) zbytecny, spoleha se na operacni system.


--
Kamil Podlesak [EMAIL PROTECTED]



Re: security

2006-07-20 Tema obsahu Kamil Podlesak

Roman Pichlik wrote:


Takze bez nejakeho frameworku treti strany to nejde?


Ale samozrejme, Acegi je zde naprosto zbytecny moloch. Jedina vyhoda 
jeho pouziti je, ze lze pomoci Spring AOP zadratovat kotrolu 
deklarativne, bez zmeny kodu.



a to se vam zda malo?!


Neni, Spring je uzitecna vec. Ale davat ho do aplikace jen tomuto?
Zalezi na tom, kolik tech kontrol bude. Pokud jedna ci dve, tak je 
zbytecne kvuli tomu tam davat cely Spring, ne? A pouzit Acegi bez 
Springu mi prijde jako nesmysl.


Me se naopak zda jako naprosty moloch pouziti napriklad JAASu, ale  
evidentne je to vec nazoru...


JAAS je samozrejme jeste horsi a hlavne resi neco trochu jineho: 
autentikaci a autorizaci uzivatelu. Zatimco puvodni tazatek chtel (pokud 
to dobre chapu) resit prava aplikace, tedy sandbox.


Doporucuji precist si neco o bezpecnostnim/sandbox modelu v Jave - tedy 
to co drive (Java 1) byval SecurityManager (udrzovan jen jako wrapper 
pro ucely kompatability) a pozdeji (Java 2, to uz je dost dlouho) 
nahrazeno AccessController/Permission.


Napriklad: http://www.securingjava.com/chapter-three/chapter-three-7.html
Nebo primo dokumentace k JDK, pripadne dalsi dokumenty na strankach SUNu.

--
Kamil Podlesak [EMAIL PROTECTED]



Re: security

2006-07-20 Tema obsahu Kamil Podlesak

Kamzik-II wrote:


Takze by pak vlastne stacilo napsat public interface,
package private tridu s implementaci a pak jenom napsat verejnej 
decorator, kterej by filtroval ty prava?


Mozna by to chtelo se poradne rozepsat, podle ceho vlastne chcete ta 
prava posuzovat a jaka to budou. Mozna ze jsem se svymi radami zcela 
mimo misu...


--
Kamil Podlesak [EMAIL PROTECTED]




Re: security

2006-07-20 Tema obsahu Kamil Podlesak

Kamzik-II wrote:


No melo by to byt vazane na prihlaseneho uzivatele,
ja sem prave mel vizi, ze by to mohlo byt realizovane prave pomoci 
security manageru, a pomoci jaas by se danej uzivatel jenom 
autorizoval. Jestli jsem autorizaci pochopil spravne, tak proste jenom 
prida prava pouzite aplikaci, ne? Takze by to takhle melo jit...


Aha, tak to jste to pochopil spatne, prava aplikace jsou neco uplne jineho.

Acegi je asi nejlepsi rada, pouziti samotneho JAAS je velmi neprakticke 
(hodne prace s psanim kodu okolo, konfigurace se ani neda korektne 
ohodnotit bez vulgarnich vyrazu).



--
Kamil Podlesak [EMAIL PROTECTED]



Re: security

2006-07-20 Tema obsahu Kamil Podlesak

Kamzik-II wrote:

Kdyz uz jsme u toho sandboxu, tak ten je mi celkem jasnej, ale 
zajimalo by me jak se resi to, aby se aplikace dala spustit jenom v 
omezenem modu, to by se resilo pres zavislost na securitymanageru?


Prava prirazena kodu se konfiguruji v JRE podle umisteni (umisteni 
JARu/adresare) nebo podle certifikatu kterym je JAR podepsan. Prava jsou 
prirazena kodu, nikoliv aplikaci (v ramci aplikace muze mit kod ruzna 
prava). Konfigurace je v JRE, systemovy uzivatel ale muze mit vlastni.


Vice viz odkazy, ktere jsem daval (neni toho malo a navic je to 
evidentne neco jineho nez potrebujete).



Napriklad: 
http://www.securingjava.com/chapter-three/chapter-three-7.html
Nebo primo dokumentace k JDK, pripadne dalsi dokumenty na strankach 
SUNu.





--
Kamil Podlesak [EMAIL PROTECTED]




Re: security

2006-07-20 Tema obsahu Kamil Podlesak

Kamzik-II wrote:


Prava jsou prirazena kodu.


Tomu mam rozumet jakoze pokud bych mel v aplikace trusted knihovnu, 
tak bych pres ni

mohl delat bordel i kdyz muj kod neni trusted?


S tim se samozrejme pocita (koneckoncu, standardni knihovna je zcela 
trusted). Efektivni prava v koamziku kontroly jsou prunikem prav vseho 
kodu na zasobniku. Takze to pak vypada zasobnik napriklad takto:


 UntrustableApp.main():  omezena prava, nema pravo BordelPermission
 TrustableLibrary.doBordel() : plna prava, tedy vcerne BordelPermission
 AccessController.checkPermission(new BordelPermission())   : zjisti 
prunik, pravo nema, vyjimka


Pokud trusted kod potrebuje provest neco na co volajici nemusi mit prava 
a je si jisty ze je to OK (napriklad precist konfigurak, ktery je jinak 
duverny a apletum skryty), muze pouzit AccessController.doPrivileged() 
metody.



--
Kamil Podlesak [EMAIL PROTECTED]



Re: security

2006-07-20 Tema obsahu Kamil Podlesak

Kamzik-II wrote:

Aha, takze normalne to nejde, ale pokud by ta knihovna mela nejakej 
zajem poskytnout to i netrusted aplikaci, tak proste bude soucasti 
implementace volani doTrusted? Pochopil jsem to spravne?



A vse probehne zcela v poradku a bez vyjimky,
kdezto pokud by tam nebylo AccessController.doPrivileged(), taky by 
nastala vyjimka, je to tak? :)


Ano. Tomu doPrivileged se jako parametr preda objekt s tim kodem (neco 
jako Runnable) a JVM na nem zavola metodu run() s takovymi pravy, jaka 
ma primy volajici (TrustedClass).


--
Kamil Podlesak [EMAIL PROTECTED]
inSITE, s.r.o.




Re: Spring+Hibernate - obsluha vyjimek databaze

2006-06-06 Tema obsahu Kamil Podlesak

Petr Gola wrote:


Mockrat dekuji.

Mam jeste jeden dotaz. Pokud obsahuje zaznam vice unique polozek -
jsem schopen z vyjimky nejak zjistit, ktera constraint je duvodem?
Pripadne jak?


Ne. Každá databáze tento problém oznamuje jinak, některé dokonce vůbec v 
chybové hlášce neuvádí o jaký sloupec se jedná.




Jak bych se mohl dostat k temto udajum programove? Abych primo v
metode userDAO.saveUser(User usr) mohl zjistit, co bylo pricinou chyby
(v tomto pripade poruseni kotvy catalog_users_username_key) a na
zaklade toho pokracovat?


Lepší bude předem si zjistit, zda uživatel existuje nebo ne.

--
Kamil Podlesak [EMAIL PROTECTED]




Re: Spring+Hibernate - obsluha vyjimek databaze

2006-06-05 Tema obsahu Kamil Podlesak

Petr Gola wrote:


Bohuzel, stale se nemohu dobrat k vysledku.



Pricina je ta, ze Hibernate neprovede operaci v databazi ihned, ale az 
pri ukonceni transakce (to je defaultni chovani), kdy se pokusi provest 
vsechny zmeny najednou. V tomto pripade je pouzito Spring AOP, kdy se 
commit provede pri ukonceni metody (viz ten stack trace) - a v tom 
okamziku se vygeneruje vyjimka. Takze try-catch block uvnitr samozrejme 
nic nechyti.


Resenim je provest flush explicitne:
getHibernateTemplate().flush()

Take se da Hibernate nakonfigurovat aby flushoval vzdy, ale to ma smysl 
jen pokud takovych situaci bude vice (a pak by mozna nebylo od veci 
zamysleni, proc je business logika v databazi pod ORM).



implementace DAO:

public class UserHibernateDAO extends HibernateDaoSupport implements 
IUserDAO {

 public User saveUser(User usr) {
   getHibernateTemplate().saveOrUpdate(usr);
   return usr;
 }
 ...
}

SLUZBA:

public class UserSpringService implements IUserService {
 private IUserDAO userDAO;

 public User saveUser(User usr) {
   try {
 usr = userDAO.saveUser(usr);
   } catch (DataAccessException daex) {
 System.out.println(daex:+daex);
 throw new ExistingUsernameException(Existing username!);
   }
   return usr;
 }
 ...
}

No, bohuzel nevim, kde je problem, ale zadna ExistingUsernameException
vyhozena neni, Tomcat vypise:

(def.AbstractFlushingEventListener   300 ) Could not synchronize
database state with session
org.hibernate.exception.ConstraintViolationException: Could not
execute JDBC batch update
at 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71) 

at 
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) 

at 
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)

at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at 
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions

at org.hibernate.event.def.DefaultFlushEventListener.onFlush
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at 
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 

at 
org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit

at org.springframework.transaction.support.AbstractPlatform...
at 
org.springframework.transaction.support.AbstractPlatformTransactionManager.commit 

at 
org.springframework.transaction.interceptor.TransactionAspectSupport.doCommit... 

at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke
at $Proxy1.saveUser(Unknown Source)

Ale pokud zavolam z klienta volam
try { userService.saveUser(usr) } catch(DataAccessException daex) ... 
dostanu


daex:org.springframework.dao.DataIntegrityViolationException:
Hibernate operation: Could not execute JDBC batch update; SQL [insert
into ...

Ale chtel bych tuto vyjimku osterit uz na strane serveru.




--
Kamil Podlesak [EMAIL PROTECTED]



Re: LDAP JNDI userPassword

2005-11-29 Tema obsahu Kamil Podlesak

Burdik Petr wrote:


Pekny den,
tosicku se trapim s uzivatelskymi hesly.

pouzivam nasledujici fragment kodu:
String cn = at.get(cn).get(0).toString();
String sn = at.get(sn).get(0).toString();
String passwd = at.get(userPassword).get().toString();

Problem je pouze u pole userPassword. Misto hesla ktere jsem si tam 
dal prozatim v plaintextu jsem dostal

[EMAIL PROTECTED]

Mate nekdo napad kde je problem?


Jiste: to heslo tam preci neni ulozeno jako prosta textova hodnota (a to 
ani v pripade ze neni zakodovano). Doporucuji se podivat nejakym 
klientem (gq), co tam doopravdy je a hlavne: nepouzivat jen tak naslepo 
toString().



Pet





Re: Interpreter matematickych vyrazu

2005-11-21 Tema obsahu Kamil Podlesak

Tomas Hubalek wrote:

Muj puvodni dotaz byl, na neco rychleho. Groovy jsme zkousel (a 
interpreter jsem inicializoval jako private static final), ale je to 
brutalne pomale. Predkompilace neni mozna :-(


Groovy se normalne kompiluje do .class, takze prekompilace je nejen 
mozna ale i nutna. Jina vec je, ze pokud je vyraz pokaždé novy, tak 
dochazi ke kompilaci a to prilis rychle neni.



--
Kamil podlesh Podlesak


Re: Java - kódování češtiny v názve ch souborů a adresářů

2005-11-21 Tema obsahu Kamil Podlesak

Ing. Radek Žuja wrote:


Dobrý den.
Mám následující problém.
Potřebuji otevřít v JAVA aplikaci soubor jehož cesta je uložena v 
databázi a je tam uložena v codepage 1250. Bohužel jsou v ní i háčky a 
čárky.

Na serveru, kde běží tako aplikace na default code page English.
Při zavolání kódu
File _f = new File(cesta);
mi to padne na FileNotFoundExecption.
Pokud na serveru nastavím defaultCodePage na czech pak jede vše bez 
problému. Nicméně takhle to nastavit nemůžu.


Proc ne?


Můžete mi někdo prosím poradit co s tím


Nastavit spravne locale (codepage) pro spoustenou aplikaci java.exe 
(tedy neco jako  LC_ALL=cs_CZ java classname, to funguje dobre). Jak 
to udelat pod Windows netusim, chtelo by to nejakeho Windows guru.



Radek Žuja





Re: Java - kódování češtiny v názve ch souborů a adresářů

2005-11-21 Tema obsahu Kamil Podlesak

Rastislav Siekel wrote:


A nestačilo by:
java.exe -Dfile.encoding=windows-1250 aplikacia

kedysi som používal tieto properties, aby mi išla aplikácia bez ohľadu na OS 
locale:
- file.encoding=windows-1250
- user.country=SK
- user.language=sk
 


Ano, pokud to bude fungovat.
Já jsem to v minulosti několikrát zkoušel a nefungovalo to (linux JDK), 
evidentně se nejdřív nastaví interní kódování a podle něj pak property, 
nikoliv naopak :-( Může se to však lišit podle verze a platformy JDK.


--
Kamil podlesh Podlešák