RMI/Problemas em carregar objeto servidor de métodos remotos

11 respostas
E

Pessoal! Tudo bem! Estou aplicando RMI em uma aplicação, porém estou com problemas para levantar o meu objeto servidor de métodos. É o seguinte, está dando um ClassNotFoundException pra minha classe stub. Mas a classe existe estando gerada de acordo no pacote. Olhem só a exception:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
   java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
   java.lang.ClassNotFoundException: br.com.furb.mvclego.monitor.servidor.MonitorServidorImpl_Stub
   at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:385)
   at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
   at sun.rmi.transport.Transport$1.run(Transport.java:153)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
   at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
   at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
   at java.lang.Thread.run(Thread.java:595)
   at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
   at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
   at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:343)
   at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
   at java.rmi.Naming.rebind(Naming.java:160)
   at br.com.furb.mvclego.monitor.servidor.MonitorServidorImpl.instanciarMonitorServidor(MonitorServidorImpl.java:43)
   at br.com.furb.mvclego.model.FrameMonitorServidor$1.actionPerformed(FrameMonitorServidor.java:93)
   at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
   at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
   at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
   at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
   at java.awt.Component.processMouseEvent(Component.java:5488)
   at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
   at java.awt.Component.processEvent(Component.java:5253)
   at java.awt.Container.processEvent(Container.java:1966)
   at java.awt.Component.dispatchEventImpl(Component.java:3955)
   at java.awt.Container.dispatchEventImpl(Container.java:2024)
   at java.awt.Component.dispatchEvent(Component.java:3803)
   at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
   at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
   at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
   at java.awt.Container.dispatchEventImpl(Container.java:2010)
   at java.awt.Window.dispatchEventImpl(Window.java:1766)
   at java.awt.Component.dispatchEvent(Component.java:3803)
   at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
   at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
   at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
   at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
   at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
   java.lang.ClassNotFoundException: br.com.furb.mvclego.monitor.servidor.MonitorServidorImpl_Stub
   at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
   at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:375)
   at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:240)
   at sun.rmi.transport.Transport$1.run(Transport.java:153)
   at java.security.AccessController.doPrivileged(Native Method)
   at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
   at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
   at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
   at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.ClassNotFoundException: br.com.furb.mvclego.monitor.servidor.MonitorServidorImpl_Stub
   at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
   at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Class.java:242)
   at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:430)
   at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
   at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
   at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
   at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
   at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1538)
   at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1460)
   at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1693)
   at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1299)
   at java.io.ObjectInputStream.readObject(ObjectInputStream.java:339)
   ... 9 more

O método que estou tendo problema é o seguinte em meu código: ( quando relaciono o endereço do servidor ao objeto servidor no registro rmi )

public void instanciarMonitorServidor( String ipServidor ) throws RemoteException, MalformedURLException, HibernateException
    {
        MonitorServidorImpl servidor = new MonitorServidorImpl(); // Classe // que implementa a interface remota e extends UnicastRemoteObject
           
        String endObjetoRemoto = "//" + ipServidor + "/MonitorEventos";
           
        Naming.rebind( endObjetoRemoto, servidor ); // Aqui ocorre a  //exception
           
        model = new HibernateModel(); // objeto utilitário de persistência
        model.configure(); // recupera informações de hibernate.cfg.xml e //configura a Fabrica de Sessões
    }

Pesso que me ajudem por favor! Muito obrigado!

Sds,

Pablo

11 Respostas

paulohbmetal

Te aconselho a dar uma olhada neste tutorial. :smiley:

A Paz!!

E

Cara! Legal esse Tutorial teu atualizado para o tiger. Passei a usar alguns métodos como no teu exemplo, porém a mensagem de exception é a mesma. Tá dando ClassNotFound. Estou usando o tiger e Executando aquele método static do exemplo de UnicastRemonteServer que retorna o Stub. Que pode ser? A exceção é a mesma daew de cima! Obrigado!
:stuck_out_tongue:

Daniel_Quirino_Olive

Você está distribuindo os Stubs junto com o hospedeiro do seu serviço RMI? Ou com o cliente?

E

Estou por enquanto tentando apenas registrar meu objeto servidor de métodos remotos no rmiregistry:

public void instanciarMonitorServidor( String ipServidor ) throws RemoteException, MalformedURLException, HibernateException, AlreadyBoundException, AccessException
    {
        model = new HibernateModel(); // objeto utilitário de persistência
        model.configure(); // recupera informações de hibernate.cfg.xml e configura a Fabrica de Sessões
        
        MonitorServidor stubServidor = ( MonitorServidor ) UnicastRemoteObject.exportObject( this ); // Exporta o Objeto Servidor e cria um Objeto Stub
            
        Registry registroRMI = LocateRegistry.getRegistry( ipServidor ); // Cria o registro no rmiregistry na porta 1099 
        
        registroRMI.bind( "MonitorEventos", stubServidor ); // registra Objeto servidor no rmiregistry, erro ocorre aqui

        // Naming.rebind( endObjetoRemoto, servidor );  não estou chamando mais por Naming e sim conforme acima
    }

Obrigado por analisarem! A espera de uma ajuda…

Att,

Pablo

rodrigo.achilles

Galera, estou com o mesmo problema, e é quando insiro a linha do Naming.
Tá sinistro!

E antes funcionava tudo direito, na mão, e agora nem executando está.

Estou usando o eclipse…

Abraços

paulohbmetal

einsamkeit:
Cara! Legal esse Tutorial teu atualizado para o tiger. Passei a usar alguns métodos como no teu exemplo, porém a mensagem de exception é a mesma. Tá dando ClassNotFound. Estou usando o tiger e Executando aquele método static do exemplo de UnicastRemonteServer que retorna o Stub. Que pode ser? A exceção é a mesma daew de cima! Obrigado!
:stuck_out_tongue:

Isso está com cara de ClassPath… Tenta colocar tudo no mesmo diretório…

A Paz!!

rodrigo.achilles

Não é que era isso mesmo!
Quando for colocar no servidor aí eu separo direitinho!
Sinistro, essa hein!?!?!

Valeu Paulo…

Abraços galera

rodrigo.achilles

Foi mal, mais deu erro.
Tentei colocar no mesmo diretório e aí pensei que havia funcionado, pura ilusão… tá dando erro:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: Server
Não sei mais aonde mexer. :frowning:

Abraços

paulohbmetal

rodrigo.achilles:
Foi mal, mais deu erro.
Tentei colocar no mesmo diretório e aí pensei que havia funcionado, pura ilusão… tá dando erro:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: Server
Não sei mais aonde mexer. :frowning:

Abraços

Posta seu código(ou parte) aí…

A Paz!!

rodrigo.achilles

Fala paulo, eu consegui
o problema era com o eclipse mesmo, rodei fora e consegui sem problemas, eu usei o Registry, e depois o Naming…
Ai, comecei a ficar nervoso pq dava o mesmo problema e coloquei até no mesmo diretório e nada.
Foi então que vi que tinha que configurar o RMI para ele enxergar a minha INTERFACE.
Fui em RUN, na aba RMI Properties, coloquei em “java.rmi.server.codebase” o local da minha interface. Isso no Eclipse, onde baixei o plugin na página: http://www.genady.net/

OK.
Valeu mesmo galera.
Abraçoss :slight_smile:

E

Hahahahahahaahahahahah!!! Deus… Que legal cara! Eu tava usando o mesmo plugin anteriormente… !!! E não havia me atentado para este detalhe! Que legal cara… poxaaaaaaaaaaaaa… Happy… i’m soo glad. Muito obrigado pela paciência pessoas… Vocês não imaginam o quanto sofri. auhahuahu… É isso aew. Estamos ae pra o que precisarem… Surgindo mais dúvidas vamos conversar! RMI é um pouco obscuro para a maioria dos programadores Java que conheço. Temos que almentar o conteudo na net em nossa lingua sobre isso! Valeu! Abraços! :stuck_out_tongue: 8)

Criado 13 de maio de 2005
Ultima resposta 17 de mai. de 2005
Respostas 11
Participantes 4