RMI NoSuchObjectException

View: New views
1 Messages — Rating Filter:   Alert me  

RMI NoSuchObjectException

by Marcelo Luiz Onhate :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Bom dia javeiros,

Estou fazendo alguns testes com RMI do Java, que é muito bom por sinal, mas estou tendo alguns problemas...
Se eu não conseguir expressar direito o erro me desculpe, mas é difícil explicar por e-mail...
São dois casos... um dá exceção e o outro não está rodando remotamente como deveria com o RMI...

Segue:

O ServerFactory é uma "fábrica" de Servidores de anagramas, bem simples... ele tem um método .createAnagramServer() que retorna uma interface Server com alguns métodos bem simples, com trabalho de Strings.

Obs.: Os testes para saber se rodou remoto ou não foi com System.out... quando chamo um método no cliente ele dá o out no servidor... ou não...

Este é o lado Servidor:
       
//Cria o factory de server
        ServerFactory asFac = new AnagramServerFactory();
        //Registra o RMI na porta
        Registry r = LocateRegistry.createRegistry(INI.PORT);

        //Deveria enviar o Factory para o RMI, para acesso remoto mas...

        /*Se fizer assim, bind do stub, dá pau quando vai rodar no cliente
           quando chamar o método createAnagramServer() da factory...
           pelo que li na internet é porque o GarbageColector  removeu
          a referência do Objeto no Servidor e não pode enviar ao Cliente, mas é improvável
          pois estou armazenando as referências em uma Fila...
          java.rmi.NoSuchObjectException: no such object in table*/
        Remote stub = UnicastRemoteObject.exportObject(asFac, INI.PORTA);
        r.bind("ServerFactory", stub);

StackTrace:
java.rmi.NoSuchObjectException: no such object in table
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)
        at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142)
        at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
        at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)

         //Envia o Factory para o RMI, mas os Servers enviados pelo factory não rodam remoto...
        /*Se fizer assim, bind da Factory direto, não dá pau, o factory roda no servidor mas os
         objetos enviados rodam no cliente... não é isso que eu quero,  eles teriam que rodar no Servidor,
          só o factory roda no Servidor...*/

        UnicastRemoteObject.exportObject(asFac,  INI.PORTA);
        r.bind("ServerFactory", asFac);
--------------------------------------------------------------------- To unsubscribe, e-mail: java-list-unsubscribe@... For additional commands, e-mail: java-list-help@...