[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Erro compilando os .java gerados a partir da IDL



Olá Emílio,

Você não está fazendo nada errado. A minha sugestão é que não foi 
completa, pois ela só resolvia parte do problema. Agora que eu já 
estou "escaldado", fui fazer um teste antes de responder...

Depois de dizer "rmic ... -idl ...", delete os seguintes arquivos 
gerados pelo rmic:

   javax/ejb/RemoveException.idl
   javax/ejb/CreateException.idl
   java/lang/Throwable.idl
   java/lang/Exception.idl

Em seguida pegue os arquivos IDL que eu deixei no diretório 

   http://www.ime.usp.br/~reverbel/SMA/trabalhos/ep2/idl-exception-defs/

e copie-os para cima dos seguintes arquivos gerados pelo rmic:

   javax/ejb/RemoveEx.idl
   javax/ejb/CreateEx.idl
   java/lang/ThrowableEx.idl
   java/lang/Ex.idl

Feito isso, rode o idlj para traduzir os arquivos IDL (tanto os que eu 
forneci como os que o rmic gerou) para Java. Vão aparecer uns avisos 
como este:

> javax/ejb/EJBObject.idl (line 61):  WARNING: Identifier `primaryKey' 
> collides with a keyword; use an escaped identifier to ensure future 
> compatibility. 
>        readonly attribute ::java::lang::_Object primaryKey;
 
Ignore esses avisos e compile todos os arquivos Java gerados pelo idlj. 
(Não é preciso mais deletar arquivo nenhum.) Agora compilação deve ser 
bem sucedida.

O problema é que algumas das definições IDL geradas pelo rmic, quando
traduzidas para Java, estavam conflitando com classes já existentes nos
pacotes java.lang e javax.ejb. Eu me livrei dessas definições, que estavam 
nos arquivos RemoveException.idl, CreateException.idl, Throwable.idl e
Exception.idl. Aí eu tive que mexer nos arquivos IDL que usavam os
valuetypes cujas definições IDL foram deletadas. Eu substituí todas
as referências para esses valuetypes por uma referência genérica para 
ValueBase.

A regra geral é: livre-se de toda definição IDL que contiver uma diretiva
"#pragma ID" com uma seqüência de 32 dígitos hexadecimais. Essas diretivas
aparecem nas definições de valuetypes que correspondem a classes Java já 
existentes. Delete todo o arquivo IDL que contiver algo como

#pragma ID Throwable "RMI:java.lang.Throwable:F8678B4F4D2EB705:D5C635273977B8CB"

(Se você estivesse usando outra linguagem, esse arquivo IDL ajudaria a
gerar a classe Throwable nessa linguagem. Mas para quem está usando Java, 
um arquivo assim só atrapalha!)

Não delete os arquivos IDL que contiverem diretivas "#pragma ID" com
seqüências de 16 dígitos iguais a zero. Uma diretiva como

#pragma ID Cart "RMI:examples.Cart:0000000000000000"

aparece na definição (em IDL) de uma interface RMI chamada por clientes 
CORBA. Você precisa desse arquivo IDL para gerar um stub CORBA.

Bom trabalho,

Reverbel

On Sat, 1 Nov 2003, Emilio de Camargo Francesquini wrote:

> Olá..
> 
> Mais um capítulo na novela da compilar os .java gerados a partir da IDL...
> 
> São gerados diversos arquivos a partir da IDL no diretório java/lang. Acontece
> que um deles é um arquivo de nome Throwable.java que define uma classe Throwable
>  do package java.lang !! Não consigo compilar os arquivos deste diretório e
> consequentemente os outros arquivos. Recebo um erro mais estranho que o outro, o
> abaixo é um exemplo! 
> 
> symbol  : method getMessage ()
> location: class java.lang.ClassNotFoundException
>       synchronized (org.omg.CORBA.TypeCode.class)
>                                  ^
> Fatal Error: Unable to locate method getMessage
> 
> Que getMessage() é esse?
> 
> Parece que o javac começa a se perder com a localização das classes e chega uma
> hora que não sabe mais qual Throwable é qual (dado que ambos Throwable estão no
> mesmo package).
> 
> Professor, a idéia é que estes arquivos tivesses sido mesmo gerados? Estou
> fazendo algo muito errado...
> 
> Segue anexo o Throwable.idl gerado a partir das classes do meu EJB. Como ultimo
> recursi também tentei substituir o Throwable.idl que gerei por aquele que você
> tinha enviado, mas tive os mesmos erros.
> 
> [ ]'s
> 
> 
> /**
>  * java/lang/Throwable.idl
>  * Generated by rmic -idl. Do not edit
>  * Sábado, 1 de Novembro de 2003 15h16min53s BRST
>  */
> 
> #include "orb.idl"
> 
> #ifndef __java_lang_Throwable__
> #define __java_lang_Throwable__
> 
> 
> module java {
> module lang {
> 
>     custom valuetype Throwable {
>     };
> 
> #pragma ID Throwable "RMI:java.lang.Throwable:F8678B4F4D2EB705:D5C635273977B8CB"
> 
> };
> };
> 
> #endif
> 
> 
> 
> Quoting Francisco Reverbel <reverbel@ime.usp.br>:
> 
> > Bola fora minha, Emílio. :-( 
> > 
> > Vocês devem estar pensando eu estou maluco... E devo estar mesmo,
> > pois a receita que eu dei é para um outro problema, que não tem 
> > nada a ver com o EP de vocês.
> > 
> > Por favor ignorem a minha mensagem anterior. Já deletei aqueles
> > arquivos IDL que eu tinha mandado vocês usarem. Desculpas ao Emílio
> > e a quem quer que tenha perdido tempo com a sugestão errada.
> > 
> > Agora a sugestão (que espero esteja!) certa: deletem os arquivos
> > *Factory.java gerados pelo idlj. Esses arquivos contém definições
> > de value factories, que são desnecessárias no caso de RMI valuetypes.
> > Mais detalhes em classe...
> > 
> > Reverbel
> 
>