Re: generika a '? extends Xxx'

2010-11-25 Thread Martin Kuba

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

2010-11-25 Thread Radovana Straube
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'

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

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

Pozn: předpokládejme   class C extends A

Proměnná typu DaoA 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'

2010-11-25 Thread Kamil Podlesak
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'

2010-11-25 Thread Tomáš Záluský

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'

2010-11-25 Thread Martin Beranek
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'

2010-11-25 Thread Martin Beranek
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

2010-11-25 Thread Tomáš Záluský

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'

2010-11-25 Thread Martin Kuba

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'

2010-11-25 Thread 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) );

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'

2010-11-25 Thread Josef Cacek
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'

2010-11-25 Thread 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: generika a '? extends Xxx'

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

Kamil Podlešák

2010/11/25 "Zdeněk Troníček" 

> 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

2010-11-25 Thread el.wondris

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

2010-11-25 Thread el.wondris

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

2010-11-25 Thread Tomas Vojtech
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

2010-11-25 Thread Vladislav Krejcirik

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

2010-11-25 Thread Vladislav Krejcirik

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

2010-11-25 Thread Petr Franta
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

2010-11-25 Thread Martin Kuba

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

2010-11-25 Thread Vladislav Krejcirik

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.