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, ale neřeší to můj problém... private class A {} private class B extends A {} private abstract class DaoA { void doSomething(T param) {} } private class DaoB extends DaoA {} a pak potrebuji DaoA 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 s = new HashSet(); s.add("ZZZ"); //nejde přeložit Jde o to, že 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 s = new HashSet(); 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: downgrade aplikace z 6.0 na 5.0
Dobry den, ked je treba presvedcit zakaznika, aby upgradol Javu z 5.0 na 6.0, staci povedat, ze pre J2SE 5.0 dna 3.11.2009 bolo stopnute vydavanie updatov. Tu je linka: http://www.oracle.com/technetwork/java/javase/downloads/index-jdk5-jsp-142662.html Cize pripadne bezpecnostne diery nebudu moct byt zaplatane. Je sice este moznost si zaplatit Java for Business 1.5, ale upgrade na 6.0 vyjde lacnejsie. Ze bude aplikacia s novou Javou bezat rychlejsie nie vsetkych oslovi, ale pripadna bezpecnostna ich vacsinou rozhybe. Nam sa zatial podarilo tymto argumentom presvedcit vsetkych zakaznikov. Radovana Straube --- On Thu, 11/25/10, Martin Kuba wrote: > From: Martin Kuba > Subject: Re: downgrade aplikace z 6.0 na 5.0 > To: "Java" > Date: Thursday, November 25, 2010, 8:42 AM > Dne 24.11.2010 19:39, Tomáš > Záluský napsal(a): > > > > Dobrý den, > > > > máme webovou aplikaci napsanou v Javě 6.0 a musíme > ji nasadit na aplikační server, kde je pouze 5.0. Ukázalo > se, že aplikace nebude běžet nikde pod 6.0, takže jde o > to dostat zdrojáky do stavu, kdy bude projekt > zkompilovatelný a běhuschopný pod 5.0. Po vyřešení > odlišností, které vyvstaly po změně source a target na > maven-compiler-pluginu, ale zůstává potřeba odchytit > případy, kdy se volá nějaká metoda přidaná až od 6.0 > (např. Collections.newSetFromMap). > > > > Potřebuji tedy něco jako Retrotranslator, ale pouze > pro přechod 6.0 -> 5.0 a z něj pouze přepínač > -verifyref. Retrotranslator v současné podobě převede > class soubory na max. 1.4, což mi přijde jako kanón na > vrabce. Nechce se mi zatahovat do projektu backportovaný > bytekód něčeho, co můžeme mít přímo z originálního > překladače 5.0 (např. enumů), byť jsou s touto > knihovnou dle různých zdrojů dobré zkušenosti. > > > > Protože ostatní projekty máme v 6.0 a 5.0 už nikdo > nemá, chtěl jsem se vyhnout instalaci 5.0, ale vychází > mi, že to stejně nepůjde. I kdybychom chtěli použít > Retrotranslator jen pro ověření referencí, stejně bude > vyžadovat cestu k jarům 5.0. A navíc se na chyby á la > volání Collections.newSetFromMap přijde až při Maven > buildu a Eclipse bude vesele hlásit, že je projekt > zkompilovatelný. Takže to vidím na instalaci 5.0 a > nastavení příslušného JDK pro tento konkrétní > projekt. Nebo víte o nějaké jednodušší cestě? > > Nebude jednodušší upgradovat na aplikačním serveru na > Javu 6.0 ? > Přece jenom 5.0 je dost stará, a Java je pečlivě > udržovaná jako zpětně > kompatibilní, takže upgrade na 6.0 by měl běh > aplikačního serveru jen vylepšit. > > Kdysi před deseti lety, kdy oficiálně podporovaná java > byla jenom na Windows a Solarisu, > jsem aplikační server označený jako požadující javu > 1.3 provozoval > na Javě 1.4 na Linuxu a na výkon a stabilitu to mělo jen > pozitivní efekt :-) > > > Makub > -- > ~~ > Supercomputing Center Brno > Martin Kuba > Institute of Computer Science email: 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'
Krátká verze = praktická rada: Konstrukci ? extends (a super) se snažte vždy vyhnout. Zvlášť u proměnných. Pro správné pochopení je potřeba plně rozumět kovarianci a kontravanrianci (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29), nicméně i tak to nemusí být intuitivně vidět. Pokusím se to popsat zjednodušeně "prakticky": Pozn: předpokládejme class C extends A Proměnná typu DaoA totiž _neznamená_ "instance DaoA u které si můži za T dostadit jakéhokoliv potomka A co právě mám". To by bylo DaoA Proměnná typu DaoA ve skutečnosti znamená, že do ní můžu přiřadit nějakou instanci DaoA, která má nějaký konkrétní parametr - může se jednat o DaoA, DaoA nebo DaoA, kompilátor to neví (? extends A mu explicitně řeklo, že to nesmí vědět). Když pak vidí dao.doSometning(new B()) tak se podívá na ten parametr a vidí, že tím parametrem je nějaký typ který nezná. Může to být A, může to být B, může to být ale klidně C! Pokud by tam dovolil předat new B(), tak v tom posledním případě klidně může dojít ke ClassCastException. Kamil Podlešák 2010/11/25 Martin Beranek : > Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to > můj problém... > > private class A {} > > private class B extends A {} > > private abstract class DaoA { > void doSomething(T param) {} > } > > private class DaoB extends DaoA {} > > a pak potrebuji > > DaoA dao = new DaoB(); > dao.doSomething(new B()); // nejde přeložit > > > > Dne 25.11.2010 08:06, Martin Beranek napsal(a): >> Zdravím, >> >> proč toto nefunguje? >> >> private class B {} >> >> private class Test { >> void doSomething(T param) {} >> } >> >> a nekde potrebuji >> >> Test t = new Test(); >> t.doSomething(new B()); // toto nelze zkompilovat >> >> diky >> > > -- > Martin Beránek > ICZ a.s., Pobočka Brno > Londýnské náměstí 2/856, 639 00 Brno > Tel.: +420 222 272 323 > Tel.: +420 222 272 111 > Fax.: +420 222 272 122 > mailto:martin.bera...@i.cz > http://www.i.cz > >
Re: generika a '? extends Xxx'
Ještě intuitivnější vysvětlení je s kolekcemi: List l; if (externifunkce()) { l = new ArrayList(); } else { l = new ArrayList(); l.add(new C()); } //a toto nesmi byt povoleno, protoze l muze byt List ! l.add( new B() ); Kamil Podlešák
Re: generika a '? extends Xxx'
Podle mne je problém v DaoA dao = new DaoB(); - tam dochází ke zbytečnému zobecnění, protože pro takto nadeklarovanou referenci dao už překladač neví, že na ní smí volat jen doSomething(B). Podle názvů tříd to na mě působí dojmem, že A je nějaký předek doménových objektů a chcete vytvořit generické DAO - viz odkazy na první stránce http://www.google.cz/search?q=generic+dao Tomáš Záluský ...with Ultimate flying is so easy... http://www.frisbee.czhttp://www.peaceegg.net __ > Od: "Martin Beranek" > Komu: konference@java.cz > Datum: 25.11.2010 08:26 > Předmět: Re: generika a '? extends Xxx' > >Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to >můj problém... > >private class A {} > >private class B extends A {} > >private abstract class DaoA { >void doSomething(T param) {} >} > >private class DaoB extends DaoA {} > >a pak potrebuji > >DaoA dao = new DaoB(); >dao.doSomething(new B()); // nejde přeložit > > > >Dne 25.11.2010 08:06, Martin Beranek napsal(a): >> Zdravím, >> >> proč toto nefunguje? >> >> private class B {} >> >> private class Test { >> void doSomething(T param) {} >> } >> >> a nekde potrebuji >> >> Test t = new Test(); >> t.doSomething(new B()); // toto nelze zkompilovat >> >> diky >> > >-- >Martin Beránek >ICZ a.s., Pobočka Brno >Londýnské náměstí 2/856, 639 00 Brno >Tel.: +420 222 272 323 >Tel.: +420 222 272 111 >Fax.: +420 222 272 122 >mailto:martin.bera...@i.cz >http://www.i.cz > > >
Re: generika a '? extends Xxx'
diky, pekne vysvetleni (obe dve), je mi jasne proc to nejde Dne 25.11.2010 10:00, Kamil Podlesak napsal(a): > > Ještě intuitivnější vysvětlení je s kolekcemi: > > List l; > if (externifunkce()) { >l = new ArrayList(); > } else { >l = new ArrayList(); > l.add(new C()); > } > //a toto nesmi byt povoleno, protoze l muze byt List ! > l.add( new B() ); > > Kamil Podlešák -- Martin Beránek smime.p7s Description: S/MIME Cryptographic Signature
Re: generika a '? extends Xxx'
Dne 25.11.2010 10:08, Tomáš Záluský napsal(a): > > Podle mne je problém v DaoA dao = new DaoB(); - tam dochází ke > zbytečnému zobecnění, protože pro takto nadeklarovanou referenci dao už > překladač neví, že na ní smí volat jen doSomething(B). > Podle názvů tříd to na mě působí dojmem, že A je nějaký předek doménových > objektů a chcete vytvořit generické DAO - viz odkazy na první stránce > http://www.google.cz/search?q=generic+dao _jenom pro vysvetleni_: genericka dao pouzivam uz dlouho, s tim problem nemam, ale: u jednoho abstraktniho dao potrebuji udelat implementaci ktera bude volani vsech metod delegovat na ty spravne potomky. Tedy neco jako: new DelegatingGenericDAO().create(new MyEntity()) tak aby se ve vysledku zavolala metoda create na MyEntityDAO -- Martin Beránek smime.p7s Description: S/MIME Cryptographic Signature
Re: downgrade aplikace z 6.0 na 5.0
Dobrý den, děkuji všem za odpovědi. Petr Procházka> animal sniffer https://animal-sniffer.dev.java.net/signature-checker.html jsem nenašel. Zajímavý nápad, co všechno se dá udělat, když člověk nechce instalovat druhé JDK :-). Zvážil bych ho, kdybych to měl nasadit v nějakém automatizovaném buildovacím prostředí, ale na lokále to neřeší problém odhalení chyby Eclipsem. Nicméně díky. Roman Pichlík> souhlasím, jsem si vědom, že instalace JDK5 neřeší reflection a mohou se projevit bugy opravené v JDK v pozdějších verzích nebo updatech. Martin Kuba, Radovana Straube> upgrade na 6.0 by byl ideální, ale v podmínkách klienta se to zdá v tuto chvíli nereálné. AS je Oracle 10.1.3, v němž je defaultní JRE 5.0. Licenci na 11 s JRE 6.0 klient nemá, takže upgrade je v nedohlednu a pokoušet se upgradnout v aktuálním AS pouze Javu si žádný správce u něj netroufne (i z právních důvodů). Myslím, že o bezpečnostních rizicích klient ví a toto není jediný případ, kdy přežívá na nepodporovaném softwaru, ale je to prostě problém velké korporace, kde vše dlouho trvá a je kolem toho spousta byrokracie. Takže to vidím na instalaci JDK 5.0. Hezký den! Tomáš Záluský ...with Ultimate flying is so easy... http://www.frisbee.czhttp://www.peaceegg.net __ > Od: "Radovana Straube" > Komu: Java > Datum: 25.11.2010 09:46 > Předmět: Re: downgrade aplikace z 6.0 na 5.0 > >Dobry den, > >ked je treba presvedcit zakaznika, aby upgradol Javu z 5.0 na 6.0, staci >povedat, ze pre J2SE 5.0 dna 3.11.2009 bolo stopnute vydavanie updatov. Tu je >linka: >http://www.oracle.com/technetwork/java/javase/downloads/index-jdk5-jsp-142662.html > >Cize pripadne bezpecnostne diery nebudu moct byt zaplatane. Je sice este >moznost si zaplatit Java for Business 1.5, ale upgrade na 6.0 vyjde lacnejsie. > >Ze bude aplikacia s novou Javou bezat rychlejsie nie vsetkych oslovi, ale >pripadna bezpecnostna ich vacsinou rozhybe. Nam sa zatial podarilo tymto >argumentom presvedcit vsetkych zakaznikov. > >Radovana Straube > > >--- On Thu, 11/25/10, Martin Kuba wrote: > >> From: Martin Kuba >> Subject: Re: downgrade aplikace z 6.0 na 5.0 >> To: "Java" >> Date: Thursday, November 25, 2010, 8:42 AM >> Dne 24.11.2010 19:39, Tomáš >> Záluský napsal(a): >> > >> > Dobrý den, >> > >> > máme webovou aplikaci napsanou v Javě 6.0 a musíme >> ji nasadit na aplikační server, kde je pouze 5.0. Ukázalo >> se, že aplikace nebude běžet nikde pod 6.0, takže jde o >> to dostat zdrojáky do stavu, kdy bude projekt >> zkompilovatelný a běhuschopný pod 5.0. Po vyřešení >> odlišností, které vyvstaly po změně source a target na >> maven-compiler-pluginu, ale zůstává potřeba odchytit >> případy, kdy se volá nějaká metoda přidaná až od 6.0 >> (např. Collections.newSetFromMap). >> > >> > Potřebuji tedy něco jako Retrotranslator, ale pouze >> pro přechod 6.0 -> 5.0 a z něj pouze přepínač >> -verifyref. Retrotranslator v současné podobě převede >> class soubory na max. 1.4, což mi přijde jako kanón na >> vrabce. Nechce se mi zatahovat do projektu backportovaný >> bytekód něčeho, co můžeme mít přímo z originálního >> překladače 5.0 (např. enumů), byť jsou s touto >> knihovnou dle různých zdrojů dobré zkušenosti. >> > >> > Protože ostatní projekty máme v 6.0 a 5.0 už nikdo >> nemá, chtěl jsem se vyhnout instalaci 5.0, ale vychází >> mi, že to stejně nepůjde. I kdybychom chtěli použít >> Retrotranslator jen pro ověření referencí, stejně bude >> vyžadovat cestu k jarům 5.0. A navíc se na chyby á la >> volání Collections.newSetFromMap přijde až při Maven >> buildu a Eclipse bude vesele hlásit, že je projekt >> zkompilovatelný. Takže to vidím na instalaci 5.0 a >> nastavení příslušného JDK pro tento konkrétní >> projekt. Nebo víte o nějaké jednodušší cestě? >> >> Nebude jednodušší upgradovat na aplikačním serveru na >> Javu 6.0 ? >> Přece jenom 5.0 je dost stará, a Java je pečlivě >> udržovaná jako zpětně >> kompatibilní, takže upgrade na 6.0 by měl běh >> aplikačního serveru jen vylepšit. >> >> Kdysi před deseti lety, kdy oficiálně podporovaná java >> byla jenom na Windows a Solarisu, >> jsem aplikační server označený jako požadující javu >> 1.3 provozoval >> na Javě 1.4 na Linuxu a na výkon a stabilitu to mělo jen >> pozitivní efekt :-) >> >> >> Makub >> -- >> ~~ >> Supercomputing Center Brno >> Martin Kuba >> Institute of Computer Science email: 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 l; if (externifunkce()) { l = new ArrayList(); } else { l = new ArrayList(); Tohle taky přes kompilátor neprojde: l.add(new C()); } //a toto nesmi byt povoleno, protoze l muze byt List ! l.add( new B() ); Musí se to udělat takto: List l; if (externifunkce()) { l = new ArrayList(); } else { ArrayList lc = new ArrayList(); 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 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: generika a '? extends Xxx'
Ahoj, 2010/11/25 Martin Kuba : > Ještě si s tím hraju, a zjistil jsem, že do > List l; > nejde přidat vůbec nic, a to dokonce ani > l.add( l.get(0) ); Tohle sice ne, ale null (jako jediná hodnota) se přidat dá :-) > Je to sice logické, ale naprosto protiintuitivní. > Makub -- pepa cacek
Re: generika a '? extends Xxx'
Konstrukci ? extends Neco bych nezavrhoval, protoze je užitečná pro parametry metody. Př.: metoda, která provede nějakou operaci se všemi prvky seznamu, v němž je každý prvek typu Number. void perform(List p) { for (Number n : p) { process(n); } } void process(Number n) { ... } Takto lze metodu perform volat s parametrem typu List i List. Z. -- Zdenek Tronicek FIT CTU in Prague Kamil Podlesak napsal(a): > Krátká verze = praktická rada: Konstrukci ? extends (a super) se > snažte vždy vyhnout. Zvlášť u proměnných. > > Pro správné pochopení je potřeba plně rozumět kovarianci a > kontravanrianci > (http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29), > nicméně i tak to nemusí být intuitivně vidět. Pokusím se to popsat > zjednodušeně "prakticky": > > Pozn: předpokládejme class C extends A > > Proměnná typu DaoA totiž _neznamená_ "instance DaoA u > které si můži za T dostadit jakéhokoliv potomka A co právě mám". To by > bylo DaoA > > Proměnná typu DaoA ve skutečnosti znamená, že do ní můžu > přiřadit nějakou instanci DaoA, která má nějaký konkrétní parametr - > může se jednat o DaoA, DaoA nebo DaoA, kompilátor to neví (? > extends A mu explicitně řeklo, že to nesmí vědět). > Když pak vidí dao.doSometning(new B()) tak se podívá na ten parametr a > vidí, že tím parametrem je nějaký typ který nezná. Může to být A, může > to být B, může to být ale klidně C! Pokud by tam dovolil předat new > B(), tak v tom posledním případě klidně může dojít ke > ClassCastException. > > Kamil Podlešák > > 2010/11/25 Martin Beranek : >> Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to >> můj problém... >> >> private class A {} >> >> private class B extends A {} >> >> private abstract class DaoA { >> void doSomething(T param) {} >> } >> >> private class DaoB extends DaoA {} >> >> a pak potrebuji >> >> DaoA dao = new DaoB(); >> dao.doSomething(new B()); // nejde přeložit >> >> >> >> Dne 25.11.2010 08:06, Martin Beranek napsal(a): >>> Zdravím, >>> >>> proč toto nefunguje? >>> >>> private class B {} >>> >>> private class Test { >>> void doSomething(T param) {} >>> } >>> >>> a nekde potrebuji >>> >>> Test t = new Test(); >>> t.doSomething(new B()); // toto nelze zkompilovat >>> >>> diky >>> >> >> -- >> Martin Beránek >> ICZ a.s., Pobočka Brno >> Londýnské náměstí 2/856, 639 00 Brno >> Tel.: +420 222 272 323 >> Tel.: +420 222 272 111 >> Fax.: +420 222 272 122 >> mailto:martin.bera...@i.cz >> http://www.i.cz >> >> >
Re: generika a '? extends Xxx'
Ano, to je asi nejčastější použití. To že takto deklarovaný parametr je efektivně read-only (pokud tedy mluvíme o kolekcích) je dobré, dokonce žádoucí. U proměnných situace trochu jiná... Kamil Podlešák 2010/11/25 "Zdeněk Troníček" > Konstrukci ? extends Neco bych nezavrhoval, protoze je užitečná pro > parametry metody. > Př.: metoda, která provede nějakou operaci se všemi prvky seznamu, v němž > je každý prvek typu Number. > > void perform(List p) { >for (Number n : p) { >process(n); >} > } > > void process(Number n) { ... } > > Takto lze metodu perform volat s parametrem typu List i > List. > > Z. > -- > Zdenek Tronicek > FIT CTU in Prague > > > Kamil Podlesak napsal(a): > > Krátká verze = praktická rada: Konstrukci ? extends (a super) se > > snažte vždy vyhnout. Zvlášť u proměnných. > > > > Pro správné pochopení je potřeba plně rozumět kovarianci a > > kontravanrianci > > ( > http://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29 > ), > > nicméně i tak to nemusí být intuitivně vidět. Pokusím se to popsat > > zjednodušeně "prakticky": > > > > Pozn: předpokládejme class C extends A > > > > Proměnná typu DaoA totiž _neznamená_ "instance DaoA u > > které si můži za T dostadit jakéhokoliv potomka A co právě mám". To by > > bylo DaoA > > > > Proměnná typu DaoA ve skutečnosti znamená, že do ní můžu > > přiřadit nějakou instanci DaoA, která má nějaký konkrétní parametr - > > může se jednat o DaoA, DaoA nebo DaoA, kompilátor to neví (? > > extends A mu explicitně řeklo, že to nesmí vědět). > > Když pak vidí dao.doSometning(new B()) tak se podívá na ten parametr a > > vidí, že tím parametrem je nějaký typ který nezná. Může to být A, může > > to být B, může to být ale klidně C! Pokud by tam dovolil předat new > > B(), tak v tom posledním případě klidně může dojít ke > > ClassCastException. > > > > Kamil Podlešák > > > > 2010/11/25 Martin Beranek : > >> Tak si trošku odpovím sám. Je třeba použít T, ale neřeší to > >> můj problém... > >> > >> private class A {} > >> > >> private class B extends A {} > >> > >> private abstract class DaoA { > >>void doSomething(T param) {} > >> } > >> > >> private class DaoB extends DaoA {} > >> > >> a pak potrebuji > >> > >> DaoA dao = new DaoB(); > >> dao.doSomething(new B()); // nejde přeložit > >> > >> > >> > >> Dne 25.11.2010 08:06, Martin Beranek napsal(a): > >>> Zdravím, > >>> > >>> proč toto nefunguje? > >>> > >>> private class B {} > >>> > >>> private class Test { > >>> void doSomething(T param) {} > >>> } > >>> > >>> a nekde potrebuji > >>> > >>> Test t = new Test(); > >>> t.doSomething(new B()); // toto nelze zkompilovat > >>> > >>> diky > >>> > >> > >> -- > >> Martin Beránek > >> ICZ a.s., Pobočka Brno > >> Londýnské náměstí 2/856, 639 00 Brno > >> Tel.: +420 222 272 323 > >> Tel.: +420 222 272 111 > >> Fax.: +420 222 272 122 > >> mailto:martin.bera...@i.cz > >> http://www.i.cz > >> > >> > > > >
Re: autentikace
Uz jsem to vyresil. Dodatecne se omlouvam za nepresne informace. Lukas __ > Od: "Lukas lzap Zapletal" > Komu: konference@java.cz > Datum: 24.11.2010 17:43 > Předmět: Re: autentikace > > >Velmi nestastne zvoleny topic. "Autentikace..." ale v cem? Jakou API mate na >mysli? Moznosti integrace Javy a LDAPu je velmi mnoho! > >ps - spravne cesky je to autentizace / autorizace (nevim ktery mate na >mysli) > >- >Later, > Lukas >-- >View this message in context: >http://konference-java-cz.958153.n3.nabble.com/autentikace-tp1960412p1961718.html >Sent from the konference java.cz mailing list archive at Nabble.com. >
Spring security 3.0.x + LDAP pres SSL za pouziti certifikatu
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. Predem dik, Lukas
Re: Spring security 3.0.x + LDAP pres SSL za pouziti certifikatu
Pokud se jedná o serverový certifikát tak ten se pomocí keytool dá do JKS keystoru a cesta k tomu jks se nastaví jako truststoreFile u konektoru tomcata v server.xml. On 11/25/2010 05:58 PM, el.wond...@centrum.cz wrote: 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. Predem dik, Lukas
Thread safe webova aplikace, Tomcat 7
Dobry den, mam webovou aplikaci, ktera spousti nova vlakna, ve kterych bezi dlouho trvajici vypocty. Kdyz aplikaci odinstaluju z Tomcatu (verze 7) mam v logu nasledujici hlasku. Myslim si, ze aplikace korektne neukonci vsechna bezici vlakna behem odinstalace. Nesetkal jste se nekdo s timto problemem? Diky za kazdou pripominku. 26.11.2010 7:55:29 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE: The web application [/clan-cr-20101126] registered the JBDC driver [org.h2.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver h as been forcibly unregistered. 26.11.2010 7:55:29 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: The web application [/clan-cr-20101126] appears to have started a thread named [30332...@qtp-25564797-0] but has failed to stop it. This is very likely to create a memory leak. 26.11.2010 7:55:29 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE: The web application [/clan-cr-20101126] appears to have started a thread named [14807...@qtp-25564797-1 - Acceptor0 selectchannelconnec...@localhost:] but has failed to stop it. This is ve ry likely to create a memory leak. 26.11.2010 7:55:29 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE: The web application [/clan-cr-20101126] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.threadlo...@1d56bbe]) and a value of type [org.apache.ibatis.executor.E rrorContext] (value [ ### The error may exist in package/core/CoreMapper.java (best guess) ### The error occurred while processing mapper_resultMap[ConstraintMap]]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. 26.11.2010 7:55:29 org.apache.catalina.loader.WebappClassLoader clearThreadLocalMap SEVERE: The web application [/clan-cr-20101126] created a ThreadLocal with key of type [java.lang.ThreadLocal] (value [java.lang.threadlo...@94a28e]) and a value of type [org.apache.cxf.bus.CXFBusImpl ] (value [org.apache.cxf.bus.cxfbusi...@287811]) but failed to remove it when the web application was stopped. This is very likely to create a memory leak. 26.11.2010 7:55:29 org.apache.catalina.startup.HostConfig checkResources INFO: Undeploying context [/clan-cr-20101126] - Vladislav Krejcirik (http://www.vkrejcirik.info) -- View this message in context: http://konference-java-cz.958153.n3.nabble.com/Thread-safe-webova-aplikace-Tomcat-7-tp1971440p1971440.html Sent from the konference java.cz mailing list archive at Nabble.com.
Spring 3 a zmena urovne logovani
Dobry den, mam webovou aplikaci vyuzivajici framework Spring ve verzi 3.0.2. Potreboval bych zmenit uroven logovani Springu, protoze mi neustale vypisuje debug hlasky ze vyzvedtl databazove pripojeni z poolu. Uz jsem zkousel vlozit log4j.properties do WEB-INF/classes, kde jsem mel: log4j.logger.org.springframework=WARN Bohuzel to nepomohlo. Diky za kazdej tip. -- View this message in context: http://konference-java-cz.958153.n3.nabble.com/Spring-3-a-zmena-urovne-logovani-tp1971422p1971422.html Sent from the konference java.cz mailing list archive at Nabble.com.
Re: Spring 3 a zmena urovne logovani
Pokusil bych se spustit aplikaci s parametrem -Dlog4j.debug, pak by mělo být vidět odkud se natahuje konfigurace log4j Petr Dne 26. listopadu 2010 8:21 Vladislav Krejcirik napsal(a): > > Dobry den, mam webovou aplikaci vyuzivajici framework Spring ve verzi > 3.0.2. > Potreboval bych zmenit uroven logovani Springu, protoze mi neustale > vypisuje > debug hlasky ze vyzvedtl databazove pripojeni z poolu. Uz jsem zkousel > vlozit log4j.properties do WEB-INF/classes, kde jsem mel: > > log4j.logger.org.springframework=WARN > > Bohuzel to nepomohlo. Diky za kazdej tip. > -- > View this message in context: > http://konference-java-cz.958153.n3.nabble.com/Spring-3-a-zmena-urovne-logovani-tp1971422p1971422.html > Sent from the konference java.cz mailing list archive at Nabble.com. >
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: Spring 3 a zmena urovne logovani
Dobry den, diky za odezvu. Jak myslite spustit? Je to webova aplikace, kterou nasazuji na aplikacni server. - Vladislav Krejcirik (http://www.vkrejcirik.info) -- View this message in context: http://konference-java-cz.958153.n3.nabble.com/Spring-3-a-zmena-urovne-logovani-tp1971422p1971502.html Sent from the konference java.cz mailing list archive at Nabble.com.