[Pr�via] [Pr�xima] [Pr�via por assunto] [Pr�xima por assunto]
[�ndice cronol�gico]
[�ndice de assunto]
Re: Mais duvidas no ep1
- Subject: Re: Mais duvidas no ep1
- From: Emerson Luiz Navarro Tozette <emr@xxxxxxxxxxxxxxxx>
- Date: Fri, 10 Oct 2003 14:11:32 -0300
emilio@objective.com.br writes:
>
> O que parece que esta acontecendo � que voc� n�o est� implementando
> readExternal e writeExternal corretamente.
>
> No meu ep, eu declarei o meu ICEInvokerProxy como Serializable de forma que
> n�o precisei lidar com esses m�todos (os campos que n�o queria que fosse
> passados eu declarei como transient). De qualquer forma, o lance � o
> seguinte, se este m�todo (como vc implementou) est� na classe
> ICEInvokerProxy ent�o vc deveria fazer algo do tipo:
>
>
> public void writeExternal(final ObjectOutput out)
> throws IOException
> {
> out.writeObject (this.getAtributo1());
> out.writeObject (this.getAtributo2());
> ...
>
> }
>
> public void readExternal(final ObjectInput in)
> throws IOException, ClassNotFoundException
> {
> this.setAtributo1(in.readObject());
> this.setAtributo2(in.readObject());
> ...
> }
Mas foi exatamente isso que eu fiz (mas sem usar o this, que da
na mesma):
public void readExternal(final ObjectInput in)
throws IOException, ClassNotFoundException
{
// remoteInvoker eh o ICE Proxy
remoteInvoker = (InvokerPrx) in.readObject();
}
public void writeExternal(final ObjectOutput out)
throws IOException
{
out.writeObject (remoteInvoker);
}
>
> De uma olhada em:
> http://java.sun.com/j2se/1.4.1/docs/api/java/io/ObjectInputStream.html
> e
> http://java.sun.com/j2se/1.4.1/docs/api/java/io/ObjectOutputStream.html
>
> L� existem exemplos de como fazer classes Serializable ou Externalizable e
> explica o que eu expliquei muito sucintamente acima.
> S� uma dica, se voc� n�o tiver motivos muito fortes para usar
> Externalizable use Serializable. � bem mais simples.
Eu usei Externalizable porque segui o modelo do JRMPInvokerProxy,
e tambem porque o enunciado do ep diz que eh necessario implementar
os metodos writeExternal e readExternal.
De qualquer forma voce diz que basta fazer o ICEInvokerProxy
implementar Serializable que tudo funcionara automaticamente?
Vou tentar isso.
t+
>
> [ ]'s
>
> PS. O seu null pointer exception � devido ao fato de vc n�o ter atualizado
> os campos de this no seu m�todo readExternal.
>
> --
> Em�lio de Camargo Francesquini <emilio@objective.com.br>
>
> "Voc� deve ser a mudan�a que voc� deseja ver no mundo" M. Gandhi
>
>
>
>
>
> Emerson Luiz
> Navarro Tozette To:
> <emr@linux.ime.us cc: reverbel-sma@ime.usp.br
> p.br> Subject: Mais duvidas no ep1
>
> 09/10/2003 20:02
>
>
> Estou com duvidas com relacao aos metodos readExternal e writeExternal
> que devem ser implementados pelo ICEInvokerProxy. A principio pensei
> que as implementacoes abaixo resolvessem a questao:
>
>
> public void readExternal(final ObjectInput in)
> throws IOException, ClassNotFoundException
> {
> // remoteInvoker eh o ICE Proxy
> remoteInvoker = (InvokerPrx) in.readObject();
> }
>
> public void writeExternal(final ObjectOutput out)
> throws IOException
> {
> out.writeObject (remoteInvoker);
> }
>
> Mas acho que o codigo acima eh o
> responsavel por uma excecao que
> estou recebendo do lado do cliente. Criei um programa de testes
> que salva o ICE Proxy em um arquivo e depois o recupera e tenta
> executa-lo, mas este programa lanca a mesma excecao.
> Abaixo segue parte deste programa:
>
> package org.jboss.invocation.ice;
>
> // PROGRAMA DE TESTE:
> public class InvokerI extends _InvokerDisp
> {
> ........
>
> public void startService (String args[]) {
>
> ........
>
> // salvando o ice proxy em um arquivo:
> FileOutputStream fos = new FileOutputStream("c:\\p.txt");
> ObjectOutputStream oo = new ObjectOutputStream (fos);
> // invoker eh o ICE Proxy (nome da sua classe: InvokerI)
> oo.writeObject(invoker);
> oo.close();
>
> // lendo o ice proxy de um arquivo e tentando executa-lo:
> FileInputStream fis = new FileInputStream("c:\\p.txt");
> ObjectInputStream oi = new ObjectInputStream (fis);
> InvokerPrx inv = (InvokerPrx) oi.readObject();
> oi.close();
> // aqui lanca a excecao:
> System.out.println (">>" + inv.getServerHostName() );
> }
> }
>
> A excecao que esta sendo lancada eh:
>
> java.lang.NullPointerException
> at Ice.ObjectPrxHelper.__getDelegate(ObjectPrxHelper.java:689)
> at org.jboss.invocation.ice.InvokerPrxHelper.getServerHostName(InvokerPr
> xHelper.java:35)
> at org.jboss.invocation.ice.InvokerPrxHelper.getServerHostName(InvokerPr
> xHelper.java:24)
> at org.jboss.invocation.ice.InvokerI.startService(InvokerI.java:88)
> at org.jboss.invocation.ice.Server3.main(Server3.java:10)
>
>
>
>
>
--
Emerson Luiz Navarro Tozette <emr@linux.ime.usp.br>
Man will never penetrate outer space.
- Kehlog Albran, August 1942
Man will never penetrate outer space without a rocket.
- Kehlog Albran, August 1962