Re: Casove razitko s Postsignum
Dne 3.5.2012 15:24, Dusan Zatkovsky napsal(a): Security.addProvider(new BouncyCastleProvider()); // tu mam certifikaty postsignum k overeniu ssl cert path System.setProperty(javax.net.ssl.trustStore, caJksFile); System.setProperty(javax.net.ssl.trustStorePassword, caJksPasswd); Možná to bude tím, že se SecurityProvider inicializuje ještě před tím, než jsou nastaveny ty systémové properties k trust store. Zkuste prohodit pořadí. Když to nepomůže, zkuste nastavit -Djavax.net.debug=all tak jak radí na http://docs.oracle.com/javase/1.5.0/docs/guide/security/jsse/ReadDebug.html a třeba se něco objeví. Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: tomcat a linky
A nebo místo Springu použít Stripes, ty mají anotaci @UrlBinding a použít @UrlBinding(/recenzie) public class Home implements ActionBean { Makub Dne 3.4.2012 11:12, Oto Buchta napsal(a): A nebo to resit jak to resi spousta lidi - predradit Apache pred Tomcat. A mod_rewrite. Dne 3. dubna 2012 0:16 Petr Frantapetr.fra...@gmail.com napsal(a): 1. Můžeš si vytvořit adresář (pokud ho nemáš) recenzie a do něj nakopírovat stejný soubor index.jsp. 2. Použít nějaký redirect filter, například http://code.google.com/p/urlrewritefilter/ Petr 2012/4/2 Ivan Polakivan.po...@f4s.sk vo web.xml mam: welcome-file-list welcome-fileindex.jsp/welcome-file /welcome-file-list a tento subor je OK, ked zadam: http://localhost:8080/moja_aplikacia natiahne sa index.jsp, obsahuje uvodnu stranku. a na nej mam odkaz na http://localhost:8080/moja_aplikacia/recenzie ako mam nadefinovat tomcat aby to bol alias na http://localhost:8080/moja_aplikacia/recenzie/home.action Ivan On 2 April 2012 23:09, Petr Frantapetr.fra...@gmail.com wrote: Doplň si do souboru web.xml: welcome-file-list welcome-fileindex.jsp/welcome-file /welcome-file-list V rootu aplikace si vytvoř soubor index.jsp, který bude obsahovat následující řádky pro redirect: %@ page contentType=text/html;charset=utf-8 pageEncoding=utf-8% %@ taglib uri=http://java.sun.com/jsp/jstl/core; prefix=c % c:redirect url=home.action/ Petr 2012/4/2 Ivan Polakivan.po...@f4s.sk zdravim konferenciu, mam takuto otazku na konfiguraciu tomcat-u 6.x. mam aplikaciu a ked zadam linku http://localhost:8080/moja_aplikacia/recenzie ako mam nadefinovat tomcat aby to bol alias na http://localhost:8080/moja_aplikacia/recenzie/home.action este dodam, ze vo web.xml mam nasledovne: servlet servlet-nametest_servlet/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class init-param param-namecontextConfigLocation/param-name param-value /WEB-INF/test-servlet.xml /param-value /init-param load-on-startup1/load-on-startup /servlet servlet-mapping servlet-nametest_servlet/servlet-name url-pattern*.action/url-pattern /servlet-mapping teda vsetky poziadavky *.action idu na DispatcherServlet. dakujem Ivan -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Reference na Class s Generic - CacheString,String.class
Zdravím, to je typický problém s generiky v Javě, ta jsou implementována pomocí erasure, takže typ CacheString,String za běhu neexistuje, existuje jenom soubore Cache.class pro raw typy. Ale dá se to obejít, takhle: static interface CacheSS extends CacheString,String { } public static void main(String[] args) { CacheString, String cache = ComponentFactory.getComponent(CacheSS.class, TEST_CACHE); } Trik je v tom, že interface CacheSS není generická, ale parametrizovaná třída, takže má svůj soubor CacheSS.class s bytekódem. Makub Dne 19.9.2011 13:20, Petr Novak napsal(a): Zdravím konferenci, narazil jsem na problém s generic a nevím, jestli je problém jen v mé hlavě, nebo v javě a google mi zatím moc nepomohl, protože ani nevím jak se řádně zeptat. Problém je s následujícím kouskem kódu: ClassCacheString,String cls = Cache.class; // nelze zkompilovat, eclipse mi nabízí, abych ClassCacheString,String převedl jen na ClassCache, ale to pak má warning, že používám RAW typy, což ani nechci :). Myslel jsem, že půjde zapsat ClassCacheString,String cls = CacheString,String.class; //ale toto nelze kompilovat už vůbec, řve to, že Cache není definována a že ty závorky tam nemají být a kdo ví co ještě. Definice rozhraní cache je jednoduchá: public interface CacheK, V{} Původní problém je trochu jiný, ale důsledek stejný, ve skutečnosti potřebuji: CacheString, String cache = ComponentFactory.getComponent(Cache.class, CACHE_NAME); //toto ale opět hází warning definice té metody je: public static T T getComponent(final ClassT compClass, final String compName); čekal jsem možnost použití CacheString, String cache = UESComponentFactory.getComponent(CacheString,String.class, TEST_CACHE); //ale jak plyne z výše uvedeného, toto nelze kompilovat Jediné řešení, které funguje compilačně a bez warningu je: @SuppressWarnings(unchecked) CacheString, String cache = UESComponentFactory.getComponent(Cache.class, TEST_CACHE); ale to se mi nelíbí. Nemáte někdo nějaký nápad, jak v javě zapsat správně CacheString,String.class ? Klidně to můžete zkusit pro MapString,String dopadne to stejně. Díky za veškeré podněty Petr -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Generátor PDFek
Dne 1.9.2011 11:04, Oto Buchta napsal(a): Zdravím. Potřeboval bych do webové aplikace napsat generátor PDFek. Díval jsem se na iText a ten mi přijde jako ideální varianta pro tisk faktur a evidenčích karet. Máte s ním nějaké zkušenosti? Nebo používáte něco jiného, kde lze snadno nadefinovat různé tabulky bez nutností hrát si se swingem nebo dokonce s Java2D? Ahoj, úspěšně používám pdflatex, stačí ho spustit jako externí proces a pak prohlížeč přesměrovat na vygenerovaný soubor. Asi to není správně enterprise komplikované řešení, ale funguje :-) Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: OT: hardware
Dne 12.8.2011 12:04, Tomáš Záluský napsal(a): Dobrý den, stojím před upgradem domácího počítače po 11 letech a nový počítač bych chtěl sestavit i s ohledem na možnou občasnou práci doma. Prací rozumím programování v Javě (především server-side aplikace nad relační databází a swingové GUI). Rád bych se zeptal na Vaše zkušenosti s výběrem komponent. Chápu, že můj dotaz se netýká jazyka Java, ale zajímají mne zkušenosti lidí, kteří Javu používají. Na webu je spousta recenzí z hlediska hraní her nebo stříhání videa, ale programátorských pohledů (např. vytížení jader u vícevláknových programů) jsem moc nenašel. Moje sestava je prozatím zvolena takto: http://www.czechcomputer.cz/view_user_list.jsp?id=K1105022142589174894220450091751 procesor: AMD Phenom II X6 1100T Black Edition motherboard: GIGABYTE GA-890GPA-UD3H - AMD 890GX s integrovanou grafikou paměť: Kingston HyperX 8GB (2x4GB) DDR3 1333 (KHX1333C7AD3K2/8G) systémový disk: SSD - OCZ Vertex 3 - 120GB druhý disk: Samsung SpinPoint F3 - 1TB skříň: CoolerMaster Elite 370 chladič: GELID Solution Tranquillo - revize 2 zdroj: Seasonic SS-500ET-F3 500W, OEM DVD: Samsung SH-S223C, černá, Bulk operační systém: Microsoft Windows 7 Home Premium CZ 64bit OEM cena: cca 21000, nechci přelézt 25000. Trvám jen na tom, aby to byl počítač (ne notebook) a OS Windows. Jinak preferuji AMD, Gigabyte a Kingston, ale nebráním se ani jiným značkám. Rovnou bych měl napsat, že na AMD Bulldozery nemohu čekat, potřebuji to ještě do konce prázdnin. Pokud znáte nějaký odkaz na recenze z pohledu programátora anebo napíšete, že je jedno, co si vyberu, anebo se podělíte o své zkušenosti s udržováním obrazu o světě hardwaru, budu to taky považovat za užitečnou odpověď. Myslím, že po 11 letech bude každý počítač připadat rychlý jako blesk :-) Řešil jsem koncem minulého roku stejný problém. Sestavu jsem koupil podobnou, jenom místo AMD s Intelem, za 27 tisíc. Zpětně bych řekl, že hlavní příspěvek k rychlosti byl SSD disk, mám OCZ Vertex 2, a přijde mi ďábelský rychlý. Jednak má přenosovou rychlost někde kolem 170MB/s, a hlavně, protože nevystavuje mechanické hlavičky, velice rychle čte mnoho souborů rozházených po disku, takže start Windows a updaty v Linuxu jsou téměř mžikové. Od doby, co ho mám, mi mechanické disky připadají nesnesitelně pomalé :-) Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: smerovanie javy 7,8
Dne 14.7.2011 11:08, Robert Novotny napsal(a): Ruinujuce a JAVA JE MRTVA hlasky nie su na mieste, isteze dalsie jazyky (Groovy, Scala) mozno ju nahradia z hladiska syntaxe, ale dolezite je, ze stare kniznice sa nestratia, Řekl bych, že diskuse o to, jestli je lepší Java nebo Ruby/Python/Groovy/Scala/atd. jsou trochu mimo mísu. Spíš jsou různé jazyky vhodné pro různé účely. Přirovnal bych to třeba k vozidlům. Nemá smysl se hádat, jestli je lepší závodní auto, osobní auto nebo traktor. Závodní auto je nejlepší v rychlosti, ale náklad v něm neodvezete, traktor odtáhne těžký náklad, ale je pomalý, a osobní auto je něco mezi tím, ani velmi rychlé, ani velmi silné, ale vyvážené pro běžnou osobu, proto se tak jmenuje. Můj dojem je, že skriptovací jazyky s dynamickým typováním jsou vhodné pro rychlé napsání programu, ale mají mizernou udržovatelnost (write once, read never). A Java naopak. Takže pro Jirku Hradila, který chrlí malé websajty na zakázku, je Ruby jistě požehnáním. Ale pro někoho jiného, kdo se dlouhodobě stará o jeden rozsáhlý systém, je Java mnohem vhodnějším jazykem. Tož tak, odcházím na dovolenou, případného flamewar se nezúčastním :-) Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: moduly v aplikaci
The Open Services Gateway initiative framework is a module system and service platform for the Java programming language that implements a complete and dynamic component model http://en.wikipedia.org/wiki/OSGi http://www.springsource.org/osgi Dne 29.6.2011 06:49, Tomas Baca napsal(a): liferay ? Liferay je portál, modularizuje uživatelské rozhraní, na aplikační úrovni leží aplikace spíš vedle sebe, než že by byly moduly něčeho většího. Ještě mne napadlo OpenCMS, to má v sobě podporu modulů, a funguje v něm přesně to požadované - když je potřeba anketa, doinstaluje se modul ankety, viz seznam modulů: http://opencms-wiki.org/Available_Modules 2011/3/1 Jiří Nápravníkjiri.naprav...@gmail.com: Zdravím, potřebuji udělat aplikaci, která bude co možná nejvíce modulární. Uvedu například CMS, bude třeba dodat anketa, tak se udělá modul ankety, který povolím a v adminu/frontendu se objeví tahle funkcionalita. A druhá věc, chtěl bych aby aplikace byla na jednom místě a běželo více instancí, přičemž každá instance by měla různé povolené moduly například přes kofigurační soubory. Můžete mi doporučit, co nastudovat? Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Aplikacia na vyplnanie instancii XML schemy
Dne 21.6.2011 13:25, Robert Novotny napsal(a): Zdravim, v ramci jedneho projektu som sa stretol s ulohou, ked treba zbuchat aplikaciu na vyplnanie instancii XML schemy. Na vstupe je lubovolna (ale rozumne obmedzena) XML schema, pre ktoru sa zobrazi formular s polickami, ktore pouzivatel vyplni/vyklika. Ide prakticky o XML data binding. Na toto by sa bezne pouzil JAXB, ale ten zrejme nedokaze za behu vygenerovat triedy a na ne namapovat hodnoty. Jedna ocividna moznost je preliezt XSD ako klasicky XML dokument a v servlete vygenerovat lepenim stringov formular, ktory pouzivatel vyplni a po jeho odoslani sa hodnoty vyplnene namapuju na vhodny objekt. Nemate niekto skusenosti s lepsim napadom? Robert Novotny Onehdy tu někdo řešil stejný problém. Obecně to nejde, protože XML schema může popisovat nekonečně mnoho dokumentů, ale při určitém omezení to jde, a je k tomu knihovna XSOM http://xsom.java.net/. Viz vlákno http://www.mail-archive.com/konference@java.cz/msg12102.html Makub -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Swign HTML
Přítel Google mi našel tohle: http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html kde se píše: * Label string must begin with html, not HTML. * Embedded images are not supported in the HTML. * JLabel fonts are ignored if HTML is used * You must use P, not BR to force a line break. * Other HTML support is spotty. Be sure to test each HTML construct you use. Letting the user enter HTML text at run-time is asking for trouble. Nic podrobnějšího jsem nenašel :-( Makub Dne 16.6.2011 09:03, Libor Jelinek napsal(a): Promiň, nepřečetl jsem si pozorně otázku. No jestli existuje jasný seznam komponent to nevím, ale podle mojí zkušenosti prakticky všechny. I když sada HTML značek je omezená a CSS jsem v nich nikdy ještě nezkoušel použít. Dá se s tím docela pěkně kouzlit. Např. já tím v JTable zalamuju příliš dlouhý nadpis sloupce apod. Libor Dne 16. června 2011 8:59 Libor Jelinekljeli...@virtage.com napsal(a): Ahoj! je třeba aby hodnota začínalahtml a končila/html jLabel1.setValue(htmlBěžnýbtučný/b testbr/nový řádek/html); Libor Dne 16. června 2011 8:34 Ondra Medekxmed...@gmail.com napsal(a): Ahoj, lze nekde zjistit, jake konkretne veci z HTML a CSS podporuje Swing (jre6 windows) pro renderovani napr. jLabel? diky -- Ondra Medek -- ~~ CERIT-SC Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Vytvoreni instance XML objektu z XSD definice
Dne 20.4.2011 10:19, Martin Beránek napsal(a): eclipse takovou funkcionalitu ve svem editoru poskytuje. pravým tlačítkem na soubor *.xsd = generate = xml file Cvičně jsem si napsal kód, který z XSD poslaného tazatelem vyrobí pomocí JDOMu požadovanou zprávu. Stálo mně to asi dvě hodiny učení se XSOMu :-) package cz.makub.xsom; import com.sun.xml.xsom.*; import com.sun.xml.xsom.parser.XSOMParser; import org.jdom.Document; import org.jdom.Element; import org.jdom.output.Format; import org.jdom.output.XMLOutputter; import org.xml.sax.SAXException; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class XSOMaJDOM { public static void main(String[] args) throws IOException, SAXException { XSOMParser parser = new XSOMParser(); parser.parse(new File(message.xsd)); XSSchema schema = parser.getResult().getSchema(1); XSComplexType complexType = schema.getComplexTypes().values().iterator().next(); System.out.println( + complexType.getName() + : complex); Element root = new Element(complexType.getName()); for (XSParticle p1 : complexType.getContentType().asParticle().getTerm().asModelGroup().getChildren()) { XSElementDecl el1 = p1.getTerm().asElementDecl(); System.out.println( + el1.getName() + : complex); Element l2Elem = new Element(el1.getName()); root.addContent(l2Elem); for(XSParticle p2 : el1.getType().asComplexType().getContentType().asParticle().getTerm().asModelGroup().getChildren()) { XSElementDecl el2 = p2.getTerm().asElementDecl(); XSSimpleType simpleType = el2.getType().asSimpleType(); System.out.println( + el2.getName()+ : +simpleType.getName()); Element l3Elem = new Element(el2.getName()); l2Elem.addContent(l3Elem); l3Elem.setText(nejaka hodnota); } } //output JDOM Document doc = new Document(root); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(vystup.xml)); XMLOutputter out = new XMLOutputter(Format.getPrettyFormat()); out.output(doc, bos); bos.close(); } } Tímto to považuji za vyřešené. Kdyby to XSD mohlo mít jiný počet úrovní než tři, tak by stačilo použít Visitor Pattern, tedy XSSchema schema = parser.getResult().getSchema(1); schema.visit(new MyVisitor()); kde MyVisitor je public class MyVisitor implements XSVisitor { @Override public void schema(XSSchema schema) { for (Map.EntryString, XSComplexType e : schema.getComplexTypes().entrySet()) { e.getValue().visit(this); } } @Override public void complexType(XSComplexType xsComplexType) { XSContentType xsContentType = xsComplexType.getContentType(); XSParticle particle = xsContentType.asParticle(); if (particle != null) { XSTerm term = particle.getTerm(); if (term.isModelGroup()) { for (XSParticle p : term.asModelGroup().getChildren()) { XSTerm pterm = p.getTerm(); if (pterm.isElementDecl()) { //xs:element inside complex type pterm.visit(this); } } } } } //atd.. } Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Vytvoreni instance XML objektu z XSD definice
Dne 19.4.2011 14:11, Vladislav Krejčiřík napsal(a): ok, mozna jsem to spatne popsal. Zkusim znovu. Ja nechci nic validovat, protoze nemam vlastne ani co. XSD mi definuje strukturu nejake message. Ja bych potreboval takovou messge umet vytvorit, vygenerovat z XSD definice. Myslel jsem ze bych ziskal nejakou objektovou reprezentaci te XML message kde bych nastrkal hodnoty co potrebuju. Potom bych uz jen XML message poslal do fronty. Nevim jestli existuje nejaka knihovna, ktera to umoznuje. Nebo budu muset rucne takovou XML vystavet.. To je právě nepochopení situace. XSD nedefinuje strukturu nějaké message, XSD definuje všechny možné message, a těch bývá obvykle nekonečně mnoho, kromě podivného případu, kdy by všechny použité datové typy byly výčtové. Takže vygenerovat z XSD konkrétní message nedává smysl. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Vytvoreni instance XML objektu z XSD definice
Dne 19.4.2011 14:18, Martin Kuba napsal(a): Dne 19.4.2011 14:11, Vladislav Krejčiřík napsal(a): ok, mozna jsem to spatne popsal. Zkusim znovu. Ja nechci nic validovat, protoze nemam vlastne ani co. XSD mi definuje strukturu nejake message. Ja bych potreboval takovou messge umet vytvorit, vygenerovat z XSD definice. Myslel jsem ze bych ziskal nejakou objektovou reprezentaci te XML message kde bych nastrkal hodnoty co potrebuju. Potom bych uz jen XML message poslal do fronty. Nevim jestli existuje nejaka knihovna, ktera to umoznuje. Nebo budu muset rucne takovou XML vystavet.. To je právě nepochopení situace. XSD nedefinuje strukturu nějaké message, XSD definuje všechny možné message, a těch bývá obvykle nekonečně mnoho, kromě podivného případu, kdy by všechny použité datové typy byly výčtové. Takže vygenerovat z XSD konkrétní message nedává smysl. Tedy abych byl přesný - dá se pomocí třeba JAXB z XSD vygenerovat sada tříd reprezentující jednotlivé elementy, a potom se dá programově z instancí těch vygenerovaných tříd sestavit v paměti strom objektů a ten zeserializovat do XML. To jde. Příslušný příkaz je xjc soubor.xsd Ale nejde z obecného XSD rovnou vygenerovat ten strom objektů v paměti, protože to XSD může třeba definovat varianty, a nejde říci, která z variant by se měla vybrat. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Vytvoreni instance XML objektu z XSD definice
Dne 19.4.2011 15:27, Vladislav Krejčiřík napsal(a): Aplikace funguje nasledovne: Pri startu si aplikace natahne vsechny XSD ze zadaneho adresare. Pak potrebuju ke kazde XSD definici udelat validni XML message do ni vlozit potrebne hodnoty a poslat na zadanou queue. A jak do té XML message vloží ty potřebné hodnoty, když předem neví, jak to XSD vypadá ? Tj. neví kam kterou hodnotu vložit. Vygoogloval jsem XSOM, možná by se to dalo použít: http://xsom.java.net/userguide.html Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Java fór
Dne 12.4.2011 09:31, Tomas Studva napsal(a): 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. Zas tak exotické to není. Break s návěštím se používá typicky v případě, že už není nutné dál iterovat, protože jsme našli, co jsme hledali, tj. např: int[][][] pole3D = new int[5][7][9]; pole3D[3][6][8] = 42; TRI_SMYCKY: for (int i = 0; i pole3D.length; i++) { for (int j = 0; j pole3D[i].length; j++) { for (int k = 0; k pole3D[i][j].length; k++) { if(pole3D[i][j][k]==42) { System.out.println(Našli jsme základní odpověď života, vesmíru a vůbec všeho !); break TRI_SMYCKY; } } } } Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: read() z IO - předávání referencí? To snad ne..
Dne 5.4.2011 08:41, Libor Jelinek napsal(a): Ovšem do jaké podoby přepsat Zamestnanec.getNarozeni(), aby teda nevracela referenci na privátní objekt Date, ale kopii. Tedy odolné proti zam.getNarozeni().setTime(0L);, aby i po tomto příkazu zůstalo datum narození v nezměné? První co mě napadá je přepsat getNarozeni() na toto: public Date getNarozeni() { Zamestnanec kopieZamestnance = new Zamestnanec(narozeni); return kopieZamestnance.getNarozeni(); } Ovšem s tím nepochodím a skončím s ošklivou chybou: Exception in thread main java.lang.StackOverflowError at Zamestnanec.init(ZmenaBezSetteru.java:16) at Zamestnanec.getNarozeni(ZmenaBezSetteru.java:21) (a tento řádek vypsán ještě asi 30x :-)) Proč skončí tato varianta s vytvořením nového objektu na sebe sama s chybou StackOverflowError? Když zkusím druhé co mě napadá na toto: Protože ta metoda volá sama sebe v nekonečné rekurzi, takže přeteče zásobník. I kdyby se přepsala, tak to stejně nepomůže, protože objekt typu Date je stále tentýž i v nové kopii Zamestnanec, neboť se jí předá v konstruktoru na něj ukazatel a ten se uloží i v nové kopii. public Date getNarozeni() { return (Date) narozeni.clone(); } Pak již hlavní program vypíše 2x po sobě stejné datum. Buď tak, a nebo public Date getNarozeni() { return new Date(narozeni.getTime()); } Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: read() z IO - předávání referencí? To snad ne..
Krátké, výstižné, jednoznačné: Java is Pass-by-Value, Dammit! http://javadude.com/articles/passbyvalue.htm Dne 4.4.2011 14:18, Ondřej Fafejta napsal(a): ale objekty se předávájí odkazem (resp. adresa pointeru ...) Ne, objekty se předávají *hodnotou* ukazatele. Odkaz (angl. reference) a ukazatel (angl. pointer) nejsou to stejné. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Porovnání řetězců
Dne 3.3.2011 17:34, Tomas Pitner napsal(a): Tuším, že to bude jistě něco s ukazateli (promiňte mi ten výraz, vím v Javě nejsou). Jen pro upřesnění, ukazatele v Javě jsou, jsou to všechny objektové proměnné. To co v Javě není je ukazatelová aritmetika. Tj. v Céčku jde udělat struct bla *p; struct bla a[10]; p = a[3]; //p ukazuje na a[3] p = p + 1; //p ukazuje na a[4] p++; //p ukazuje na a[5] kdežto v Javě lze do ukazatele jedině přiřadit jiný ukazatel nebo null. Při předávání parametrů do metod se předávají všechny parametry hodnotou, primitivní i objektové, takže při použití Bla bla = new Bla(1); nejakaMetoda(bla); System.out.println(bla); ... public void nejakaMetoda(Bla par) { par = new Bla(2); return; } se vytiskne obsah instance inicializované s Bla(1), jelikož se sice do parametru par předala kopie ukazatele na Bla(1) a pak byla v těle metody přepsána hodnotou ukazatele na Bla(2), ale na původní proměnnou bla to nemá vliv. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Porovnání řetězců
Dne 4.3.2011 13:56, michal.niko...@elanor.cz napsal(a): Jen bych doplnil, takovou libustku, ktera ukazuje, ze i Java ma ukazatelovou aritmetiku. http://www.java.cz/article/ukazatelovaaritmetika Ale je to opravdu jen takova zajimavost. To není ukazatelová aritmetika. To jenom ukazuje, že pomocí nativních metod se dá přistupovat k paměti přímo, ale to je tím, že ty nativní metody jsou napsané v Céčku. Definice té metody Unsafe.putChar() totiž vypadá takto: public native void putChar(long address, char x); Stejně tak můžu pomocí nativní metody přistupovat k nějaké speciální vlastnosti nějakého operačního systému, třeba sdílené paměti mezi procesy nebo k nastavování práv na unixovém filesystému, ale tím se to nestává součástí Javy jakožto jazyka. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: moduly v aplikaci
Dne 1.3.2011 01:10, Jiří Nápravník napsal(a): Zdravím, potřebuji udělat aplikaci, která bude co možná nejvíce modulární. Uvedu například CMS, bude třeba dodat anketa, tak se udělá modul ankety, který povolím a v adminu/frontendu se objeví tahle funkcionalita. A druhá věc, chtěl bych aby aplikace byla na jednom místě a běželo více instancí, přičemž každá instance by měla různé povolené moduly například přes kofigurační soubory. Můžete mi doporučit, co nastudovat? Nemám s tím osobní zkušenosti, ale pro modularitu je určené OSGi: http://en.wikipedia.org/wiki/OSGi Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Classloader v tomcatu
Dne 24.2.2011 13:31, Tomas Bezdek napsal(a): ahoj, v jedne sve tride mam volani EPaymentService.class.getResource(.), ktere mi pri debugovani v eclipsech vraci spravnou cestu ke tride (file:/...). kdyz ale toto volani probehne v aplikaci spustene na tomcatu, vraci null. nevite nekdo cim by to mohlo byt zpusobene? Nejspíš tím, že . je aktuální adresář, a v Tomcatu ta třída není v souboru s příponou .class, ale zabalená bud v souboru .jar, nebo dokonce uvnitř nerozbaleného .war, záleží na lokální instalaci. Takže ta třída žádný adresář nemá. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Classloader v tomcatu
Dne 24.2.2011 14:21, Tomas Bezdek napsal(a): presne tak, potrebuju ziskat aktualni adresar, protoze vedle .class mi lezi wsdl ktere potrebuju predhodit kontruktoru javax.xml.ws.Service. zkousel jsem s teckou i bez, nefunguje ani jedno reseni. prijde mi divne ze pri debugovani v eclipse se cesta nacte bez problemu V tom případě by bylo lepší použít EPaymentService.class.getResource(neco.wsdl) Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: OpenJDK vs. Sun JDK
Dne 10.2.2011 12:36, Libor Jelinek napsal(a): Dobrý den! Koukám, že když se nezeptám, tak tu je mrtvo :-) V rámci svého návratu k Javě bych měl další dotaz. V době kdy jsem naposledy programoval OpenJDK nebylo a Sun jen uvažoval o uvolnění. Jaký je vlastně tedy rozdíl mezi Sun a OpenJDK? Dočetl jsem se jen toho, že vývoj stejně dělá z 95% zaměstnanci Sunu (resp. Oraclu). Např. v Ubuntu 10.10+ se rozhodli, že standardně nabízenou verzí bude ta OpenJDK. Je to jiná implementace JVM i tříd. Zatím jsem vypozoroval, že v OpenJDK nefungují správně některé applety, třeba můj oblíbený SciMark http://math.nist.gov/scimark2/run.html má v OpenJDK nepoužitelné okno. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Off Topic - Oracle/Java/Linux zkratka ala LAMP?
Dne 25.1.2011 18:01, Jiří Hradil napsal(a): Existuji samozrejme jine platformy, ktere vam vrati radost do zivota. Treba http://rubyonrails.org/ :). A zkusili jste to někdo použít k reálnému provozu ? Četl jsem kdesi, že RoR server je třeba mnohokrát denně přestartovat kvůli stabilitě. Taky jsem osobně zkoušel pro RoR napsat reálnou aplikaci, ale strašně mi chyběla Javovská podpora internacionalizace, ResourceBundle, podpora utf-8 a unicode. A další věc je výkon. Samotná Céčková implementace Ruby je dost pomalá, i v porovnání třeba s Pythonem nebo Perlem. Vypsal jsem bakalářskou práci na porovnání výkonu RoR nad Ruby a JRuby (implementace Ruby nad JVM), a vyšlo to tak, že JRuby je pro RoR aplikace ještě pomalejší než normální Ruby. Hodně ztrácí zejména v I/O operacích, což se dá ještě zvládnout použitím IBM JVM místo SUN JVM, ale naprosto tragické je to v rychlosti přístupu k databázi. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Off Topic - Oracle/Java/Linux zkratka ala LAMP?
Dne 26.1.2011 11:20, Jiří Hradil napsal(a): Bezime na tom nekolik mesicu v poctu uzivatelu v radu stovek/tisicu a naprosto v pohode. Pocet modulu (subsystemu) v radu desitek. i18n, utf-8, skalovani, rychlost - vse OK. Diky share nothing proste pridavam servery dle potreby do clusteru a je mi jedno, jestli je to o par procent pomalejsi nez Java. Failover resi balancer. I kdyz je reseni stabilni, tak pripadny vypadek jednoho ze serveru me netrapi, uzivatele jsou v dalsim requestu presmerovani na jiny server. Restart serveru kvuli nestabilite nepamatuju. Vyvoj je 10x rychlejsi, takze tyhle drobnosti neresim, protoze koupit novy server je mnohem levnejsi, nez se patlat s Javou. Tohle je gral vyvoje. Nikoli rychlost jazyka, ale rychlost vyvoje. Kdyz se ale divam To zní velmi zajímavě. Ale napadá mne jedna námitka - rychlost vývoje není všechno, důležitá je i udržovatelnost. Moje zkušenost s Ruby mi říká, že se v něm sice mnohem rychleji píše než v Javě, ale zato mnohem hůře čte. Gosling se kdesi vyjádřil ve smyslu - zjistili jsme experimenty, že se kód mnohem častěji čte než píše. Proto je Java záměrně navržena tak, aby se dobře četla, spíš než dobře psala. Přece jenom statické typování dohromady s kontrolami v Intellij IDEA mi umožňují psát téměř bezchybný kód, kdežto dynamické typování v Ruby mi nedovoluje ani zjistit co můžu očekávat v parametrech nějaké metody. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Off Topic - Oracle/Java/Linux zkratka ala LAMP?
Dne 26.1.2011 12:52, Jiří Hradil napsal(a): Zkuste to a dejte vedet. Fakt to za to stoji. A verte mi, byl jsem velky obhajce Javy :). Zkusil jsem obojí, Javu i Ruby, a můj dojem z Ruby skutečně byl, že je to mnohem silnější jazyk, ve kterém se dá elegantněji a proto stručněji vyjádřit. Kdesi jsem četl, že člověk dovede posoudit jenom slabší jazyky, než je ten nejsilnější, který zrovna umí, a asi to tak bude. Se znalostí Ruby vidím, že Java má slabší vyjadřovací schopnost, předtím bych to nedokázal posoudit. (Na tom stejném místě psali, že nejsilnější je LISP, ten neumím, nemohu posoudit :-)) Ale, ALE ! Napsal jsem si v Ruby jistou poměrně komplikovanou aplikaci, která už nějaké dva roky funguje. Jenže se do ní teď neodvažuji dělat zásahy, protože se mi v tom kódu teď, když jsem ho dlouho neviděl, špatně orientuje. Neodvažuji se dělat refaktoring, protože IDEA mi s tím nepomůže, jelikož kvůli duck typing neví, kde se co používá. Takže můj soukromý závěr je, že Ruby je fantastické na psaní krátkých kousků kódu, protože se v něm píše stručněji, a tím je i méně místa na dělání chyb. Ale je naprosto hrozné na definování rozhraní něčeho, to v něm v podstatě nejde. Když budu mít parametr metody, který je seznam hešovacích tabulek ve kterých je klíčem nějaká třída, tak to nikdy nezjistím. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Virtualizace vyvojoveho prostredi
Dne 22.12.2010 16:43, Vítězslav Košina napsal(a): Dobry den, to co mi popisujete znam a myslim, ze neni to co uplne hledam. Zkusim to popsat detailneji. Mam farmu serveru cca. 5 dohromady 10 dual procaku a dohromady cca. 256 GB RAM a k tomu 10 TB pole. Na tom mam virtualizaci VMware ESX server. Co potrebuju je: - aby moji vyvojari nevyvijeli na desktopu, ale pekne na serveru tj. v podstate virtualizovany desktop - bylo mozne v ramci jednotlivych session vyuzivat plne vykonu serveru - existovala moznost si vzit image i na svuj notas a pokracovat v praci offline - cele to bezelo pres https (kvuli moznym problemum s pripojenim z ruznych mist na teto planete) - aby jednotlive session mohli uzivatele prebirat. Napr. tester najde chybu, a svuj desktop preda vyvojari v tom stavu, v jakem se ta chyba vyskytla. - vytvorit klon prostredi a zalohovani byla trivka - prostredi mohla byt jak linux tak i win7 Tohle přece VMware umí, ne ? Přes prohlížeč (https) se připojím na server, vyberu si virtuální stroj a kliknutím aktivuji plugin v prohlížeči, který se připojí na server a zobrazí mi desktop virtuálního stroje. Podle potřeby se můžu připojovat a odpojovat. Jenom si nejsem jistý, jestli se dá vzít virtuální stroj ze serveru off-line pryč, normálně to nepoužívám. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: reload truststore za behu
Dne 14.12.2010 10:37, Martin Kuba napsal(a): http://download.oracle.com/javase/6/docs/technotes/guides//security/jsse/JSSERefGuide.html#CustomizingStores Nicméně o implementaci reloadující certifikáty CA za běhu jsem tam nic nenašel, takže stejně nezbude než si ji napsat. Našel jsem tam následující radu http://download.oracle.com/javase/6/docs/technotes/guides//security/jsse/JSSERefGuide.html#OwnX509TM cituji: Updating the keyStore Dynamically You can enhance MyX509TrustManager to handle dynamic keystore updates. When a checkClientTrusted or checkServerTrusted test fails and does not establish a trusted certificate chain, you can add the required trusted certificate to the keystore. You need to create a new pkixTrustManager from the TrustManagerFactory initialized with the updated keystore. When you establish a new connection (using the previously initialized SSLContext), the newly added certificate will be called to make the trust decisions. Takže asi tak. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: reload truststore za behu
Dne 14.12.2010 07:57, Tomas Vojtech napsal(a): Ahoj, v některých aplikacích chceme mít možnost reloadu truststoru za běhu aplikace bez restartu tomcata. Podle toho co jsem našel by to mělo jít implementací vlastního X509TrustManager. Zatím jsem ale nepřišel na to jak JVM říct, aby ho používala. Máte s tím někdo zkušenosti? Budu rád za každý tip. Ahoj, používaný TrustManager není záležitostí JVM, ale konkrétní třídy. Třeba pro *klientská* HTTPS spojení zajišťovaná třídou HttpsURLConnection se dá nastavit vlastní TrustManager pomocí TrustManager[] trustManagers = new TrustManager[] { myTrustManager }; SSLContext sctx = SSLContext.getInstance(TLS); sctx.init(null, trustManagers, null); SSLSocketFactory sf = sctx.getSocketFactory(); HttpsURLConnection.setDefaultSSLSocketFactory(sf); Takže pokud je potřeba nastavit vlastní TrustManager Tomcatu, je třeba zjistit, jak Tomcatímu Connectoru podstrčit vlastní implementaci SSLSocketFactory. Z toho co jsem vygoogloval to vypadá, že v server.xml se dá v tagu Connector nastavit Connector ... SSLImplementation=cz.moje.SSLimplementace aspoň podle http://anil-identity.blogspot.com/2007/10/tip-9-change-ssl-implementation-in.html Podivné ale je, že v referenční dokumentaci pro Tomcat 6.0 na http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#SSL_Support tenhle atribut popsán není, je jen v dokumentaci pro Tomcat 3.0 na http://tomcat.apache.org/tomcat-3.3-doc/tomcat-ssl-howto.html Popravdě řečeno, nikdy jsem SSL přímo v Tomcatu nepoužíval, vždycky jsem před Tomcat postavil Apache s mod_ssl a pomocí mod_jk přeposílal requesty Tomcatu. (Používám mod_jk místo mod_proxy_ajp proto, že mod_jk umí poslat DN certifikátu vytvořené OpenSSL, kdežto mod_proxy_ajp to neumí.) A mod_ssl si seznam CA kontroluje, aspoň si to myslím, při každém SSL handshake. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Spring security 3.0.x + LDAP pres SSL za pouziti certifikatu
Dne 29.11.2010 13:11, el.wond...@centrum.cz napsal(a): V konfiguraku nic takoveho neni . Pouze nejaky DefaultSpringContextSource... Tak právě ten bych zkusil vyměnit za ten můj MyContextSource. Oba jsou potomci AbstractContextSource http://static.springsource.org/spring-ldap/docs/1.3.x/apidocs/org/springframework/ldap/core/support/AbstractContextSource.html takže by měli být zaměnitelní. Pokud by to přesto nešlo, tak bych jako druhou možnost zkusil ten můj MyContextSource udělat jako potomka DefaultSpringContextSource místo AbstractContextSource, ve skutečnosti jde jenom o to předefinovat metodu getDirContextInstance() tak, aby podstrčila jako parametr vlastní implementaci SSLSocketFactory. Makub Od: Martin Kubama...@ics.muni.cz Komu: Javakonference@java.cz Datum: 26.11.2010 17:50 Předmět: Re: Spring security 3.0.x + LDAP pres SSL za pouziti certifikatu Dne 26.11.2010 08:41, Martin Kuba napsal(a): package cz.makub; import org.springframework.ldap.core.support.AbstractContextSource; public class MyContextSource extends AbstractContextSource { -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Spring security 3.0.x + LDAP pres SSL za pouziti certifikatu
Dne 26.11.2010 08:41, Martin Kuba napsal(a): Spring Security jsem nepoužíval, jenom Spring LDAP, ale podle toho popisu soudím, že je třeba si vytvořit vlastní implementaci AbstractContextSource, viz http://static.springsource.org/spring-ldap/docs/1.3.x/apidocs/index.html?org/springframework/ldap/core/support/AbstractContextSource.html která se k připojí k LDAP serveru a použije přitom SSL certifikát. V něm je třeba se správně autentizovat, popis je na http://download.oracle.com/javase/jndi/tutorial/ldap/security/ssl.html v části Using Custom Sockets. Je třeba si vytvořit SslSocketFactory, která dokáže předložit klientský SSL certifikát. To se dělá zhruba takto: Tak jsem si to zkusil, a je to tak. V konfiguraci Springu se musí org.springframework.ldap.core.support.LdapContextSource nahradit za vlastní implementaci, která musí vypadat nějak takto: package cz.makub; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.ldap.core.support.AbstractContextSource; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.ldap.InitialLdapContext; import javax.net.SocketFactory; import javax.net.ssl.*; import java.io.FileInputStream; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.net.URI; import java.net.URISyntaxException; import java.security.KeyStore; import java.util.Hashtable; /** * Alternative to LdapContextSource allowing client SSL certificates. * * @author Martin Kuba ma...@ics.muni.cz * @version $Id:$ * @see org.springframework.ldap.core.support.LdapContextSource */ public class MyContextSource extends AbstractContextSource { final static Logger log = LoggerFactory.getLogger(MyContextSource.class); private String keyStoreFile; private String keyStorePassword; public void setKeyStoreFile(String keyStoreFile) { this.keyStoreFile = keyStoreFile; } public void setKeyStorePassword(String keyStorePassword) { this.keyStorePassword = keyStorePassword; } @SuppressWarnings({unchecked}) @Override protected DirContext getDirContextInstance(Hashtable env) throws NamingException { String url = (String) env.get(Context.PROVIDER_URL); try { if (new URI(url).getScheme().equalsIgnoreCase(ldaps)) { env.put(java.naming.ldap.factory.socket, cz.makub.MyContextSource$MySSLFactory); MySSLFactory.setManagers(getKeyManagers(), null); } } catch (URISyntaxException e) { log.error(LDAP URL + url + is wrong, e); } return new InitialLdapContext(env, null); } private KeyManager[] getKeyManagers() { return getKeyManagers(loadKeyStoreFromFile(keyStoreFile, keyStorePassword), keyStorePassword); } private static KeyManager[] getKeyManagers(KeyStore keyStore, String storePassword) { try { KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(SunX509); keyManagerFactory.init(keyStore, storePassword != null ? storePassword.toCharArray() : null); return keyManagerFactory.getKeyManagers(); } catch (Exception ex) { throw new RuntimeException(ex.getMessage(), ex); } } private static KeyStore loadKeyStoreFromFile(String ksfile, String password) { String kstype; if (ksfile.endsWith(.jks)) { kstype = JKS; } else if (ksfile.endsWith(.p12)) { kstype = PKCS12; } else { throw new RuntimeException(keystore file name + ksfile + must end with .ks (JKS) or .p12 (PKCS12)); } try { KeyStore store = KeyStore.getInstance(kstype); store.load(new FileInputStream(ksfile), password != null ? password.toCharArray() : null); return store; } catch (Exception ex) { throw new RuntimeException(ex.getMessage(), ex); } } /** * SSL SocketFactory enabling client certificates and customs server checks. */ @SuppressWarnings({UnusedDeclaration}) public static class MySSLFactory extends SocketFactory { final static MySSLFactory thisFactory = new MySSLFactory(); static SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); public static void setManagers(KeyManager[] keyManagers, TrustManager[] trustManagers) { try { SSLContext sctx = SSLContext.getInstance(TLS); sctx.init(keyManagers, trustManagers, null); factory = sctx.getSocketFactory(); } catch (Exception ex) { ex.printStackTrace(); } } public static SocketFactory getDefault() { return thisFactory; } @Override public Socket createSocket() throws IOException { return factory.createSocket
Re: generika a '? extends Xxx'
Dne 25.11.2010 08:26, Martin Beranek napsal(a): 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 Hm, generika dovedou být dost neintuitivní. Musel jsem si znovu přečíst http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf abych to pochopil. Vysvětlení je na straně 7 nahoře, v jednodušší formě se to dá demonstrovat na tomhle příkladu: Set? extends Object s = new HashSetString(); s.add(ZZZ); //nejde přeložit Jde o to, že ? extends Object může být cokoliv, třeba Float, nemusí to být String, takže kompilátor nemůže dovolit do takové množiny String přidat. Musí se to napsat právě jako Set? super String s = new HashSetString(); s.add(ZZZ); //v pořádku Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: generika a '? extends Xxx'
Jenom poznámku: Dne 25.11.2010 10:00, Kamil Podlesak napsal(a): Ještě intuitivnější vysvětlení je s kolekcemi: List? extends A l; if (externifunkce()) { l = new ArrayListB(); } else { l = new ArrayListC(); Tohle taky přes kompilátor neprojde: l.add(new C()); } //a toto nesmi byt povoleno, protoze l muze byt ListC ! l.add( new B() ); Musí se to udělat takto: List? extends A l; if (externifunkce()) { l = new ArrayListB(); } else { ArrayListC lc = new ArrayListC(); lc.add(new C()); l = lc; } Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: generika a '? extends Xxx'
Ještě si s tím hraju, a zjistil jsem, že do List? extends B l; nejde přidat vůbec nic, a to dokonce ani l.add( l.get(0) ); Je to sice logické, ale naprosto protiintuitivní. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Spring security 3.0.x + LDAP pres SSL za pouziti certifikatu
Dne 25.11.2010 17:58, el.wond...@centrum.cz napsal(a): Ahoj Javisti. Potreboval bych poradit s problemem, kdy je potreba se autentizovat/autorizovat LDAPem pres SSL za pouziti certifikatu pomoci Spring security. Od zakaznika jsem dostal certifikaty, ktere mam pouzit. Vubec netusim, jak a hlavne kam se ty certifikaty musi nacpat(JDK, Tomcat,...??), aby se pri autentizaci ty certifikaty pouzili. Muzete mi nekdo poradit? Popripade hodit nejaky link s prikladem. Předpokládám, že se tím myslí klientské SSL certifikáty pro přístup k LDAP serveru, vůči kterému se ověří username a heslo uživatele, tj. to co je popsáno na http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ldap.html#ldap-context-source a ne třeba klientský SSL certifikát v uživatelově browseru, to by byla úplně jiná pohádka. Spring Security jsem nepoužíval, jenom Spring LDAP, ale podle toho popisu soudím, že je třeba si vytvořit vlastní implementaci AbstractContextSource, viz http://static.springsource.org/spring-ldap/docs/1.3.x/apidocs/index.html?org/springframework/ldap/core/support/AbstractContextSource.html která se k připojí k LDAP serveru a použije přitom SSL certifikát. V něm je třeba se správně autentizovat, popis je na http://download.oracle.com/javase/jndi/tutorial/ldap/security/ssl.html v části Using Custom Sockets. Je třeba si vytvořit SslSocketFactory, která dokáže předložit klientský SSL certifikát. To se dělá zhruba takto: SSLContext sc = SSLContext.getInstance(SSL); TrustManager[] myTrustManager = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { //není potřeba u klienta } public void checkServerTrusted(X509Certificate[] certs, String authType) { //jen pokud chci ověřovat server } } }; KeyManager[] myKeyManager = new KeyManager[] { new X509KeyManager() { public String[] getClientAliases(String s, Principal[] principals) { } public String chooseClientAlias(String[] strings, Principal[] principals, Socket socket) { } public String[] getServerAliases(String s, Principal[] principals) { } public String chooseServerAlias(String s, Principal[] principals, Socket socket) { } public X509Certificate[] getCertificateChain(String s) { } public PrivateKey getPrivateKey(String s) { } } }; sc.init(myKeyManager, myTrustManager, new java.security.SecureRandom()); SSLSocketFactory sslSocketFactory = sc.getSocketFactory(); samozřejmě je třeba naimplementovat metody pro TrustManager a KeyManager tak, aby se ověřil saerver a předložil klientský SSL certifikát. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: priepustnost Wsclienta
Dne 5.11.2010 22:47, tester tester napsal(a): Zdravim, s WS zacinam tak by som sa chcel spytat jednu vec ohladne priepustnosti ws clienta generovaneho z ws pomocou NB (jax-ws style). Vie mi niekto povedat ako je vnutorne klient pripraveny na viacnasobne konkurentne volanie klienta ? Odpověď neznám, ale docela by mne zajímalo, jestli to někdo poslední dobou měřil. Někdy před šesti lety jsem měřil rychlost Axis 1, a byla velmi špatná, zejména v porovnání s gSOAP implementovaným v Céčku, na stejném železe Axis dokázala 198 volání za sekundu se SUNovským JVM, 239 s JRockitem, a gSOAP dokázal 1540 volání za sekundu. Dělal jsem si tehdy poznámky na http://www.ics.muni.cz/~makub/java/speed.html#ws Bohužel se v SUNím JRE od verze 1.5.0 změnila implementace SAX parseru a srovnatelné výsledky od té doby nelze získat. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Plugin do Eclipse pre podporu vytvorenia lokalizacie priamo z kodu
Dne 3.11.2010 00:28, Roman Zakutny napsal(a): Zdravim, vedel by mi niekto z Vas poradit, ci existuje plugin do Eclipse (pripadne ako inak to sami implementujete), ktory poskytuje zhruba nasledujuce moznosti: 1) v zdrojaku napisem string Testovaci preklad 2) napr. stiskom praveho tlacitka si z kontextoveho menu vyberiem nieco ako Localize 3) v okne zadam vlastny lokalizacny kluc, napr. my.key 4a) po potvrdeni mi automaticky vygeneruje konstantu do predom znamej triedy - public static final String MY_KEY = my.key 4b) do predom znameho *.properties suboru vlozi kluc my.key=Testovaci preklad (pripadne poskytne vytvorenie dalsich jazykovych mutacii) Tymto postupom by som si chcel usetrit vlastne generovanie konstant a predist tak opacnemu pristupu: 1) vytvor lokalizacny kluc v *.properties subore 2) pregeneruj triedu konstant na zaklade tohto *.properties suboru 3) vloz konstantu do kodu V Eclipse uz existuje sice moznost Enternalize String, ale to sa mi moc nepaci, pretoze to sice konstantu vygeneruje, ale natvrdo tam dosadi tu moju jedinu lokalizovanu hlasku. Tym som prisiel o moznost dynamickej lokalizacie podla aktualne uzivatelom nastaveneho jazyka. Alebo to riesite nejak inteligentejsie? V Eclipse nevím, ale v Intellij IDEA tohle lze udělat na dva kroky pomocí Refactor - Internationalize (Alt-R,Alt-Z) které vytvoří klíč v *.properties souboru, přiřadí mu hodnotu z řetězce a nahradí řetězec za resourceBundle.getString(klic) Refactor - Introduce constant (CTRL+Alt+C) které klic nahradi nově vytvořenou konstantou Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: content-type a JSP stranka
Ahoj, kódování je třeba uvést na dvou místech, aby to správně fungovalo, a je dobré ho dát ještě na třetím, a to takto: %@ page contentType=text/html; charset=utf-8 pageEncoding=windows-1250% html head meta http-equiv=Content-Type content=text/html; charset=utf-8 To první místo je v direktivě @page v atributu contentType, a určuje, v jakém kódování bude stránka poslána prohlížeči, tj. HTTP hlavičku. Pokud není uvedeno, bere se iso-8859-1. Druhé místo je zase v direktivě @page, ale v atributu pageEncoding, a určuje, v jakém kódování je soubor JSP načten z disku. Musí odpovídat tomu, jak je nastaven editor, ve kterém to píšete. Default je určen nastavením operačního systému, přesněji řečeno systémovou property file.encoding, a na českých Windows to bude windows-1250. Třetí místo je v tom meta tagu. Pokud je nastaveno první místo (tj. HTTP hlavička), tohle nastavení má smysl jen pokud si uživatel uloží kopii stránky na disk, při kterém se HTTP hlavičky nezachovávají. Pokud HTTP hlavička kodování nespecifikuje, vezme ho prohlížeč z meta tagu. Specifikace v HTTP hlavičce má přednost před specifikací v meta tagu. No a pokud není kodování nastaveno ani v hlavičce ani v meta tagu, prohlížeč má nastaveno nějaké default kodování, ve Firefoxu je to v menu Úpravy - Předvolby - Obsah - Písma a barvy - Rozšířené - Znaková sada, případně se to dá rychle ručně vynutit v Zobrazení - Znaková sada. Takže stručná opověď je, že je třeba, aby pageEncoding bylo správně nastaveno, aby znaky byly vůbec správně načteny, a pak je třeba nastavit správně HTTP hlavičku pomocí contentType, aby byly znaky správně překodovány na výstupu a prohlížeč věděl jak. Pak není nutné na straně prohlížeče vůbec nic dělat. Makub ivo_m napsal(a): Já mám trochu podobný problém. Jednoduchá stránka xx.html: !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN html head meta http-equiv=Content-Type content=text/html; charset=utf-8 titlePokus 2/title /head body ěščřžýáíéúůťň ĚŠČŘŽÝÁÍÉÚŮŤŇ /body /html se mi ve Firefoxu (v. 3.6.8) vždy zobrazí v kódování windows-1250 a musím ji pokaždé ručně přepnout na utf-8, aby byla čitelná. V IE8 to funguje správně. Jak mám přemluvit Firefox, aby to zobrazoval správně? WinXP, Apache 2.2 (localhost) Díky ivo -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Matematicka knihovna
Ondrej Nekola napsal(a): Tady bych mel trochu strach z pohledu bezpecnosti. Pocitam, ze vstup pod kontrolou nemate, a uzivatel ma slusnou sanci vam do nej vlozit neco oskiveho, To se dá vyřešit SecurityManagerem. Dělal jsem webovou aplikaci, kde si uživatelé mohli zadávat libovolně složité podmínky, za jazyk pro psaní podmínek jsem zvolil JRuby. To je z bezpečnostního hlediska stejné jako JavaScript, oba umožňují volat libovolné Java třídy. Řešení je spustit JVM s přepínačem -security a v policy souboru vyjmenovat, co uživatel může udělat. Defaultně může ještě míň než applet, žádné System.exit(), práce se soubory nebo komunikace po síti, Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Matematicka knihovna
Ondrej Nekola napsal(a): Ja kdysi neco takoveho take pouzival pro management konzoli, ale na evaluaci vyrazu mi to prijde jako nemistne riziko. Evil user se muze potencialne ze sandboxu prokopat, nebo alespon spustit nejakou procesor vytezujici cinnost. To je pravda, prosté while(true){} by na DOS útok stačilo. Ale dalo by se proti tomu bojovat kontrolou, že spuštěný skript do určité doby skončí. Nicméně souhlasím, že jednoúčelová knihovna je bezpečnější. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Rozdily v Jave na Windows a Linuxu
To je zajímavé, na Linuxu to v kódu je - ten řádek 22 s checkcast: 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: ifeq34 16: aload_1 17: invokeinterface #4, 1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object; 22: checkcast #5; //class cz/makub/TypovaZahada$Employee 25: astore_2 26: aload_2 27: checkcast #6; //class java/util/Map 30: astore_3 31: goto7 34: return Takže to není vlastnost JVM, ale překladače. Makub Zdeněk Troníček napsal(a): 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: ifeq33 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: goto7 33: return -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Rozdily v Jave na Windows a Linuxu
Martin Kuba napsal(a): To je zajímavé, na Linuxu to v kódu je - ten řádek 22 s checkcast: Tak jsem si přečetl specifikaci na http://java.sun.com/docs/books/jls/third_edition/html/statements.html#259170 a myslím, že na Linuxu je to špatně. Specifikace totiž říká jasně, že for (Object object : list) { } se má rozepsat jako for(IteratorEmployee i = list.iterator();i.hasNext();) { Object object = i.next(); } ale když obě varianty přeložím a podívám se na vygenerovaný bytekód, tak se liší práve o ten checkcast. Takže překladač rozepíše takto: for(IteratorEmployee i = list.iterator();i.hasNext();) { Object object = (Employee) i.next(); } což neodpovídá specifikaci. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Porovnani objektu
Tomáš Záluský napsal(a): identityHashCode() vraci pro ruzne objekty ruzne hodnoty, ale pouze v danem okamziku. To právě popírá program, který jsem linkoval v minulém mailu: To je tím, že hashCode() vrací int, tedy může mít jenom 2^32 různých hodnot. A už třeba jenom různých instancí typu java.lang.Long může být 2^64, takže se musí najít dvě různé se stejným hashem. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Porovnani objektu
michal.niko...@elanor.cz napsal(a): Diky moc za uvedeny priklad. Vystupem u me je (Eclipse): 1580473: java.lang.obj...@42e816 - java.lang.obj...@42e816 1580473: (false) 4384790 - 4384790 pricemz je pro me prekvapujici ten (false) ve vypisu. Vzdy jsem si myslel ze porovnani objektu obj == clash je prave porovnani pres identityHashCode (coz jsem prave mylne pokladal za adresu instance na heapu). Njn, diky za informace a jdu to udelat pres tu WeakReference a porovnavat budu pres ==. Javadoc k Object.hashCode() povídá: As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM programming language.) Tj. není to adresa instance na heapu, ale integer vyrobený z adresy instance na heapu. Adresa může mít větší bitový rozsah než integer, takže dvě různé adresy mohou vyprodukovat stejný integer. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: jednoduchy sablonovaci system pomocou jsp tagov a UTF-8
Ivan Polak wrote: pouzivam Tomcat 6.0.x jednoduchy JSP subor (ziadne includovanie): %@ page contentType=text/html; charset=utf-8 % html body šťžčý /body /html ještě tam chybí pageEncoding, tj. %@ page contentType=text/html; charset=utf-8 pageEncoding=utf-8% protože ten charset definuje výstupní kódování, ale je nutné specifikovat i kódování zdrojáku té JSP stránky. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: [Java] Program nejvýhodnější nabí dky
Ondra Medek napsal(a): Jinak nechápu co je to ta free markerová šablona. Dále ten počet klientů je jenom orientační. Ten časový interval tam bude pravděpodobně kvůli aktualizaci záznamů aby se zbytečně neaktualizovaly ty znázmami dost často, skrátka jednou za čas abychom měli představu o nějaké změně do databáze učastníků. Misto pollingu v casovem intervalu lze pouzit technoligii server push. Pro web se nazyva tez Comet. Jeji spolehliva implmentace neni trivialni, pry ICEFaces ji maji dobre udelanou. Pro RMI ma neco asi podobneho JBoss remoting (nezkoumal jsem, jak tam ten push pracuje, JBoss remoting pouzivame, ale jen jako transparentni nahradu RMI). IMHO server push se nedá implementovat, vždycky je to jenom nějaká forma pollingu v časovém intervalu. Kód na straně webového prohlížeče totiž nemůže poslouchat na socketu, a i kdyby mohl, tak prohlížeč je zhusta za NATem nebo firewallem nebo obojím, takže není ze strany serveru vidět. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: problem s java.util.Date
Souhlasím s Otou. Tyhle řetězce nevyjadřují čas od půlnoci dané časové zóny, ale čas od začátku závodu. Takže třídy v java.util a java.text jsou pro to zcela nevhodné. Vzhledem k tomu, že vhodná třída pro tenhle typ údaje je org.joda.time.Duration, ale ta nemá parsování, udělal bych prostě tohle: public static void main(String[] args) { String t1 = 00:30:10; String t2 = 00:40:20; int timeInSeconds = parseDuration(t2)-parseDuration(t1); System.out.println(timInSeconds = + timeInSeconds); } private static int parseDuration(String t1) { String[] p = t1.split(:); return Integer.parseInt(p[0])*3600+Integer.parseInt(p[1])*60+Integer.parseInt(p[2]); } Makub Oto Buchta napsal(a): No nevím. Podle mého je nejjednodušší cestou vlastní triviální parser, který ze stringů udělá milisekundy. Pomocí String.split(), Integer.parseInt() a operace násobení. 2010/3/7 danisevsky danisev...@gmail.com: diky, toto: Date date3 = new Date(date1.getTime() - date2.getTime() + date1.getTimezoneOffset()*6); funguje, ale metoda getTimezoneOffset() je deprecated a navic jsem k java.util.Date ztratil duveru, protoze teto tride a jeji praci s casem vubec nerozumim. Muj pozadavek je jednoduchy, prijdou mi dva Stringy predstavujici cas ve tvaru HH:mm:ss a znamenaji: 1. string = doba za kterou auto ujelo 1. okruh 2. string = doba za kterou auto ulejo 1. okruh + 2. okruh ja potrebuji cisty cas za ktery auto ujelo 2. okruh. -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Netbeans, maven, webservice klient
Dusan Zatkovsky napsal(a): Momentalne to riesim tak, ze pouzivam konstruktor ( URL, QName ) pre danu sluzbu, ale je to strasne primitivne a dost ma irituje fakt, ze musim rucne prechadzat vygenerovany kod a hladat v nom konstrukciu QName. Nejaky napad? WebServices jsem v Mavenu nedělal pomocí wizardu v NetBeans, ale pomocí CXF, takže stačilo udělat mvn generate-sources po té, co jsem do pom.xml přidal tohle: properties cxf.version2.2.4/cxf.version /properties dependencies dependency groupIdorg.apache.cxf/groupId artifactIdcxf-rt-frontend-jaxws/artifactId version${cxf.version}/version /dependency dependency groupIdorg.apache.cxf/groupId artifactIdcxf-rt-transports-http/artifactId version${cxf.version}/version /dependency dependency groupIdorg.apache.cxf/groupId artifactIdcxf-rt-transports-http-jetty/artifactId version${cxf.version}/version /dependency dependency groupIdorg.apache.cxf/groupId artifactIdcxf-common-utilities/artifactId version${cxf.version}/version /dependency /dependencies build plugins plugin groupIdorg.apache.cxf/groupId artifactIdcxf-codegen-plugin/artifactId version${cxf.version}/version executions execution idgenerate-sources/id configuration wsdlOptions wsdlOption wsdlhttp://cosi/kdesi?wsdl/wsdl /wsdlOption /wsdlOptions /configuration goals goalwsdl2java/goal /goals /execution /executions /plugin !-- nastaveni verze zdrojaku -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId configuration source6/source target6/target /configuration /plugin !-- zavislosti na JARech -- plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-dependency-plugin/artifactId configuration outputDirectory ${project.build.directory} /outputDirectory /configuration /plugin /plugins /build Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: spring-jdbc a transakcie
Dusan Zatkovsky napsal(a): 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? Vyráběl jsem onehdy tutoriál, je tady: http://kore.fi.muni.cz:5080/wiki/index.php/Spring_JDBC#Transakce Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: spring-jdbc a transakcie
Dusan Zatkovsky napsal(a): On Tuesday 16 of February 2010 11:44:22 Martin Kuba wrote: Vyráběl jsem onehdy tutoriál, je tady: http://kore.fi.muni.cz:5080/wiki/index.php/Spring_JDBC#Transakce No, tam je ale vsetok jdbc kod v jednej metode. Co ak je dana transakcia rozbita na mnoho volani roznych tried? V jdbc dane triedy zdielaju jednu connection, takze mozem v jednej metode spravit insert, v druhej delete, v tretej update a ak to prezije az do stvrtej, tak to commitnut? 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 -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: tomcat a upload suborov
Ondra Medek napsal(a): Administrator Tomcatu by mel moci vasemu servletu povolit primy pristup do (vsech, vybranych) souboru kdekoliv na filesystemu, viz http://tomcat.apache.org/tomcat-5.5-doc/security-manager-howto.html V security manageru problém není, jestli to dobře chápu. Jde o to, že soubory jsou mimo adresář webaplikace, takže tomcat je nemůže sám servírovat. Napadlo mě jedno řešení, a to ve WEB-INF/web.xml zaregistrovat ServletContextListener, tj. listener listener-classcz.moje.MujListener/listener-class /listener který při startu aplikace zkontroluje, jestli existuje link na adresář, a když ne, vytvoří ho. Kam má link ukazovat může brát z getServletContext().getInitParameter(adresar) a hodnota bude v META-INF/context.xml jako Parameter name=adresar value=/nekde override=true/ takže po redeploy bude link vždycky existovat. Makub 2010/2/9 Ivan Polak ivan.po...@f4s.sk: Zdravim konferenciu, chcel som si spravit jednoduchy publikacny system, kde pouzivatel zada clanok a vie pripojit subory ako prilohy. tieto subory ukladam do adresara, ktory je mimo aplikacie, tak aby undeploy a nasledny deploy novej verzie nemal dosah na tento adresar. administrator kde chcem v tomcat-e spustit tuto aplikaciu ma upozornil, ze ak chcem priamo pristupovat k tomuto adresaru bude vzdy po deploy novej verzie musiet vytvorit linku na tento adresar, ktoru vytvori v adresary webapp teda tam kde je subor index.jsp. Alebo druha moznost, musim vytvorit tzv. download servlet, ktory bude tieto subory nacitavat a odovzdavat na vystup. je este aj nejaka ina moznost, pripadne co by ste odporucali. dakujem Ivan -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Certifikaty cez web s iterakciou pouzivatela
Gabriel Gajdos napsal(a): Mal som v úmysle využiť najskôr usera na vloženie údajov, ktoré vie vložiť on (typicky meno a e-mail), s tými by potom pracovala CA za použitia klientsky generovaného kľúča... Je nejaká free implementácia CA na jave? Chcete se opravdu pustit do provozování CA ? To je náročné hlavně organizačně. Záleží na její plánované důvěryhodnosti, ale třeba CA pro bankovní použití musí být ve speciálním bunkru, do kterého vede turniket propouštějící jenom jednu osobu, a samotné zařízení CA musí mít autodestrukční systém. Aspoň tak mi to popisovali kdysi v MUZO,a.s., které provozovalo CA pro certifikaci v rámci platebního protokolu SET. Jestli okolo bunkru byl vodní příkop s krokodýly se zuby napuštěnými jedem už neříkali :-) Co se týká implementace CA, zdarma je http://www.openssl.org/ která je sice v Céčku, ale není problém ty programy volat pomocí System.exec(). O free implementaci v Javě nevím. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Certifikaty cez web s iterakciou pouzivatela
Gabriel Gajdos napsal(a): Zdravím konferu. Už niekto riešil „ako“ vytvárať certifikáty pre elektronický podpis? Nechcem návod typu „keytool –help“ ani odkaz na javadoc. Hľadám skôr nejaké hotové riešenie, ktoré by sa dalo adaptovať v Jave (alebo aspoň používať)... Pri generovaní certifikátov je potrebné riešiť niekoľko oblastí (vytvorenie kľúča, certtificate request, overenie autoritou, databázu autority...). Ide mi skrátka o to, aby to, čo má bežať u klienta, zostalo u klienta a to, čo má bežať na serveri, aj bežalo na serveri... Certifikáty je nejlepší generovat přímo v prohlížeči, protože na to jsou CA zařízené. A potom certifikát vyexportovat z prohlížeče jako *.p12 (PKCS12) soubor a načíst ho v Javě pomocí PKCS12 keystore. Udělátko v Javě, které by certifikát generovalo, by muselo nějak interagovat s CA, a každá CA má jiné rozhraní. Obvykle je postup takový, že uživatel navštíví Registrační Autoritu (RA), tam předloží doklady a dostane nějaký tajný kód. Pak přijde ke svému počítači, přes prohlížeč se připojí na Certifikační Autoritu (CA), zadá ten tajný kód od RA, načež CA způsobí vygenerování párů klíčů v prohlížeči, vytvoří certifikát a ten do prohlížeče vloží. Nahrazovat tenhle postup mi přijde zbytečné. Leda že byste měl v úmyslu napsat si kompletně i novou CA, ale to asi není tenhle případ. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Jak ziskat v HttpServlet.doGet() URL Rootoveho kontextu web aplikace
Oto Buchta napsal(a): Zdar vsichni, jsem asi potrefen sneznou slepotou skloubenou se sklenenou nemoci - muze mne nekdo prosim nakopnout, jak inteligentneji udelat: request.getRequestURL().substring(0,request.getRequestURL().indexOf(request.getRequestURI()))+request.getContextPath() ? request.getProtocol()+://+request.getLocalName()+:+request.getLocalPort()+request.getContextPath() za inteligentni nepovazuji. To líp nejde. Tedy, má to být req.getScheme()+://+req.getServerName()+:+req.getServerPort()+req.getContextPath() protože request.getServerName() vrací jméno HTTP serveru z HTTP hlavičky Host:, kdežto getLocalName() vrací jméno IP rozhraní. U name-based virtual hosts je to zásadní rozdíl. Důvod, proč to nejde, je nejspíš v tom, že v samotném HTTP protokolu to URL není. Přijde totiž něco jako GET /contextPath/neco HTTP/1.1 Host: www.moje.cz takže i Servlet API to musí skládat ze znalosti jestli to bylo SSL nebo ne, z hlavičky Host:, ze znalosti na jakém to bylo portu (ne vždy to trefí správně, u Tomcatu za Apachem a mod_proxy v režimu http proxy to bude blbě), a z URI mezi GET a identifikací verze HTTP. Mimochodem, jako pamětník jistě oceníš, že kdysi dávno znamenalo URI část URL, kdežto dneska je URI nadmnožina URL. Metoda getRequestURI() je toho němým důkazem. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: client-side java (bylo Re: Zkušenosti s Apache Wicket)
Update po víkendu - zatím celkem 397 prohlížečů, z toho 194 tj. 48.9% nemá javu 203 tj. 51.1% má javu a z těch co mají, tak 190 má 1.6.0 8 má 1.5.0 1 má 1.4.2 1 má 1.4.0 3 má 1.1.4 takže 49.9% všech prohlížečů má funkční Javu aspoň 1.5, což je mnohem víc, než jsem čekal. Makub Martin Kuba napsal(a): Jak říkal Winston Churchill, věřím jenom statistice, kterou jsem si zfalšoval sám :-) Tak jsem vzal soubory z http://www.realchat.com/blog/java-vs-flash/ trochu je upravil, a dělám si vlastní statistiku. Po 15 hodinách jsou výsledky tyto: 75 unikátních prohlížečů, z toho 40 tj. 53% nemá javu (nespustí se jim applet) 35 tj. 47% má javu (spustí se jim applet) z těch 35 1 má verzi 1.1 1 má verzi 1.5 33 má verzi 1.6 -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: client-side java (bylo Re: Zkušenosti s Apache Wicket)
jeeff napsal(a): Ahoj, ano, ako si pisal je to o tom sfalsovani vlastnej statistiky. Nenapisal si, na akej stranke to merias. Ak na nejakom svojom JAVA blogu je jasne, ze pomer javy v prehliadaci bude relativne vysoky kvoli tomu, ze tam chodia developeri. Urcite by ale ine vysledky boli na nejakom mainstream serveri kde chodia tety uradnicky teda nieco ako www.pluska.sk/soubiznis/ Není to java blog, je to na každé stránce http://meta.cesnet.cz/ což jsou stránky o superpočítačích a výpočetních clusterech, s javou nemají nic společného. Je pravděpodobné, že uživatelé přicházející na takové stránky nejsou statisticky úplný průměr, protože nejvíc jich přichází z Googlu po zadání dotazů na kerberos nebo matlab. Ale taky to nejsou žádní odborníci na javu. Bohužel nemám pod palcem obecnější server, na kterém bych to vyzkoušel. Jestli někdo máte, klidně poskytnu zdrojáky nebo přímo WAR s aplikací. Mimochodem, za stejné období mi Google Analytics hlásí podporu Javy u 82.45%. Jak jsem už psal, jeho způsob detekce pomocí volání JavaScriptové funkce navigator.javaEnabled() není spolehlivý. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: mapování servletu na url, která jso u podmnožinou mapovaných url jiného servletu
Tomas Vojtech napsal(a): Zamýšleno tím bylo to, že všechny požadavky budou obslouženy servletem cgw kromě těch s url /interconnect/session/*, které půjdou na servlet sessions. Problém ale je ten, že požadavky s url /interconnect/session/* jdou na oba. Nejdříve se zavolá sessions servlet a potom cgw. Na pořadí mapování servletů nezáleží... Zkouším to na tomcatu 6.0.20. To je proti Servlet API Specification 2.4. Zavolat se má jenom jeden. Cituji: Upon receipt of a client request, the Web container determines the Web application to which to forward it. The Web application selected must have the the longest context path that matches the start of the request URL. The matched part of the URL is the context path when mapping to servlets. The Web container next must locate the servlet to process the request using the path mapping procedure described below. The path used for mapping to a servlet is the request URL from the request object minus the context path and the path parameters. The URL path mapping rules below are used in order. The first successful match is used with no further matches attempted: 1. The container will try to find an exact match of the path of the request to the path of the servlet. A successful match selects the servlet. 2. The container will recursively try to match the longest path-prefix. This is done by stepping down the path tree a directory at a time, using the ’/’ character as a path separator. The longest match determines the servlet selected. 3. If the last segment in the URL path contains an extension (e.g. .jsp), the serv- let container will try to match a servlet that handles requests for the extension. An extension is defined as the part of the last segment after the last ’.’ char- acter. 4. If neither of the previous three rules result in a servlet match, the container will attempt to serve content appropriate for the resource requested. If a default servlet is defined for the application, it will be used. The container must use case-sensitive string comparisons for matching. SRV.11.2 Specification of Mappings In the Web application deployment descriptor, the following syntax is used to define mappings: • A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping. • A string beginning with a ‘*.’ prefix is used as an extension mapping. • A string containing only the ’/’ character indicates the default servlet of the application. In this case the servlet path is the request URI minus the con- text path and the path info is null. • All other strings are used for exact matches only. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
client-side java (bylo Re: Zkušenosti s Apa che Wicket)
Jak říkal Winston Churchill, věřím jenom statistice, kterou jsem si zfalšoval sám :-) Tak jsem vzal soubory z http://www.realchat.com/blog/java-vs-flash/ trochu je upravil, a dělám si vlastní statistiku. Po 15 hodinách jsou výsledky tyto: 75 unikátních prohlížečů, z toho 40 tj. 53% nemá javu (nespustí se jim applet) 35 tj. 47% má javu (spustí se jim applet) z těch 35 1 má verzi 1.1 1 má verzi 1.5 33 má verzi 1.6 celkový výpis těch s javou je tady: java.version=1.1.4 java.vendor=Microsoft Corp. os=x86 Windows NT 5.1 browser=Explorer 8 Windows java.version=1.5.0_07 java.vendor=Sun Microsystems Inc. os=i386 Linux 2.6.16.27-0.6-smp browser=Firefox 1.5 Linux java.version=1.6.0-oem java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3 Windows java.version=1.6.0_0 java.vendor=Sun Microsystems Inc. os=amd64 Linux 2.6.28-16-generic browser=Firefox 3 Linux java.version=1.6.0_0 java.vendor=Sun Microsystems Inc. os=amd64 Linux 2.6.31.5-0.1-desktop browser=Firefox 3.5 Linux java.version=1.6.0_0 java.vendor=Sun Microsystems Inc. os=i386 Linux 2.6.31.5-0.1-desktop browser=Firefox 3.5 Linux java.version=1.6.0_07 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3.5 Windows java.version=1.6.0_13 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Explorer 7 Windows java.version=1.6.0_14 java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3.5 Windows java.version=1.6.0_14 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Explorer 8 Windows java.version=1.6.0_14 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3 Windows java.version=1.6.0_14 java.vendor=Sun Microsystems Inc. os=x86 Windows 7 6.1 browser=Firefox 3.5 Windows java.version=1.6.0_15 java.vendor=Apple Inc. os=i386 Mac OS X 10.6.2 browser=Firefox 3.5 Mac java.version=1.6.0_15 java.vendor=Apple Inc. os=x86_64 Mac OS X 10.6.2 browser=Safari 4 Mac java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=amd64 Linux 2.6.29-gentoo-r5 browser=Konqueror 3.5 Linux java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3 Windows java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3.5 Windows java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3.5 Windows java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3.5 Windows java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3.5 Windows java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3.5 Windows java.version=1.6.0_15 java.vendor=Sun Microsystems Inc. os=x86 Windows 7 6.1 browser=Safari 4 Windows java.version=1.6.0_16 java.vendor=Sun Microsystems Inc. os=amd64 Linux 2.6.28-9-generic browser=Opera 9.8 Linux java.version=1.6.0_16 java.vendor=Sun Microsystems Inc. os=i386 Linux 2.6.31-14-generic browser=Firefox 3.5 Linux java.version=1.6.0_16 java.vendor=Sun Microsystems Inc. os=x86 Windows 7 6.1 browser=Explorer 8 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=i386 Linux 2.6.31-ARCH browser=Mozilla 1.9 Linux java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3.5 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows Vista 6.0 browser=Firefox 3.5 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Explorer 8 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Explorer 8 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3.5 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Firefox 3.5 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Mozilla 1.9 Windows java.version=1.6.0_17 java.vendor=Sun Microsystems Inc. os=x86 Windows XP 5.1 browser=Opera 9.8 Windows Pokud by někoho zajímala metodika - na všech stránkách mého webserveru je odkaz na JavaScript, který spouští applet, který přečte ze systémových properties verzi Javy a OS a zavolá zase JavaScript, který zavolá server s hlášením. První JavaScript posílá servlet, který si nastaví session, a pokud do 15 sekund nepřijde hlášení o verzi Javy, zaznamená že Java není nainstalovaná. Každý prohlížeč je započítán nejvýš jednou, při prvním pokusu se nastaví cookie s platností do roku 2070. Makub Martin Kuba napsal(a): Stare verzie Java - tam to moc nesledujem, ale MS java uz skoro neexistuje. Naposledy bola distribuovana s Win2000 , ale nie s XP, takze to uz nikto nema. Podla tejto statistiky http://www.statowl.com/java.php ma java 81,87% ale len 0,01
Re: Urceni MIME TYPE dokumentu nacteneho v poli bytu
Jaroslav Hurdes napsal(a): Zdravim, vsechny. Nemate nekdo zkusenost, jak urcit mime type dokumentu, ktery mam nacteny v poli bytu. Vsechny funkce pracuji se soubory. Nechci ukladat obsah pole do docasneho souboru jenom pro to abych urcil mime type. Nemate nekdo nejaky napad jak na to. Diky Jaroslav Hurdes Tenhle problém se tu před pár lety řešil, pokud si pamatuju dobře, řešení bylo jMimeMagic a to má metodu na zpracování pole bajtů: http://jmimemagic.sourceforge.net/apidocs/net/sf/jmimemagic/Magic.html#getMagicMatch%28byte[]%29 Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Zkušenosti s Apache Wicket
Jak tak čtu tuhle diskuzi, tak mi přijde, že se potvrzuje stará pravda o tom, že HTML bylo navrženo pro dokumenty, ne pro aplikace. Sice jsem to sám nezkoušel, ale pro skutečné aplikace s bohatým GUI na webu mi přijde lepší použít skutečné aplikační prostředí, totiž Flex. Pak aplikace běží ve Flash pluginu, který sice v polovině 90. let byl navržen pro animovanou vektorovou grafiku, ale postupem doby se z něj stala platforma velmi podobná Javě, s bajtkódem, garbage collection a silným typováním v ActionScriptu. Zatím hledám nějakou komplikovanou aplikaci, abych měl důvod si ho vyzkoušet naostro. Nicméně pokud bych takovou našel, dal bych rozhodně přednost Flexu před AJAXem, protože v JavaScriptu jsem si už své odprogramoval, a vždycky s ním byly jenom problémy. Makub Roman Zakutny napsal(a): Ahojte, tiez sa pokusim prispiet do tejto debaty, ale skor navrhom dalsich moznosti:) Prave teraz rozbiehame projekt a predbezny odhad na jeho implementaciu je cca. 2-3 roky. Klient preferuje kombinaciu Spring+Hibernate. Vzhladom na planovane bohatsie GUI a dlhodobejsi vyvoj stoji pred nami najzapeklitejsi problem - vybrat spravnu view technologiu. Kedze s Tapestry a Wicketom nemame ziadnu skusenost, je to mozno privelky risk, vrhnut sa na projekt takeho rangu. Po nejakej uvahe nam ostali 3 moznosti: -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Zkušenosti s Apache Wicket
Rastislav Rehak napsal(a): Ked uz uvazovat o Flex, preco nie Swing alebo Silverligth alebo JavaFX ? Swing ne, protože Javu má nainstalovanou minimum uživatelů. Sice podle statistik prohlížečů získávaných pomocí JavaScriptu má podporu Javy hodně lidí, ale podle studií ve skutečnosti jen asi 50% a z nich má drtivá většina starou špatnou Javu 1.1 od Microsoftu. Tudy cesta nevede. Silverlight pojede jenom na MS-Windowsech, ne ? A Silverlight, JavaFX a Adobe AIR jsou jiný typ platformy než Flex, mají za cíl poskytovat i lokální databázi. Pro všechny tři je potřeba instalace pluginu, který uživatelé nemají. Spousta uživatelů si nic nainstalovat neumí. A další spousta, třeba v bankách, na úřadech nebo v nemocnicích, ani nemůže, protože systémový správce jim to nedovolí. Flex potřebuje jenom Flash plugin, který má už nainstalovaný 99% uživatelů na všech operačních systémech, viz http://www.adobe.com/products/player_census/flashplayer/version_penetration.html Téhle statistice věřím, protože kvůli YouTube si Flash všichni udržují aktuální. Z hlediska webových technologií mi přijde velmi podnětný Facebook. On sám je napsaný v PHP a používá AJAX, na tom není nic zajímavého, ale převratná novinka je to, že je do něj možné dopisovat další aplikace. Technicky to funguje tak, že Facebook zobrazí stránku se svým logem, v té je IFRAME a v něm může být libovolná stránka na libovolném serveru. Ty aplikace tak neběží na serverech Facebooku, ale úplně jinde. A když se podíváte, jak jsou ty úspěšné aplikace dělané, tak je to u jednodušších AJAX, a u složitějších Flash (netvrdím že vyvinuté pomocí Flex, nedá se to poznat, ale je to pravděpodobné). Třeba takový test Who has the biggest brain? http://www.facebook.com/apps/application.php?id=8827826004 zobrazuje v reálném čase pohybující se předměty a měří rychlost lidské reakce (takže neměří velikost mozku ;-) ) a aby to zvládl, je dělaný ve Flashi. Koneckonců, nejsložitější uživatelské rozhraní mají hry, a když se podíváte třeba na http://www.superhry.cz/ tak všechny jsou psané ve Flashi. To podle mně dokazuje, že Flash je dnes ta správná platforma pro aplikace se složitým rozhraním. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Zkušenosti s Apache Wicket
Rastislav Rehak napsal(a): Par dalsich statistik, ktorym zase ja verim ( su z mojho serveru cez google analytics ) Java 97,5% , Flash 97,96% Pozor, Google Analytics zjišťuje údaj o Javě pomocí volání JavaScriptové funkce navigator.javaEnabled() která nespouští JVM (to trvá příliš dlouho), takže není moc vypovídající. Tahle statistika je k ničemu. Stare verzie Java - tam to moc nesledujem, ale MS java uz skoro neexistuje. Naposledy bola distribuovana s Win2000 , ale nie s XP, takze to uz nikto nema. Podla tejto statistiky http://www.statowl.com/java.php ma java 81,87% ale len 0,01% je other - co by mohla by 1.1 . Tahle statistika je velice zajímavá. Ale nepíšou tam, jak to zjistili. A když se podívám na statistiku Shockwave http://www.statowl.com/shockwave.php který nemá nainstalován skoro nikdo, tak je vidět, že graf ukazuje vzájemný poměr verzí u těch, kdo mají danou věc nainstalovanou. Neříká nic o tom, kolik je těch, co nemají danou věc nainstalovanou vůbec. Ano, věřím tomu, že mezi těmi, kdo mají Javu nainstalovanou, má 59% verzi 1.6. Ale nejspíš těch 100% z grafu bude jenom zlomek ze všech prohlížečů. Tohle je statistika získaná metodou, která mi přijde rozumná: http://www.realchat.com/blog/java-vs-flash/ a výsledek je - 56% má Javu, z toho polovina je stará MS Java. Takže řekněme 28% uživatelů má použitelnou Javu. vs WSRP, OpenSocial atd.Urcite by som to netahal do diskusie aky framework - rovnako dobre mozem urobit biggest brain ako applet alebo Ajax. Tak to silně nesouhlasím. Aplikace jako biggest brain se podle mě jako applet nebo AJAX udělat nedá. tedy dá se vyrobit, ale nebude spolehlivě fungovat. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Comparator na retezce s diakritikou
troni...@fit.cvut.cz napsal(a): Dobry den, kratke povidani o ceskem razeni: http://www.java.cz/article/ceskerazeni Díky za ten článek, je to pěkně a přehledně popsáno. Nestálo by za to nahlásit SUNům jako bug, že český Collator neřadí správně česky ? Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Zkušenosti s Apache Wicket
Ještě můžu doporučit Stripes http://www.stripesframework.org/ + žádná XML konfigurace + pěkná URL + lze se rychle naučit, jednoduché, účinné, dokumentace výborná + rychlý vývoj - není moc komponentové Makub Jan Jirout napsal(a): Ahoj, jeste muzu doporucit tapestry 5: + komponentovy pristup + zadne vnitrni tridy + zadna XML konfigurace + generuje validni HTML + pekne URL + opravdu rychly vyvoj + jednoduche na testovani - ze zacatku trochu slozitejsi -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Zkušenosti s Apache Wicket
Rodina Novotných napsal(a): Já bych řekl, že není vůbec komponentové ne? Respektive, takhle nějak si představuju jednoduchý request based framework. Trochu je. Můžu udělat komponentu tak, že si udělám JSP, kterou inkluduju do různých stránek, a v té JSP udělám stripes:useActionBean var=kompotenta1 beanclass=cz.neco.MojeKomponentaActionBean / a Stripes při zpracování tohohle tagu vytvoří instanci daného ActionBeanu, a provede binding dat z requestu na jeho settery, takže pokud v té JSP budu mít formulář nebo link, tak si je takováhle komponenta schopna zasílat data sama sobě. Aspoň si myslím, že by to takhle šlo použít, ve skutečnosti jsem to nepoužil. Dřív v Best Practises na http://www.stripesframework.org/display/stripes/Best+Practices doporučovali použít View Helper pattern, což je přesně to co jsem popsal, ale teď už tam doporučují pre-actions. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Na zelenej lúke
Roman Roman napsal(a): - Web framework: JSF (len preto, že je preferovaný SUNom a budí dojem dlhodobého štandardu; Tenhle argument mě vždycky dostane. Myslíte nějaký dlouhodobý standard, jako byly třeba JSP 1.0 se skriptlety, později zavržené a nahrazené JSP s custom tagy, později nahrazené v JSP 2.0 za Expression Language a fragmentové atributy, později v JSP 2.1 nahrazené za Unified Expression Language a JSF ? Nebo třeba EJB 1.0 Entity Beans, později zavržené a nahrazené v EJB 3.0 za JPA ? Nějak mi nepřipadá, že SUNem používaný 'design by committee' by produkoval něco stabilního nebo dobrého. Pouze kolem toho nadělají pořádný hype a použijí spoustu buzzwords. Nejlepší věci vznikají evolučně, jako třeba Struts nebo Hibernate, a SUN je nakonec se skřípěním zubů zahrne, v těchto případech Struts Bean Tags jako JSTL a Hibernate jako JPA. SUN v tom není sám, pamatuji dobu, kdy IBM zuřivě propagovalo svůj vlastní webserver Internet Connection Secure Server, aby pak tiše začalo používat opensourcový Apache, který byl prostě lepší. Prostě používat něco horšího jenom proto, že za tím stojí velká firma, místo něčeho lepšího, je IMHO krátkozraké, protože to lepší se časem prostě prosadí. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: automatické odesílání formulář e
tomasjur...@email.cz napsal(a): Dobrý den vytváříme jednoduchou web aplikaci ve které si přihlášený student může spustit test (např z Matematiky, ČJ, Přírodovedy). Jedná se o obyčejný HTML formulář, který po vyplnění a zaškrtání odpovědí student odešle na server k automatickému vyhodnocení. Čas testu musí být časově omezen. Po stanovené době se musí test automaticky ukončit a odeslat na server ke zpracování . Toto chování jsem nejprve implementoval pomocí JavaScriptu: 1. Po spuštění testu se na klientský PC uloží cookie obsahující čas ukončení testu. 2. V pravidelném časovém intervalu se kontroluje aktuální čas s časem uloženým v cookie. ( používá window.setInterval() ) 3. Formulář se odešle pokud je aktuální čas větší než čas v cookie. Řešení se ukázalo jako nespolehlivé. Existuje nějaká možnost jak toto chování řídit na straně serveru? Aplikace je napsaná v Jave na Spring 2.5 Na serveru se nedá ovládat, co dělá klient. Odeslat formulář z HTML klienta se dá jedině kliknutím na submit tlačítko nebo z JavaScriptu. Pokud má klient JavaScript vypnutý, není cesta, jak donutit formulář k odeslání. Ale dalo by se na serveru zkontrolovat, kolik času uběhlo mezi vygenerováním stránky s formulářem a přijmutím POST requestu s daty z formuláře. Ještě mne napadlo, že pomocí meta http-equiv=Refresh content=300;URL=http://neco/nekde; v head se dá donutit prohlížeč, aby po 300 sekundách načetl jinou stránku, ale ztratí se tím data vyplněná ve formuláři. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Comparator na retezce s diakritikou
http://java.sun.com/javase/6/docs/api/java/text/Collator.html Makub danisevsky napsal(a): Ahoj, resim trivialni problem, jak seradit podle abecedy list stringu. Respektive potrebuju komparator, ktery spravne porovna i znaky s diakritikou. Toto je mala ukazka problemu: -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Balikovanie java aplikacii na linuxe
Dusan Zatkovsky napsal(a): Co si o tomto celom myslite? No, pokud vím, existuje http://www.jpackage.org/ který už má javové balíčky pro linuxy vyrobené. OpenSuse, které používám na svém desktopu, obsahuje jaksi mírně upravené balíčky z jpackage. Nicméně, vyhýbám se těmto balíčkům jak čert kříži. Hrozně mi totiž vadí, že kdosi za mě rozhodl, jakou verzi toho kterého programu či knihovny potřebuju. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Balikovanie java aplikacii na linuxe
Dusan Zatkovsky napsal(a): Pokial si 100 aplikacii so sebou bundluje kniznice, musi sa revidovat 100 balikov. Take nieco udrzovat kazdy vzda a potom je v tom presne taky bordel, aky v tom je dnes. Kdybych používal 100 javových aplikací, asi by mi balíčkovací systém připadal jako dobrý nápad. Ale používám čtyři: Maven, Ant, IntelliJ a Tomcat. Tak mi množství knihoven jako palčivý problém nepřipadá. A taky mne napadlo - Java je od začátku propagovaná s write once, run everywhere. Kdyby javové aplikace začaly záviset na tom, jestli je přítomen balíčkovací systém pro Debian Linux, tahle krása by vzala za své. To už by mi schůdnější připadalo řešení, které má Ruby pro všechny operační systémy - balíčkovací systém Ruby Gems napsaný v Ruby. Ekvivalentem by tedy nebyly *.deb balíčky, ale zcela nový balíčkovací systém napsaný v Javě a fungující na Linuxu, Solarisu, MS-WIndows, Mac OS, ... Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Balikovanie java aplikacii na linuxe
Dusan Zatkovsky napsal(a): Aha. A ako to potom udrzuju a zaplatuju? To rucne chodia po forach a zistuju, ci jedna z tych kniznic v zipe nahodou nie je buggy, nema v sebe bezpecnostnu dieru, a potom to rucne zaplatuju? Dovolím si odvážit se názoru, že v Java světě na rozdíl od C/C++ jsou díky neexistenci ukazatelů do paměti a vrstvě virtuálního stroje vyloučeny buffer overflow útoky, a tak jsou bezpečnostní záplaty potřeba tak zřídka, že je není třeba řešit. Chvíli jsem Googloval a nenašel jsem příklad, že by nějaká knihovna napsaná v Javě měla novou verzi jenom kvůli bezpečnostní záplatě. Jediné co jsem našel bylo http://www.securitytracker.com/archives/underlyingos/175.html a tam jsou za poslední tři roky tři chyby, a to ještě všechno v aplikacích, ne v knihovnách. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: wizard form a upload suborov
Ivan Polak napsal(a): zdravim konferenciu, mam takyto problemik v JAVA web aplikacii - pouzivam Spring a Spring MVC, mam registracny formular typu wizard teda ma 9 krokov, v jednom kroku by mal pouzivatel uploadovat dokumenty (neobedzeny pocet). upload mam vyrieseny, otazka je kam davat obsah uploadovanych suborov, nakolko ukoncenie registracie sa nachadza az o niekolko krokov dalej. ak to budem davat na suborovy system (nejaky temp adresar), ak pouzivatel nedokonci registraciu musim tieto subory pravidelne nejakym sposobom vymazavat (ak registraciu dokonci, presuniem ich na spravne miesto). ak by som to ukladal do session, neviem ako by sa to spravalo, ak pouzivatel uploadne povedzme 10 suborov po 1 MB, teda len pre tieto informacie bude v session 10 MB dat. neriesil niekto z Vas podobny problem. dakujem! Napadlo mne - co dávat ty soubory na souborový systém, do session si dávat na ně odkazy a při ukončení session (zjistit se to dá pomocí HttpSessionListener) ty soubory smazat ? Tím by ani nezabíraly paměť, ani by nebylo nutné vytvářet nějaký speciální časovač pro mazání. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: wizard form a upload suborov
Ján Valkovič napsal(a): Zalezi na tom ako ma nastavenu expiraciu session. Ak uzivatel zatvori prehliadac, vypadne mu elektrika alebo zamrzne pocitac a session neexpiruje, tak subory ostanu visiet v tempe. Ak tych registracii nie je vela, tak by sa mohli mazat aj pri starte servera alebo mazanie riesit externe, skriptom ako task v OS. Session vyexpiruje vždy, i když uživatel zavře prohlížeč. Standardně vyexpiruje session po 30 minutách od posledního requestu, dá se to případně přenastavit. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Problemy s kodovanim cestiny
Petr Fejfar napsal(a): - spustim main() a parser nefunguje. Kdyz trasuju do Pattern.compile(), tak mi Eclipse ve stringu predavanem do compile() zobrazuje pred tim stupnem navic nejaky velky A s nabodenickem (uz si nepamatuju co to presne bylo), cili ten Maven tam prelozi buhvi co. To velké A s obráceným háčkem je typickým znakem toho, že znaky v UTF-8 kódování byly omylem načteny v nějakém 8-bitovém kódování, takže první bajt z dvojice byl mylně pochopen jako to A s háčkem. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Problemy s kodovanim cestiny
Petr Fejfar napsal(a): Pokud uz tam chcete dat nejaky exoticky znak, tak JEDINE pres \u Hmmm... no to by me ani ve snu nenapadlo, ze ve 21. stoleti existuje prostredi, kde je nutne znak, ktery lze napsat na klavesnici a korektne zobrazit na obrazovce, zejmena kdyz prostredi predstira, ze je Unicode awared, zadavat jak pred 30 lety escape sekvenci. (Ale asi melo, kdyz v .properties lze pres veskery pokrok v IT zadavat stale jen Latin-1...) Ono 21. století není tak daleko od 90. let 20. století, kdy byl v kódování na-ASCII znaků děsný bordel :-) Alespon v JLS pisou (http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.5), ze *Characters may be represented by escape sequences* :-OOO Ne ze musi... Ano, nemusí, ale když se to nedělá, bývají zhusta problémy s tím, že kompilátor použije špatné kódování, a programátoři pak píšou zoufalé emaily do konferencí :-) Kdo ten bordel dela? Maven? Nebo to vadi samotnemu jazyku? Těžko říci na dálku. Ale pokud jsou v .java souborech ne-ASCII znaky zapsány přímo, musí při kompilaci být správně zadáno kódování, ať už pomocí javac -encoding nebo implicitně přebráním z operačního systému. To může být občas problém, jak se v tomto případě ukazuje. Jazyku samotnému to nevadí, do .class souborů jdou jenom UTF-16 znaky. Ale je třeba si pohlídat kompilátor. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Problemy s kodovanim cestiny
Petr Fejfar napsal(a): 2. V parent POMu mam v properties nastaveno project.build.sourceEncodingUTF-8/project.build.sourceEncoding a kdyz Mavenem vytvorim .war s strcim ho Tomcatu na stejnem stroji, cestina je v haji, ovsem ne cela: lokalizovane texty, ktere taham z .XML jsou spravne, ale spatne jsou staticke texty z .HTML souboru. To bude nejspíš tím, že na modernějších Linuxech je default kódování nastaveno v operačním systému nastaveno na utf-8, kdežto na Windows je to windows-1250. A čeština se pak mrší tam, kde není specifikované kódování a použije se default. Mohlo by pomoci při startu dát java -Dfile.encoding=utf-8 3. Kdyz .war strcim Tomcatu na Linuxu, tak tam je cestina skoro spravne, tj. staticke texty i lokalizovane texty jsou spravne, ale problemy jsou s kodovanim dat zadavanych do editu ve formulari (napr. znak pro stupen) Data z formuláře jsou speciální případ, je nutné zajistit, aby HTTP hlavička Content-Type strány s formulářem obsahovala parametr charset=utf-8. Nevím jak se to nastavuje u Wicketu, ale nakonec se musí zavolat metoda HttpServletResponse.setContentType(). Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Problemy s kodovanim cestiny
Podlesak Kamil napsal(a): Pokud máte formulář kde se může vyskytnout něco jiného než ASCII, nikdy nepoužívejte GET. Nikdy je v podstatě správně :-) Ale pro přesnost - problém není v metodě GET, problém je i při metodě POST s parametry předanými v URL, protože se předávají stejným způsobem jako při GET. Pozor na to, ze pri pouziti metody GET to nektere verze jisteho browseru (schvalne, tipnete si ktere :-) ignoruji a data poslou vzdy v jedinem kodovani - podle verze UTF-8, LATIN-1 nebo 1250. Pozor, pojem verze zde neobsahuje jen cislo (5, 5.5, atc), ale i verzi OS a verzi nainstalovaneho kancelarskeho baliku od stejne firmy! Tohle jsem nevěděl, ale kromě problémů na straně browseru jsou ještě problémy na straně serveru, konkrétně TomCat od jisté verze (tuším 5.0), používá pro překódování parametrů z URL (při GET i POST) kódování iso-8859-1 dokud se v server.xml nenastaví Connector useBodyEncodingForURI=true, pak použije kódování specifikované voláním HttpServletRequest.setCharacterEncoding(). A autoři TomCatu to považují za úžasný rys, což mne už roky vytáčí. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Problemy s kodovanim cestiny
Petr Fejfar napsal(a): ale nakonec se musí zavolat metoda HttpServletResponse.setContentType(). Jestli myslis http-equiv=Content-Type, tak ten ma hodnotu UTF-8. Nastavujeme ho v abstraktnim predkovi vsech nasich stranek a primo v markupu: meta http-equiv=Content-Type content=text/html; charset=utf-8/ Nemyslím meta tag v HTML, myslím nastavení HTTP hlavičky Content-Type, ta má přednost před nastavením v meta tagu. takze by melo stacit zmenit jim to ve zdrojovce na application/x-www-form-urlencoded; charset=UTF-8 To nepomůže, servlet engine nečeká parametr charset, takže ho ignoruje. Neexistuje cesta, jak na straně HTTP klienta, tedy prohlížeče, specifikovat kódování znaků v HTTP requestu. Fakt to nejde. Odjakživa. Není to ani v žádném z RFC ohledně HTTP. Ty starší RFC o kódování cudně mlčí, ty novější doporučují použít utf-8, ale nedefinují místo, kde by se dalo specifikovat použité kodování. Pouze existuje de facto shoda mezi výrobci prohlížečů, že parametry z HTML formuláře jdou v kódování stránky s formulářem. Ale není to v žádné specifikaci. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: high performance middle vrstva
Ahoj, přijde mi, že zvyšovat výkon a zlepšovat škálovatelnost přidáním vrstvy je protimluv. Ono totiž obecně přidání vrstvy výkon vždycky snižuje, ale občas je to cena, kterou má smysl zaplatit, protože tím lze zlepšit udržovatelnost. V tomto konkrétním případě nic nemůže výkonově překonat přímou komunikaci JDBC ovladače s databázovým strojem. Komunikace po síti přes RMI přidá pouze další zpoždění potřebné na cestu sítových packetů mezi TomCatem a RMI serverem. Makub salmonel salmonel napsal(a): Dobrý deň, mám web aplikáciu v jave, je napísaná v Spring web flow, používa Hibernate pre perzistenciu objektov. K hibernate pristupujem vždy cez DAO. Momentálne aplikácia beží v tomcate. Potrebujem pridať medzi databázu a tomcat vrstvu, v ktorej by boli všetky dao objekty. Na servroch nám totiž beží niekoľko inštancií našej aplikácie(máme niekoľko klientov), tieto inštacie majú každá vlastnú databázu. Niekedy však potrebuje jedna inštacie liezť aj do databáze druhej inštancie. Preto chcem centralizovať prístup k databázam. Podstatné je, že potrebujem pridať vrstvu, v ktorej by boli len DAO objekty. Podľa toho, čo som pochopil mám na výber medzi EJB statless beanami bežiacimi v JBOSSe(prípadne inom aplikačnom servri), alebo si spraviť vlastnú aplikáciu, ktorá by obsahovala dao objekty a fungovala ako RMI server. Tomcat by bol RMI klient a vždy kontaktoval server. O pooling databázových pripojení by sa postaral hiberante. Aplikácia už je naprogramovaná, iné výhody EJB asi nevyužijem. Ide mi najmä o vysoký výkon a budúcu škálovatelnosť(s ktorou by nemal byť problém, ide o stateless objekty, takže môžem nasekať koľko chcem RMI servrov, ktoré nemusia medzi sebou komunikovať). Ďakujem -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: kodova stranka projektu na windows
Dusan Zatkovsky napsal(a): Dokazal by mi niekto objasnit, ako je to v jave na windows s defaultnym kodovanim a preco sa to chova takto podivne? Jedine, co ma napada je, ze getenv() vrati string v nejakej blbej kodovej stranke ( co by imho nemalo ) a potom sa to taha napriec projektom (*2). Pamatuju se, že na Windows se používalo jiné kódování češtiny přes GUI a jiné v příkazovém řádku. Možná je to tím, pokud se třeba proměnná nastavuje v .bat souboru. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: fronta pro zpracování dlouhých udílos ti ve webovém kontejneru
Tomáš Procházka napsal(a): Z a ktery z techto pripadu testuje situaci, o ktere pise Makub? Já právě psal, že jsem nenašel praktický případ, kdy bych dostal kladnou odpověď na neexistující email. Tedy praktickou existenci toho, co Martin kuba popsal. Bez pokusu s velkým množstvím adres se mi příklad takové konfigurace hledá špatně, ale zkuste třeba adresu neexistuj...@cz.ibm.com podle MX záznamu to přebírá SMTP server v Americe a podle hlavičky pokusného emailu se to pak přeposílá na mockrát. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: fronta pro zpracování dlouhých udílos ti ve webovém kontejneru
Tomáš Procházka napsal(a): Díky za reakci. Já si celou dobu myslel, že SMTP doručuje zprávy přímo do schránek. Nicméně zkoušel jsem pár domén, posílat na ně maily. A vždy jsem na neexistující email dostal informací, že schránka neexistuje. Zkoušel jsem u většiny i existující email a naopak mi to oznámilo doručení, email vždy přišel. Zkoušel jsem ibm.com, dvě české velké vysoké školy a několik nejznámějších free emailových serverů Zde je seznam testovaných domén: @ibm: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.1.1 hfjdjh...@ibm.com... User unknown Přes jaký SMTP server to odesíláte ? Já když udělám v kódu InternetAddress[] mailto = {new InternetAddress(sdhajsdha...@ibm.com,Neexistujici ucet,UTF-8)}; Transport trans = session.getTransport(smtp); trans.connect(relay.muni.cz, 25, null, null); try { trans.sendMessage(msg, mailto); } catch (SendFailedException sfex) { ... tak mi to žádnou vyjímku nevyhodí, a když navíc zaregistruji TransportListener tak to na něm dokonce zavolá messageDelivered(). A až potom dojde na moji adresu email s - The following addresses had permanent fatal errors - sdhajsdha...@ibm.com (reason: 550 5.1.1 sdhajsdha...@ibm.com... User unknown) Čili můj program to předá SMTP serveru na relay.muni.cz, ten to přijme, kontaktuje SMTP server v ibm.com, ten zprávu odmítne doručit a tak relay.muni.cz pošle e-mail na adresu odesílatele, že nemůže zprávu doručit. Ale z hlediska SMTP v JavaMailu to bylo odesláno. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: servlet a staticka metoda
Peter Stibrany napsal(a): Mam tu po ruke Servlet 2.4 specifikaciu. V casti SRV 2.2 Number of Instances sa pise: For a servlet not hosted in a distributed environment (the default), the servlet container ***must use only one instance per servlet declaration.*** Servlet declaration sa mysli deklaracia vo web.xml. Jen doplním, to znamená, že když ve web.xml bude deklarace dvou servletů se stejnou třídou, např. servlet servlet-names1/servlet-name servlet-classcz.neco.MujServlet/servlet-class init-param param-nameparametr/param-name param-valuehodnota1/param-value /init-param /servlet servlet servlet-names2/servlet-name servlet-classcz.neco.MujServlet/servlet-class init-param param-nameparametr/param-name param-valuehodnota2/param-value /init-param /servlet tak budou existovat dvě instance třídy MujServlet, a každá dostane jinou hodnotu inicializačního parametru parametr. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: fronta pro zpracování dlouhých udílos ti ve webovém kontejneru
Michal Bernhard napsal(a): A pak je tu, jak uz bylo zmineno klasicky JavaMail, ktery je soucasti jee kontejneru (jako jboss, glasfish..aj), ale ten byva oznacovan jako tezkopadny. Kazdopadne api pro sledovani dorucitelnosti mailu ma - viz javax.mail.event.TransportListener#messageNotDelivered(TransportEvent e) No, nějak se mi nechce věřit, že by to pro SMTP protokol mohlo fungovat. Před mnoha lety jsem řešil, jak detekovat nedoručitelné emaily přes JavaMail API, a zjistil jsem, že problém leží o úroveň níž. Neexistuje totiž jednotný způsob, jak SMTP server oznámí odesilateli, že e-mail nelze doručit. Obvykle SMTP server vygeneruje nový email na adresu MAIL FROM: z *obálky* e-mailu (nikoliv z hlavičky e-mailu) a do něj podle vkusu implementátora SMTP serveru nějak napíše, že email se nedá doručit. Ale nedá se to nějak automaticky parsovat, implementací SMTP serverů je příliš mnoho. Jako nejlepší řešení jsem tehdy použil to, že jsem do obálky a do hlavičky dal různé adresy odesílatele, a adresa v obálce měla v sobě zakódovanou identifikaci zprávy. Ovšem existují firmy/instituce, kde se příchozí e-maily meziukládají před doručením, čímž se ztratí obálka e-mailu, a případné nedoručení se pošle pak na adresu z From: hlavičky. Takže úspěšnost detekce byla něco kolem 98%. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Vytvoreni instance parametru, ktery je zadan v genericke tride
To nejde, protože pro generickou třídu existuje jen jeden soubor .class a parametrizace v době překladu už není k dispozici v době běhu. Vím o třech způsobech, jak tohle řešit: 1) nepoužívat pole, ale ListT, protože vytvořit instanci Listu je triviální 2) zapamatovat si třídu, kterou se parametrizuje, tj. ClassT_DB classDb; ClassT_WSDL classWsdl; //konstruktor public DbToWsdlConvertor(ClassT_DB classDb, ClassT_WSDL classWsdl) { this.classDb = classDb; this.classWsdl = classWsdl; } public T_WSDL[] dbTypeArrayToWsdlArray() { T_WSDL[] ret = ( T_WSDL[] ) Array.newInstance(classWsdl, tmp.length ) ; ... } 3) využít fintu odkoukanou z Hibernate spočívající v tom, že anonymní potomek vzniklý parametrizací generické třídy má ve svém .class zakompilováno, jakou třídou se parametrizovalo. Při použití se musí používat anonymní potomci generické třídy, tj. DbToWsdlConvertorTridaA,TridaB d2w = new DbToWsdlConvertorTridaA,TridaB() { }; a pak lze použít ClassT classDb = (ClassT) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; ClassT classWsdl = (ClassT) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1]; pro zjištění, čím bylo parametrizováno. Makub vkrejcirik napsal(a): Dobry den, chtel bych se zeptat jak by slo vytvorit instanci parametru genericke tridy. Mam nasledujici kod: public class DbToWsdlConvertorT_DB, T_WSDL { ... public T_WSDL[] dbTypeArrayToWsdlArray() { ... v teto metode potrebuji vytvorit instanci pole prvku typu T_WSDL. Pokousel jsem se na to jit takto: ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass(); Class classWsdl = (Class) type.getActualTypeArguments()[1]; T_WSDL[] ret = ( T_WSDL[] ) Array.newInstance(classWsdl, tmp.length ) ; Bohuzel dostavam java.lang.ClassCastException: java.lang.Class Mohl by mi nekdo poradit? Dekuji -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: JDBC PreparedStatement a navrat primary key
No, hodilo by se v dotazu uvést, o jakou databázi a jaký JDBC driver se jedná. Z toho returning id soudím, že je to nejnovější PostgreSQL, protože tohle je jeho specialitka, to není standardní SQL. Podle popisu metody Statement.executeBatch(), který říká Returns: an array of update counts containing one element for each command in the batch. soudím, že vygenerované id se takhle získávat nedají. Musí se v cyklu volat executeQuery(). Nebo, a to bude lepší, získat ty id předem pomocí volání select nextval('foo_id_seq') a nastavit je do dávky jako parametry, takže nebude nutné z dávky nic vracet. Makub Dusan Zatkovsky napsal(a): Ahoj. Potrebujem do primitivnej tabulky, ktora ma id INTEGER PRIMARY KEY, vlozit tisicky zaznamov a ziskat s5 priradene id. Snazim sa na to pouzit PreparedStatement ( insert into foo ( ... ) returning id as integer ) a jeho batch funkcionalitu. for ( ... ) { st.setString(..); st.addBatch(); } Neviem vsak tie vygenerovane id ziskat, pretoze: A.st.executeBatch(); // toto hodi SQL ex, ze nebol ocakavany result ResultSet rs = st.getGeneratedKeys(); B.ResultSet rs = st.executeQuery()// toto vrati len 1 zaznam Je vobec tato funkcionalita mozna pomocou batch, alebo musim v tom prvom cykle vzdy volat executeQuery() v kazdom cykle? Rad by som sa totiz vyhol zbytocnym RTT medzi klientom a databazou. Dik. -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: JDBC PreparedStatement a navrat primary key
Pssal hned v úvodním emailu, že getGeneratedKeys() mu hází vyjímku, a hlavně getGeneratedKeys() funguje jenom když DatabaseMetaData.supportsGetGeneratedKeys() vrací true, což bohužel není případ PostgreSQL. Makub Karel Zacek napsal(a): Ahoj Vygenerovana id by melo jit ziskat pomoci metody PreparedStatement.getGeneratedKeys(), ale asi to nepujde pro celou davku. karel Martin Kuba wrote: No, hodilo by se v dotazu uvést, o jakou databázi a jaký JDBC driver se jedná. Z toho returning id soudím, že je to nejnovější PostgreSQL, protože tohle je jeho specialitka, to není standardní SQL. Podle popisu metody Statement.executeBatch(), který říká Returns: an array of update counts containing one element for each command in the batch. soudím, že vygenerované id se takhle získávat nedají. Musí se v cyklu volat executeQuery(). Nebo, a to bude lepší, získat ty id předem pomocí volání select nextval('foo_id_seq') a nastavit je do dávky jako parametry, takže nebude nutné z dávky nic vracet. Makub Dusan Zatkovsky napsal(a): Ahoj. Potrebujem do primitivnej tabulky, ktora ma id INTEGER PRIMARY KEY, vlozit tisicky zaznamov a ziskat s5 priradene id. Snazim sa na to pouzit PreparedStatement ( insert into foo ( ... ) returning id as integer ) a jeho batch funkcionalitu. for ( ... ) { st.setString(..); st.addBatch(); } Neviem vsak tie vygenerovane id ziskat, pretoze: A.st.executeBatch();// toto hodi SQL ex, ze nebol ocakavany result ResultSet rs = st.getGeneratedKeys(); B.ResultSet rs = st.executeQuery()// toto vrati len 1 zaznam Je vobec tato funkcionalita mozna pomocou batch, alebo musim v tom prvom cykle vzdy volat executeQuery() v kazdom cykle? Rad by som sa totiz vyhol zbytocnym RTT medzi klientom a databazou. Dik. -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Property Change Support
Tomas Hubalek napsal(a): Vsechno chapu, jedine co mi neni jasne je, proc neexistuje ve standardu nejaky takovyto interface: public interface BeanWithBoundProperties { void addPropertyChangeListener(PropertyChangeListener listener); void removePropertyChangeListener(PropertyChangeListener listener); } Nevím, ale odhaduju, že je to proto, že se dá zaregistrovat listener buď pro změny všech properties, nebo jenom pro konkrétní. Takže není jasné, jestli by ten interface měl mít výše zmíněnou metodu, nebo metodu void addPropertyChangeListener(String propertyName, PropertyChangeListener listener); nebo obě. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: embedovatelny textovy editor
Stejskal Jindřich napsal(a): Dobry den, Nevite někdo a nejakem textovem editoru v jave ktery by sel jednoduse vlozit do GUI aplikace? aby umel highlighting atp. Co tohle ? http://www.pushing-pixels.org/?p=355 Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: getResourceAsStream() na aplikacnom serveri
Dusan Zatkovsky napsal(a): ConfigManager ma staticku metodu loadDefaults(), v ktorej vola: InputStream in = new Object().getResourceAsStream(/my/package/name/defaults.cfg); Takhle to určitě není, protože getResourceAsStream() je metoda třídy java.util.Class, a new Object() není výraz typu java.util.Class. Mělo by to být this.getClass().getResourceAsStream(/my/package/name/defaults.cfg); Zvlastne je, ze som nikde v domain1 nenasiel Common.jar, *ConfigManager*.* ani defaults.cfg, napriek tomu ten servlet ConfigManager vidi. Uploaduju sa na server iba skompilovane class-y? To by to vlastne vysvetlovalo. servletové aplikace mají zkompilované třídy v WEB-INF/classes a JARy v WEB-INF/lib, takže bych hledal WEB-INF/lib/Common.jar Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: getResourceAsStream() na aplikacnom serveri
Martin Kuba napsal(a): Dusan Zatkovsky napsal(a): ConfigManager ma staticku metodu loadDefaults(), v ktorej vola: InputStream in = new Object().getResourceAsStream(/my/package/name/defaults.cfg); Takhle to určitě není, protože getResourceAsStream() je metoda třídy java.util.Class, a new Object() není výraz typu java.util.Class. Mělo by to být this.getClass().getResourceAsStream(/my/package/name/defaults.cfg); Až po odeslání jsem si všiml, že je to statická metoda, takže to má být ConfigManager.class.getResourceAsStream(/my/package/name/defaults.cfg); Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Prenos velkych suborov do z klienta do webservice
Dusan Zatkovsky napsal(a): S tym servletom je to vyborny napad, akurat vobec netusim, ako to naprogramovat ( web je moja slaba stranka ) :) Tak tady to je :-) public class PutServlet extends HttpServlet { @Override protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletInputStream in = request.getInputStream(); byte[] buffer = new byte[4096]; BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(/tmp/soubor)); int n; while((n=in.read(buffer))!=-1) { out.write(buffer,0,n); } out.close(); in.close(); response.setStatus(HttpServletResponse.SC_OK); } } a namapovat ho ve web.xml třeba takto: servlet servlet-namePutServlet/servlet-name servlet-classcz.makub.PutServlet/servlet-class /servlet servlet-mapping servlet-namePutServlet/servlet-name url-pattern/put/*/url-pattern /servlet-mapping a klient může použít HTTP klienta z JDK: public class PutClient { public static void main(String[] args) throws IOException { HttpURLConnection uc = (HttpURLConnection) new URL(http://localhost:8080/putapp/put/file;).openConnection(); uc.setRequestMethod(PUT); uc.setDoOutput(true); BufferedInputStream in = new BufferedInputStream( new FileInputStream(veliky_soubor)); byte[] buffer = new byte[4096]; int n; OutputStream out = uc.getOutputStream(); while ((n = in.read(buffer)) != -1) { out.write(buffer, 0, n); } in.close(); out.close(); int responseCode = uc.getResponseCode(); System.out.println(responseCode = + responseCode); } } Samozřejmě čtení a ukládání souborů je třeba předělat na něco reálného. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: JavaMail + Sign + Encrypt
Emaily jsem úspěšně podepisoval přímo pomocí BouncyCastle, zdrojáky můžu v případě zájmu poslat. Proč potřebujete nad skákacím hradem ještě nějakou nadstavbu ? Makub Gabriel Gajdos napsal(a): Zdravim vsetkych... Potrebujem poradit s podpisovanim e-mailov s vyuzitim JavaMail. Funkcne example JavaMail mam uz za sebou... Nasiel som tool Javamail-crypto (http://javamail-crypto.sourceforge.net/), ktory pracuje s BouncyCastle S/MIME provider implementaciou (http://www.bouncycastle.org/latest_releases.html)... Podla prvých testov je to funkcne, ale zarazili ma dve veci: 1. posledna verzia tohto API je z roku 2006 (!) 2. nefunguje to s balikmi BouncyCastle pre JDK 1.6 - v podstate som to rozchodil iba z balikmi pre Java 1.4. Otázka: viete o nejakom lepsom/vhodnejsom free API pre podpisovanie a kryptovanie e-mailov? Vdaka za tipy... GG -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Prenos velkych suborov do z klienta do webservice
Dusan Zatkovsky napsal(a): Je este nejaka ina cesta, ako prenasat subory pomocou WS? Povodne som totiz navrhoval, ze klient si s ws iba pokeca a samotny prenos obstara tretia strana, pravdepodobne nejaky ssl socket, ktoremu da webservica echo o klientovi a nejake autorizacne data, ktorymi sa potom klient ohlasi. Problem je, ze je to pre mna dalsi overhead, spojeny mimo ineho aj s vecami s javou nesuvisiacimi ( povolit dalsie porty u klienta a tak podobne ). Posílání přes webservice mi přijde jako jeden extrém, a posílání přes speciální socket jako druhý extrém. Nestačilo by ten soubor poslat normálně přes HTTP ? A nemyslím jako přílohu formuláře, ale metodou PUT. Stačilo by si pak napsat jednoduchoučký servlet, který by četl tělo requestu a přímo ho zapisoval do souboru. A aby to bylo webservicové, přes SOAP by se klient mohl dozvědět to správné URL pro HTTP PUT. Pokud jde o *opravdu* velké soubory, tj. gigabajty až terabajty, pak narazíte na omezení TCP protokolu, a nezbude než použít stripovaný transfer (více souběžných TCP spojení). Pak doporučuji použít bbftp http://doc.in2p3.fr/bbftp/ případně gridftp. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: Inicializacia JDBC ovladaca
Ahoj ve spolek, ještě bych k tématu poznamenal, že používání DriverManager je od Javy 1.4 zastaralé, viz http://java.sun.com/javase/6/docs/api/java/sql/DriverManager.html The DataSource interface, new in the JDBC 2.0 API, provides another way to connect to a data source. The use of a DataSource object is the preferred means of connecting to a data source. Problém s DataSource trochu je, že v JRE není jeho implementace, tu má dodat výrobce JDBC ovladače. Jako optimální se mi nyní jeví použít pro přístup k databázi Spring, protože ten obsahuje různé implementace DataSource, zejména org.springframework.jdbc.datasource.DriverManagerDataSource, a tudíž můžu stejný kód používající DataSource použít jak v desktopové aplikaci bez connection poolingu, tak ve webové aplikaci s connection poolingem, jenom v konfiguraci měním implementaci DataSource. S použitím třídy SimpleJdbcTemplate je pak práce s JDBC opravdu příjemná, mohu doporučit. Vyráběl jsem k tomu onehdy návod, kdyby to někoho zajímalo, je tady: http://kore.fi.muni.cz:5080/wiki/index.php/Spring_JDBC Makub Zdenek Tronicek napsal(a): Dobry den, presne tak. Kdyz napisete do kodu new MyDriver();, tak svazete aplikaci s konkretnim driverem. Proto se ustalila konvence, ze driver ma staticky inicializator, ktery jej zaregistruje u DriverManager: public class MyDriver implements Driver { static { DriverManager.registerDriver(new MyDriver()); } ... } Pak staci natahnout tridu driveru do pameti. Bud pres Class.forName() nebo nastavenim property jdbc.drivers na prikazove radce. Z.T. -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 --
Re: Inicializacia JDBC ovladaca
Robert Novotny napsal(a): V nich nevidim rozdiel medzi Class.forName a new Driver(). Podla toho, co pisete, oba napevno zadrotuju ovladac do aplikacie. Rozdíl je v tom, že new Driver() se musí řešit za kompilace, kdežto Class.forname() až za běhu. Tj. Class.forName() může název třídy přečíst z konfiguračního souboru, takže ovladač není napevno zadrátovaný. Ono vůbec není potřeba použít ani Class.forName(), dá se to specifikovat při startu VM pomocí systémové property, tj. java -Djdbc.drivers=org.postgresql.Driver Ale v případě triviálních aplikací které se nebudou nikdy používat je to skutečně jedno. Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: teorie: prirazeni jako argument
Nazval bych to přiřazení je výraz, protože jsou jazyky, kde přiřazení je příkaz. Výraz (expression) má hodnotu, která se dá použít v dalším výrazu, kdežto příkaz (statement) hodnotu nemá a ve výrazu se použít nedá. Podobný případ jako přiřazení jsou prefixový a postfixový increment a decrement, tj. ++i i++ --i i--, taky jsou to vlastně příkazy změny hodnoty, které ale mají výslednou hodnotu a dají se použít jako výraz. Makub Pavel Kolesnikov napsal(a): Nevím, jak to pojmenovat, ale oporu pro toto chování najdete v Java Language Specification, sekce 15.26 Assignment Operators: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#5281 konkrétně ve větě At run time, the result of the assignment expression is the value of the variable after the assignment has occurred. Pavel 2009/3/30 David Vana david.v...@ness.com: Zdravim konferenci, Naledujici funkcnost neumim spravne pojmenovat - pracovne jsem si to nazval prirazeni jako argument. 01: int i = 5; 02: System.out.println(i = i + 5); Potreboval bych pojmenovat skutecnost, ze ono prirazeni (i = ...) funguje stejne, jako kdybych metode println() predal promennou i po vyhodnoceni i + 5 nasledovne: 01: int i = 5; 02: i = i + 5; 03: System.out.println(i); Navic bych potreboval nejaky oficialni (nejlepe online) zdroj, kde se da docist, ze to funguje a proc to tak funguje. PS: Nejde mi o princip pass-by-value. David -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: CZJUG Březen - Webové frameworky
Lukas Zapletal napsal(a): A taky se dají přímo Rails spustit v JRuby :-) :-) Navic jsem se tak dival na netu a vypada to, ze JRuby je stejne pomale jako Ruby - tj. neni to zadna slava. http://shootout.alioth.debian.org/u32/benchmark.php?test=alllang=javalang2=jrubybox=1 To já jsem našel měření, podle kterého je JRuby zhruba 5x rychlejší než Ruby 1.8 a zhruba stejně rychlé jako Ruby 1.9 http://antoniocangiano.com/2008/12/09/the-great-ruby-shootout-december-2008/ Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: CZJUG Březen - Webové frameworky
Lukas Zapletal napsal(a): Ano Wicket a Stripes se mi libi v posledni dobe nejvic :-D Wicket jsem nezkoušel, ale Stripes se mi taky líbí v poslední době nejvíc :-) Mimochodem, 4. března vyšla nová verze Stripes 1.5.1, a přidává poslední věc, která mi ve Stripes chyběla, totiž možnost mít v odkazech odkaz na fragment dokumentu, tj. na konci URL #neco. Teď už jenom čekám, kdy se 1.5.1 objeví v Maven 2 repository a mé štěstí bude dokonalé :-) Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: CZJUG Březen - Webové frameworky
Lukas Zapletal napsal(a): Existuje nejaky webovy framefork podobny *Rails ale kde se pise kod v ciste Jave (zadny Groovy a jiny jazyky)? Neco na rychle prototypy webovych aplikaci / mini-projekty. Nechtel bych se ucit novy jazyk, resp. aby se cely tym musel ucit novy jazyk. Nejaka doporuceni? Existuje Trails http://trailsframework.org/ A taky se dají přímo Rails spustit v JRuby :-) Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature
Re: WCMS
Aleš Ondrúš napsal(a): Dakujem vsetkym za prispevky. Nakoniec sme sa rozhodli pre OpenCMS, predsa len s PHP na ktorom je zalozeny Drupal mame malo skusenosti. Co sa tyka zdrojov informacii o OpenCMS tak vieme: * o dokumentacii na OpenCMS.org * o konferencii * o eBook: o Building Web Sites with OpenCMS o Managing And Customizing OpenCMS 6 Websites Java JSP Xml Content Management o OpenCms 7 Development Vedeli by ste prosim poradit este nejake dalsie zdroje? Pokusal som sa zistit ci Alkacon Software poskytuje platenu dokumentaciu ale zatial bez odozvy. :-( Při instalaci se vybírají moduly k nainstalování, a je možno zvolit instalaci dokumentace, případně se dají ty moduly s dokumentací stáhnout tady: http://www.opencms.org/en/download/documentation.html Kupodivu tahle dokumentace není na webu normálně přístupná, alespoň ne oficiálně, ale dají se najít její kopie, třeba tady: http://www.bng-galiza.org/opencms/opencms/alkacon-documentation/index.html Bohužel ta dokumentace je dost stručná, občas je to až frustrující, např. dokumentace k JSP taglib je naprosto hrozná: http://www.bng-galiza.org/opencms/opencms/alkacon-documentation/documentation_taglib/docu_tag_contentloop.html Trochu víc informací se dá najít na wiki: http://www.opencms-wiki.org/Main_Page Makub -- ~~ Supercomputing Center Brno Martin Kuba Institute of Computer Scienceemail: ma...@ics.muni.cz Masaryk University http://www.ics.muni.cz/~makub/ Botanicka 68a, 60200 Brno, CZ mobil: +420-603-533775 -- smime.p7s Description: S/MIME Cryptographic Signature