RMI com Java 6 necessita stubs e skeletons

4 respostas
L

Pessoal,

Com o Java 6 ainda é necessário criar os stubs e skeletons para aplicações RMI usando ‘rmic’ ?

4 Respostas

Rodrigo_Vieira_Pinto

Não mais! :slight_smile:

L

Blz, obrigado pela resposta Rodrigo.

Aproveitando o tópico, tem como eu colocar o rmiregistry para rodar como um serviço do windows para que este seja inicializado sempre que a máquina for ligada?

L

Srs,

Estou fazendo um teste com o RMI e criei um projeto chamado RMITeste. Neste projeto criei 3 pacotes:

client -> contem o cliente do RMI
server -> contem o serverRMI e as implementações das interfaces de ‘services’
services -> as interfaces que serão disponibilizadas

Nesse projeto quando adiciono uma nova interface, implemento e a disponibilizo tudo corre ok sem precisar rodar rmic (gerar stubs e skeletons)

Agora tenho meu segundo caso que é o seguinte:

Criei 3 projetos sendo eles

RMIServices -> as interfaces que serão disponibilizadas
RMIServer -> contem o serverRMI e as implementações das interfaces de ‘services’
RMIClient -> contem o cliente do RMI

Exatamente como no projeto ‘unico’ mas agora tudo separado sendo que do projeto RMIServices eu gero um ‘rmi-services.jar’ e incluo esse jar tanto no RMIServer quanto no RMIClient.
Subo o rmiregistry e quando vou rodar o Server recebo o erro abaixo:

No caso ‘AcessoBD3’ é a minha interface que esta dentro do jar ‘rmi-services.jar’ e implementada no RMIServer.

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
	java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: services.AcessoBD3
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:400)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
	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:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
	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 server.RMIServer.main(RMIServer.java:23)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
	java.lang.ClassNotFoundException: services.AcessoBD3
	at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
	at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:390)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:248)
	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:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: services.AcessoBD3
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:709)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:653)
	at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:590)
	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:1530)
	at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
	... 12 more

Alguém saberia dizer o que pode ser isso?
PS: Não estou usando RMISecurityManager nem ‘policy’

L

Pessoal,

Resolvi aqui. O problema era na minha linha de comando para startar a aplicação.

Obrigado a todos

Criado 11 de junho de 2012
Ultima resposta 11 de jun. de 2012
Respostas 4
Participantes 2