tutorial servidor example ejercicio ejemplo cliente java eclipse rmi rmiregistry

java - example - ejecutando el servidor de rmi, classnot found



rmi java ejemplo netbeans (9)

Estoy bastante seguro de que tendrá que iniciar su servidor RMI utilizando el mismo classpath que su aplicación. Creo que toma los mismos parámetros que java, es decir, -cp [your class path] .

Hola. Estoy intentando ejecutar una aplicación java que vincula una clase al servidor de nombres, pero constantemente obtengo una ClassNotFoundException

Primero empiezo el registro:

rmiregistry

luego de eclipse intento ejecutar el servidor pero obtengo este error

java.rmi.ServerException: RemoteException se produjo en el hilo del servidor; la excepción anidada es: java.rmi.UnmarshalException: error que descalifica los argumentos; la excepción anidada es: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory en sun.rmi.server.UnicastServerRef.oldDispatch (UnicastServerRef.java:396) en sun.rmi.server.UnicastServerRef.dispatch (UnicastServerRef.java:250) en sun.rmi.transport.Transport $ 1.run (Transport.java:159) en java.security.AccessController.doPrivileged (método nativo) en sun.rmi.transport.Transport.serviceCall (Transport.java:155) en sun.rmi .transport.tcp.TCPTransport.handleMessages (TCPTransport.java:535) en sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:790) en sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:649) en java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) en java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:908) en java.lang. Thread.run (Thread.java:619) en sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer (StreamRemoteCall.java:255) en sun.rmi.transport.StreamR emoteCall.executeCall (StreamRemoteCall.java:233) en sun.rmi.server.UnicastRef.invoke (UnicastRef.java:359) en sun.rmi.registry.RegistryImpl_Stub.rebind (Fuente desconocida) en progInternet2008.Pozzobon.tesi.Slave. main (Slave.java:54) Causado por: java.rmi.UnmarshalException: error que descalifica argumentos; La excepción anidada es: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory en sun.rmi.registry.RegistryImpl_Skel.dispatch (Fuente desconocida) en sun.rmi.server.UnicastServerRef.oldDispatch (UnicastServerRef.java:386) en sun.rmi .server.UnicastServerRef.dispatch (UnicastServerRef.java:250) en sun.rmi.transport.Transport $ 1.run (Transport.java:159) en java.security.AccessController.doPrivileged (método nativo) en sun.rmi.transport. Transport.serviceCall (Transport.java:155) en sun.rmi.transport.tcp.TCPTransport.handleMessages (TCPTransport.java:535) en sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0 (TCPTransport.java:790) en sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run (TCPTransport.java:649) en java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) en java.util.concurrent.ThreadPoolExecutor $ Worker .run (ThreadPoolExecutor.java:908) en java.lang.Thread.run (Thread.java:619) Causado por: java.lang.ClassNotFoundException: progInternet2 008.commons.NominabileFactory en java.net.URLClassLoader $ 1.run (URLClassLoader.java:200) en java.security.AccessController.doPrivileged (método nativo) en java.net.URLClassLoader.findClass (URLClassLoader.java:188) en java .lang.ClassLoader.loadClass (ClassLoader.java:307) en java.lang.ClassLoader.loadClass (ClassLoader.java:252) en java.lang.ClassLoader.loadClassInternal (ClassLoader.java:320) en java.lang.Class. forName0 (Método nativo) en java.lang.Class.forName (Class.java:247) en sun.rmi.server.LoaderHandler.loadProxyInterfaces (LoaderHandler.java:711) en sun.rmi.server.LoaderHandler.loadProxyClass (LoaderHandler. java: 655) en sun.rmi.server.LoaderHandler.loadProxyClass (LoaderHandler.java:592) en java.rmi.server.RMIClassLoader $ 2.loadProxyClass (RMIClassLoader.java:628) en java.rmi.server.RMIClassLoader.loadProxyClass ( RMIClassLoader.java:294) en sun.rmi.server.MarshalInputStream.resolveProxyClass (MarshalInputStream.java:238) en java.io.ObjectInputStream.readProxyDesc (ObjectInputStream.java:1531) en java.io.ObjectInputStream.readClassDesc (ObjectInputStream.java:1493) en java.io.ObjectInputStream.readOrdinaryObject (ObjectInputStream.java:1732) en java.io.ObjectInputStream.readObject0 (ObjectInputStream.java:1329) en java.io. ObjectInputStream.readObject (ObjectInputStream.java:351) ... 12 más

He leído el tutorial de Java de RMI, pero aún no pude hacerlo funcionar ...

Como Argumentos VM he establecido esto:

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

por favor, ayúdame

(Estoy usando Java 6)


La excepción se produce porque la aplicación rmiregistry no sabe de dónde cargar las clases. Cuando intenta vincular un objeto en el registro RMI, el registro descarga la definición de clase para ese objeto. Algunas de las otras respuestas te dicen que evites esto al establecer classpath para la aplicación rmiregistry para que tenga las definiciones de clase cuando se inicia y no necesita descargar nada, pero el tutorial Java RMI de Sun dice explícitamente que no se debe hacer esto Sospecho que esto tiene el potencial de causar conflictos entre la versión de la clase en el registro y la clase en el servidor.

La forma correcta de manejar el problema es establecer la propiedad java.rmi.server.codebase como lo intentaba hacer. La propiedad requiere que una ruta de directorio finalice con una barra diagonal, como se muestra a continuación:

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

También puede estar teniendo problemas si la variable $ {workspace_loc} es una ruta relativa y la aplicación rmiregistry no se inició en el mismo directorio para que la ruta relativa no sea la correcta. Si convierte la ruta en absoluta, o inicia el rmiregistry en el directorio apropiado, la ClassNotFoundException debería desaparecer. Consulte el tutorial en la propiedad java.rmi.server.codebase para obtener información un poco más detallada.


intente agregar / bin al final de su VM Arg:

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

El archivo que ejecutará está en este directorio, por lo que debe incluirlo en la ruta.


Pasé un día entero desinstalando y reinstalando mi JDK y cambiando las variables de clase y las variables de entorno. Pero el culpable fue que el comando de inicio de la migración no inició la investigación de una manera adecuada. Entonces, gracias por los comentarios en esta página, la solución fue desarmar el CLASSPATH temporalmente. Y eso se hace a través del set CLASSPATH= comandos set CLASSPATH=



Tuve el mismo problema, para solucionar esto, asegúrese de que su CLASSPATH esté configurada en la ruta que contiene las clases de servidor cuando ejecuta rmiregistry .

En una máquina Linux, ejecute los siguientes comandos.

export CLASSPATH="<server_class_path>"

Asegúrese de que CLASSPATH se haya configurado:

echo $CLASSPATH

Una vez que se ha establecido la ruta de clases, ejecuta rmiregistry

rmiregistry &


Ejecute el comando rmiregisrty desde su rmiregisrty / bin, / build o / build / classes, cualquiera que sea la raíz de sus archivos creados.

Pasé medio día tratando de resolver lo mismo.


Cierre la ventana de cmd donde se inició inicialmente el rmiregistry. En un cmd nuevo, vaya a la ubicación donde se encuentran los archivos de clase de su proyecto (uptill bin) e inicie el registro con el siguiente comando:

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

Si está utilizando Eclipse, ejecute ServerSideProject y su instancia de ImplementationClass se enlaza a la URL especificada.

Simplemente imprima una línea debajo del método de encuadernación y verifique si se imprime. Si se imprime con éxito, significa que su servidor está funcionando bien.


De acuerdo, acabo de superar este problema. Cuando ejecute rmiregistry que su variable de entorno CLASSPATH esté configurada.

Por ejemplo, puede tener un script:

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

Esto era todo lo que necesitaba para hacer funcionar mi classpath perdido. No estoy seguro de cómo enviar -cp commandline a rmiregistry.exe . Su documentación es bastante deficiente.