executando o servidor rmi, classnotfound

Oi eu estou tentando executar um aplicativo java que liga uma class para o servidor de nomes, mas eu constantemente recebo um ClassNotFoundException

Primeiro eu inicio o registro:

rmiregistry

então do eclipse eu tento executar o servidor, mas recebo esse erro

java.rmi.ServerException: RemoteException ocorreu no encadeamento do servidor; A exceção aninhada é: java.rmi.UnmarshalException: error unmarshalling arguments; A exceção aninhada é: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory em sun.rmi.server.UnicastServerRef.oldDispatch (UnicastServerRef.java:396) em sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:250) em sun.rmi.transport.Transport $ 1.run (Transport.java:159) em java.security.AccessController.doPrivileged (Native Method) em sun.rmi.transport.Transport.serviceCall (Transport.java:155) em sun.rmi .transport.tcp.TCPTransport.handleMessages (TCPTransport.java:535) em sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:790) em sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:649) em java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) em java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) em java.lang. Thread.run (Thread.java:619) em sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:255) em sun.rmi.transport.StreamR emoteCall.executeCall (StreamRemoteCall.java:233) em sun.rmi.server.UnicastRef.invoke (UnicastRef.java:359) em sun.rmi.registry.RegistryImpl_Stub.rebind (Unknown Source) em progInternet2008.Pozzobon.tesi.Slave. main (Slave.java:54) Causado por: java.rmi.UnmarshalException: erro unmarshalling arguments; A exceção aninhada é: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory em sun.rmi.registry.RegistryImpl_Skel.dispatch (Unknown Source) em sun.rmi.server.UnicastServerRef.oldDispatch (UnicastServerRef.java:386) em sun.rmi .server.UnicastServerRef.dispatch (UnicastServerRef.java:250) em sun.rmi.transport.Transport $ 1.run (Transport.java:159) em java.security.AccessController.doPrivileged (Native Method) em sun.rmi.transport. Transport.serviceCall (Transport.java:155) em sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:535) em sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:790) em sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:649) em java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) em java.util.concurrent.ThreadPoolExecutor $ Worker .run (ThreadPoolExecutor.java:908) em java.lang.Thread.run (Thread.java:619) Causado por: java.lang.ClassNotFoundException: progInternet2 008.commons.NominabileFactory em java.net.URLClassLoader $ 1.run (URLClassLoader.java:200) em java.security.AccessController.doPrivileged (Native Method) em java.net.URLClassLoader.findClass (URLClassLoader.java:188) em java .lang.ClassLoader.loadClass (ClassLoader.java:307) em java.lang.ClassLoader.loadClass (ClassLoader.java:252) em java.lang.ClassLoader.loadClassInternal (ClassLoader.java:320) em java.lang.Class. forName0 (Método nativo) em java.lang.Class.forName (Class.java:247) em sun.rmi.server.LoaderHandler.loadProxyInterfaces (LoaderHandler.java:711) em sun.rmi.server.LoaderHandler.loadProxyClass (LoaderHandler. java: 655) em sun.rmi.server.LoaderHandler.loadProxyClass (LoaderHandler.java:592) em java.rmi.server.RMIClassLoader $ 2.loadProxyClass (RMIClassLoader.java:628) em java.rmi.server.RMIClassLoader.loadProxyClass ( RMIClassLoader.java:294) em sun.rmi.server.MarshalInputStream.resolveProxyClass (MarshalInputStream.java:238) em java.io.ObjectInputStream.readProxyDesc (ObjectInputStream.java:1531) em java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1493) em java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1732) em java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1329) em java.io. ObjectInputStream.readObject (ObjectInputStream.java:351) … mais 12

Eu li o tutorial RMI Java, mas ainda não consegui fazê-lo funcionar …

Como Argumentos da VM, defini isso:

-Djava.rmi.server.codebase = arquivo: $ {workspace_loc} / progInternet2008

por favor me ajude

(Estou usando o Java 6)

Execute o comando rmiregisrty em sua pasta / bin, / build ou / build / classs, qualquer que seja a raiz dos arquivos construídos.

Passei meio dia tentando resolver a mesma coisa.

A exceção está ocorrendo porque o aplicativo rmiregistry não sabe de onde carregar as classs. Quando você tenta vincular um object no registro RMI, o registro faz o download da definição de class para esse object. Algumas das outras respostas estão dizendo para você contornar isso configurando o classpath para o aplicativo rmiregistry para que ele tenha as definições de class quando for iniciado e não precise fazer download de nada, mas o tutorial Java RMI da Sun explicitamente diz para não fazer isso . Eu suspeito que isso tem o potencial de causar conflitos entre a versão da class no registro e a class no servidor.

A maneira correta de lidar com o problema é definir a propriedade java.rmi.server.codebase como você estava tentando fazer. A propriedade requer que um caminho de diretório seja terminado com uma barra, assim:

 -Djava.rmi.server.codebase = arquivo: $ {workspace_loc} / progInternet2008 /

Você também pode estar tendo problemas se a variável $ {workspace_loc} for um caminho relativo e o aplicativo rmiregistry não tiver sido iniciado no mesmo diretório para que o caminho relativo não esteja correto para ele. Se você tornar o caminho absoluto ou iniciar o novo registro no diretório apropriado, o ClassNotFoundException deverá desaparecer. Veja o tutorial sobre a propriedade java.rmi.server.codebase para obter informações mais detalhadas.

Ok, acabei de superar esse problema. Certifique-se de que, ao executar o rmiregistry sua variável de ambiente CLASSPATH esteja configurada.

Por exemplo, você pode ter um script:

 set CLASSPATH=[path to jdbc driver].jar rmiregistry.exe 

Isso foi tudo que eu precisava para ter meu classpath perdido funcionando. Não sei como enviar a -cp commandline de -cp commandline para rmiregistry.exe . Sua documentação é bastante carente.

Tenho certeza de que você terá que iniciar seu servidor RMI usando o mesmo caminho de class que seu aplicativo. Eu acredito que leva os mesmos parâmetros como java, ou seja, -cp [your class path] .

tente adicionar / bin no final da sua VM Arg:

 -Djava.rmi.server.codebase=file:${workspace_loc}/progInternet2008/bin 

O arquivo que você irá executar está neste diretório, então você precisa incluí-lo no caminho.

Eu fiz o upgrade do JDK1.6.0_33 para o 1.7.0_45 e tive o mesmo problema. Eu encontrei este documento e resolvi o problema iniciando o rmiregistry com:

rmiregistry -Djava.rmi.server.useCodebaseOnly = false

Consulte abaixo http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/enhancements-7.html

Eu tive o mesmo problema, para corrigir isso, certifique-se de que seu CLASSPATH esteja configurado para o caminho que contém as classs do servidor ao executar o rmiregistry .

Em uma máquina linux, execute os seguintes comandos.

 export CLASSPATH="" 

Certifique-se de que o CLASSPATH foi definido:

 echo $CLASSPATH 

Uma vez que o caminho da class tenha sido definido, execute rmiregistry

 rmiregistry & 

Passei um dia inteiro desinstalando e reinstalando meu JDK e alterando as variables ​​de ambiente de class e de ambiente. Mas o culpado foi que o registro de início de comando não iniciou de maneira adequada. Então, obrigado pelos comentários nesta página, a solução foi desabilitar o CLASSPATH temporariamente. E isso é feito através do set CLASSPATH= comandos set CLASSPATH=

Feche a janela do cmd em que o rmiregistry foi inicialmente iniciado. Em um cmd recente, acesse o local onde os classfiles do projeto estão localizados (uptill bin) e inicie o registro usando o comando abaixo:

rmiregistry -J-Djava.rmi.server.useCodebaseOnly = false

Se você estiver usando o Eclipse, execute o ServerSideProject e sua ImplementationClass Instance ficará vinculada à URL especificada.

Basta imprimir uma linha abaixo do método de vinculação e verificar se ela é impressa. Se ele for impresso com sucesso, significa que seu servidor está funcionando bem.