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

Re: Mais duvidas no ep1



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