Re: Vice socket klientu ve webové aplikaci (Spring)
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
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?
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?
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
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
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?!
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?!
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?!
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
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
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
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í?
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í?
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'
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'
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'
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
Š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
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
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
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?
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?
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?
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?
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
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
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
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
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
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
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
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
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
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
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
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()?
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()?
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
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
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í
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í
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
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
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
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
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
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
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)
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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ářů
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ářů
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