Problema com RMI

7 respostas
kemperacc

pessoal eu estou fazendo o exemplo do artigo Introdução á Computação Distribuida com RMI que existe aqui no forum: http://www.guj.com.br/java.tutorial.artigo.37.1.guj

Porém ao rodar o comando:

rmic MensageiroImpl

No tutorial diz que vai gerar 2 arquivos um stub e um skeleton, mas ele soh tah gerando o stub…

Ai, na hora de rodar o processo servidor, dah um erro no comando que registra o servico:

Naming.rebind("rmi://localhost:1099/MensageiroService", uu);

O erro que dah eh gigante, mas, lendo a saida, percebo que eh um CLASSNOTFOUNDEXCEPTION, ou seja, deve ser o arquivo skeleton que nao foi criado pelo rmic.

Algem sabe me dizer se houve alguma mudanca na estrutura do rmi?

Obrigado a todos

[]s

7 Respostas

rodrigopmatias

o skeleton nao e mais obrigatorio veja a documentação do Java post o exception aqui para observamos qual e o verdadeiro erro, ah se tiver usando linux cuidado com o rmic do gcc algumas versões dele nao são compativeis com JVM da SUN.

kemperacc

Como assim?

o rmic nao vem como o JDK?

fmeyer

cara, assim

para gerar o stub e skeleton vc tem que usar o parametro -v1.1 se vc usar o -vcompat vc gera tb mas os arquivos serao compativeis com a versao 1.2 do protocolo.

da uma testada ai

ou

eu acho que nao é esse o problema, entao posta seu trace/erro que fica mais facil descobrir

T

cara, estou com um pouco de pressa entao nao vou poder te ajudar mt… mas procura por codebase: vc tem q setar de onde o nameserv acha as suas classes para disponibilizar para o cliente

kemperacc

Segue o codigo que tenta iniciar o servico:

try {
			db.conecta();
			Usuario u = new Usuario();
			BairroManager bm = new BairroManager(db, u);
			Naming.rebind("rmi://localhost/BairroManager", bm);
		}catch (Exception ee){
			ee.printStackTrace();
		}

E o erro que ocorre:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: servidor.BairroManager_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 servidor.Server.main(Server.java:24)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: servidor.BairroManager_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: servidor.BairroManager_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
fmeyer

teu stub nao ta no classpath :wink:

eu segui os passos do tutorial e funcionou sem problemas.

kemperacc

Ele tah sim:

MEU CLASSPATH:

/opt/classes:/home/kemper/classes:/home/kemper/projetos:/opt/SUNWappserver/jdk/jre/lib:/home/kemper/programas/JAVA/sisGP/SisGPServer/target:/home/kemper/programas/JAVA/sisGP/SisGPPrototipo/target:/home/kemper/programas/JAVA/lib/JOmegaConnection.jar:/home/kemper/classes/mysql-connector-java-5.0.3-bin.jar

Ele estah dentro de /home/kemper/programas/JAVA/sisGP/SisGPServer/target sendo que nesta pasta ha um package chamado servidor, entao, no caso, a classe seria servidor.BairroManager e servidor.BairroManager_Stub.

Eu dei um java -verbose, e vi que ele esta carregando a classe sim, veja:

kemper@wolverine:~/programas/JAVA/sisGP$ cat log.txt | grep Bairro
[Loaded interfaces.BairroManager from file:/home/kemper/programas/JAVA/sisGP/SisGPPrototipo/target/]
[Loaded servidor.BairroManager from file:/home/kemper/programas/JAVA/sisGP/SisGPServer/target/]
[Loaded servidor.BairroManager_Stub from file:/home/kemper/programas/JAVA/sisGP/SisGPServer/target/]
[Loaded sisgp.Bairro from file:/home/kemper/programas/JAVA/sisGP/SisGPPrototipo/target/]

To pensando em trocar de JDK, eu to usando aquele SunWappserver

Criado 1 de dezembro de 2006
Ultima resposta 2 de dez. de 2006
Respostas 7
Participantes 4