Não consigo iniciar o Rmi

0 respostas
rrp1989

Estou fazendo um projeto pra facu e tomando por base o livro Use a cabeça! Java

No livro é indicado dois códigos nos quais eu fiz pequenas modificações para facilitar uma apresentação para o 1º semestre, mas nada que altere a estrutura como descrita no livro

O primeiro que cria uma interface remota. MinhaClasseRemota
package rmipackage;
import java.rmi.*;

public interface MinhaClasseRemota extends Remote {
	
	public String digaOi() throws RemoteException;
	
}

e o que cria a implementação. MinhaClasseRemotaImplementada

package rmipackage;
import java.rmi.*;
import java.rmi.server.*;

public class MinhaClasseRemotaImplementada extends UnicastRemoteObject implements MinhaClasseRemota{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public String digaOi(){
		return "Olá, mundo!";
	}
	public MinhaClasseRemotaImplementada() throws RemoteException{}
	
	public static void main(String[] args){
	
	try{
		MinhaClasseRemota x= new MinhaClasseRemotaImplementada();
		Naming.rebind("RemoteHello", x);
		
	}catch(Exception ex){
		ex.printStackTrace();
	}
}
}

o livro indica que deveria entao iniciar o rmic

dei o comando start rmic na pasta bin do jdk e depois

start rmic MinhaClasseRemota na mesma pasta

Depois iniciei o rmiregistry

start rmiregistry

este ficou aberto na minha área de trabalho, ao contrário do rmic que abriu e fechou rapidamente

No tutorial da Sun indica que o rmiregistry nao deveria ficar aberto conforme transcrevo abaixo


This command produces no output (when successful) and is typically run in the background.


Mesmo assim tentei executar o código de MinhaClasseRemotaImplementada no Eclipse e retornou o seguinte erro

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: rmipackage.MinhaClasseRemota
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)
	at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
	at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
	at java.rmi.Naming.rebind(Unknown Source)
	at rmipackage.MinhaClasseRemotaImplementada.main(MinhaClasseRemotaImplementada.java:20)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: rmipackage.MinhaClasseRemota
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
	at sun.rmi.transport.Transport$1.run(Transport.java:159)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: rmipackage.MinhaClasseRemota
	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:247)
	at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592)
	at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
	at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
	at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
	at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
	... 12 more

Por causa do erro do rmiregistry imagino que estou procedendo errado, entao algum poderia me indicar a maneira correta de fazer o código rodar? E como já escrevi um código para o cliente como evitar erros na hora de invocar o método remotamente???

Valeu :)

Editando : Apenas para acrescentar que instalei o plugin do RMI para o Eclipse e iniciei por ele o rmiregistry e~quando tento clicar em run as...

Não aparece a opção rmi aplication

E tinha esquecido de mencionar que o rmic não resultou em uma stub e uma skeleton

Criado 21 de novembro de 2008
Respostas 0
Participantes 1