Problemas ao rodar rmiregistry - Java RMI

Olá,
eu estou estudano RMI e quando fui executar o Server, para fazer o primeiro registro no rmiregistry ocorreu esse problema:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: livroRMI.ProductImpl_Stub

Alguém poderia me dizer o que pode ser isso, o código que estou seguindo é o do Core Java 2 - Recursos Avançados

Eric

Oi

Eric, seja bem vindo ao PJ :):):slight_smile:

Olhe, de uma lida no tutorial de RMI abaixo e tente fazer os exemplos dele…

http://www.portaljava.com/home/modules.php?name=Content&pa=list_pages_categories&cid=10

Bom, sobre o teu erro em especifico, se tu quiser, posta o código aí…

T+

Valeu pela dica do material! Mas eu segui o codigo do livro e tentei outro tutorial e deu o mesmo problema.
Abaixo o codigo do Servidor

[code]public class ProductServer {

public static void main(String[] args) {
	try {
		System.out.println("Construindo server implementation");
		
		ProductImpl p1 = new ProductImpl("Torradeira Torratudo");
		ProductImpl p2 = new ProductImpl("Microdas Estragatudo");
		
		System.out.println("Binding implemt to register");
		
		Naming.rebind("torradeira", p1);
		Naming.rebind("microndas", p2);
		
		System.out.println("Esperando invocação");
		
	} catch (Exception e) {
		System.out.println(e);			
	}
}

}[/code]

[quote=“jeveaux”]Oi

Eric, seja bem vindo ao PJ :):):slight_smile:

Olhe, de uma lida no tutorial de RMI abaixo e tente fazer os exemplos dele…

http://www.portaljava.com/home/modules.php?name=Content&pa=list_pages_categories&cid=10

Bom, sobre o teu erro em especifico, se tu quiser, posta o código aí…

T+[/quote]

Olás,

Estou tendo exatamente o mesmo problema!! =/
Porém, acredito que o problema não esteja no código, pois aqui o mesmo código roda em uma máquina e não roda em outra!!! =/

Estou tentando descobrir o que está acontecendo, mas está bem dificil!! =/

Abracos,
Hugo

Puttzzzz…

Eh triste quando voce passa um tempao tentando descobrir o erro e derrepente se depara com um erro tosco, ops, tosco naum, muito tosco!!!

Bem, nao sei se a solucao do meu problema vai ser a solucao para o seu, mas ai vai:

Quando eu rodava o rmiregistry eu rodava ele de um diretorio diferente do qual minhas classes se encontravam.

O que fiz foi a partir do diretorio que que minhas classes estavam invocar o rmiregistry, e dai o server funfou perfeitamente!!!

Outra coisa!!! Eu uso linux, e quando invoco o rmiregistry assim

[hugojuarez@defenrer]$ rmiregistri

Da pau nas classes que usam rmi!!!

Tenho que rodar ele passando o caminho completo:

[hugojuarez@defender]$ /opt/SunAppWebServer/jdk/bin/rmiregistry

dai funfa belezinha tambem!! =)

Um Abraco,
Hugo.

Ae pessoal!

O problema de vcs é que vcs não devem estar criando o arquivo Stub…

=]

O problema é que, quando você inicia o rmiregistry, as classes que serão reigstradas nele (Naming.bind) devem estar no classpath do rmiregistry. Como ele não tem opção de parametros de CLASSPATH, você tem que setar na variável CLASSPATH os jar’s da sua aplicação (Skeleton). Isso parecem ser tranquilo, mas quando você distribuir sua aplicação fique atento se liberou as versões corretas nas máquina clientes, servidor, e onde está o rmiregistry (Você pode usar uma máquina apenas para registrar o serviço, e outra onde o serviço roda efetivamente)!!

Para não ter que ficar setando a variável CLASSPATH, aconselho usar o rmid, que é o deamon do rmiregistry. Se você passar para o rmid o parâmetro:

-J-Djava.codebase=file:/<diretorio_das_classes_ou_jars>/

Ele irá procurar nesse diretório os jar’s. Ele também é interessante porque tem o comando -stop, onde você para o serviço com um comando, sem ter que dar control-c ou kill como no rmiregistry.

Espero ter ajudado…