Vypadá to, že to hned tak neopraví :-(.

Can't fix this for AS 9.  May need a spec change at the OMG level.

Aby toho nebylo málo, tak jsem zjistil, že porovnání pomocí switch case funguje.
Porovnání pomocí if (== nebo equals) nefunguje.
To je magie, co? ;-)

// kod
if(one1==TestEnum.ONE){
   System.out.println("JSEM ve ONE - if");
}
switch(one1){
   case ONE:
     System.out.println("JSEM ve ONE - switch");
     System.out.println("one1.equals(TestEnum.ONE) == 
"+one1.equals(TestEnum.ONE));
     System.out.println("one1.ordinal()==TestEnum.ONE.ordinal() == 
"+(one1.ordinal()==TestEnum.ONE.ordinal()));
   break;
}

// vystup
JSEM ve ONE - switch
one1.equals(TestEnum.ONE) == false
one1.ordinal()==TestEnum.ONE.ordinal() == true


Závěr:
Pokud potřebujete přes RMI (EJB) používat výčtové typy, tak je porovnávejte buď 
v switch case nebo pomocí ordinal().

Fafi

Ondřej Fafejta KYBERIE wrote:
> Zapomněl jsem uvést, že to zkouším na glassfish.
> Vypadá to na chybu v glassfish.
>
> https://glassfish.dev.java.net/issues/show_bug.cgi?id=193
>
> Fafi
>
> Ondřej Fafejta KYBERIE wrote:
>   
>> Zdravím konferenci!
>>
>> Přišel jsem na neočekávané chování výčtových typů.
>>
>> Pokud získáte výčtový typ přes remote stateless bean, tak nefunguje equals.
>> Setkal jste se s tím někdo?
>> Nedělám něco špatně?
>>
>> /**
>> * Testovaci zdrojove kody
>> */
>> // soubor TestEnum.java
>> public enum TestEnum {
>>     ONE,TWO;
>> }
>>
>> // Stateless bean  (implementace) vraci toto:
>> public TestEnum getTestEnum(){
>>         return TestEnum.ONE;
>> }
>>
>> // Testovani
>> TestEnum one=TestEnum.ONE;
>> TestEnum one1=instance.getTestEnum();  // instance je instance Stateless
>> beanu pres lookup
>>        
>> System.out.println("one xxx one1 == "+one+" xxx "+one1);
>> System.out.println("one.equals(one1) == "+one.equals(one1));
>>
>> // vystup -- POROVNANI DVOU STEJNYCH VYCTOVYCH TYPU je FALSE
>> one xxx one1 == ONE xxx ONE
>> one.equals(one1) == false
>>
>>
>> Fafi
>>     

Odpovedet emailem