[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
- Subject: Re: Erro compilando os .java gerados a partir da IDL
- From: Francisco Reverbel <reverbel@xxxxxxxxxx>
- Date: Sat, 1 Nov 2003 19:45:13 -0200 (EDT)
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
>
>