Pessoal,
Com o Java 6 ainda é necessário criar os stubs e skeletons para aplicações RMI usando ‘rmic’ ?
Pessoal,
Com o Java 6 ainda é necessário criar os stubs e skeletons para aplicações RMI usando ‘rmic’ ?
Não mais! 
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?
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’
Pessoal,
Resolvi aqui. O problema era na minha linha de comando para startar a aplicação.
Obrigado a todos