Java - java.rmi & java.reflection incompatibles??

 
Vista:

java.rmi & java.reflection incompatibles??

Publicado por iago (1 intervención) el 29/12/2005 16:12:53
¿Alguien me puede ayudar con una duda que tengo desde hace tiempo y que no consigo resolver?

- El caso es que tengo 2 clases que se comunican via rmi (en jvm's diferentes obviamente) en una arquitectura cliente-servidor simple. Funciona perfectamente. Politica de seguridad: todos los permisos habilitados (java.Security.AllPermision).

- El problema surge cuando cargo las clases de forma indirecta, es decir, no directamente tecleando "java laClaseQueSea" sino con una clase cargadora de clases (que usa java.reflection) así: "java claseCargadora laClaseQueSea". Surgen excepciones relacionadas con el marshalling o no se encuentra el stub.

¿Alguien sabe a que se puede deber esto?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:java.rmi & java.reflection incompatibles??

Publicado por chuidiang (950 intervenciones) el 31/12/2005 15:19:42
Hola:

No sé mucho del tema, pero te cuento algo a ver si te sirve de ayuda.

Cuando usas rmi, la clase remota es en realidad dos clases. Una la clase en sí. Luego hay otras clase (la de stubs) que genera rmic que es como la clase original, pero en sus métodos, en vez de hacer lo que tiene que hacer, lo que hace es conectarse con la clase original en el servidor, llamar a sus métodos y devolverte lo que la clase original devuelva.

Cuando en el cliente rmi obtienes la clase del servidor, en realidad estás obteniendo la clase stubs (que no es la original, sino una que se le parece). Es posible que si tu cargador intenta obtener directamente la clase original en vez de la de stubs, tengas problemas.

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:java.rmi & java.reflection incompatibles??

Publicado por iago (1 intervención) el 11/01/2006 19:24:42
Ante todo muchas gracias chuidiang.

Me dices: "Es posible que si tu cargador intenta obtener directamente la clase original en vez de la de stubs, tengas problemas. "

El cargador es el mismo para el cliente y para el servidor:
Es sencillísimo:

import java.lang.reflect.*;

public class Cargador {

public static void main(String args[]) {

Object object = null;
String className = args[0];

try {
Class classDefinition = Class.forName(className);
object = classDefinition.newInstance();
} catch (Exception e) {
System.out.println("Excepcion en Cargador: "+e);
System.out.println("Excepcion.printStackTrace():");
e.printStackTrace();
}
}

}

No creo que ese sea el problema porque lo que hace el cargador es:
- En el lado del cliente carga la clase del cliente. Esta clase es la que se encargará de obtener el stub del servidor, pero esto se supone que lo hace la rmi automáticamente.
- En el lado del servidor carga la clase del servidor. Esta clase se registra en el rmiregistry y se encarga de enviar el stub al cliente, tb se supone que lo hace la rmi automáticamente.

Si encontráis algo nuevo os agradezco que lo pongáis en el foro.
Muchas gracias!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:java.rmi & java.reflection incompatibles??

Publicado por chuidiang (950 intervenciones) el 12/01/2006 05:22:45
Hola de nuevo:

No había entendido bien el problema. Si la parte de rmi es exactamente igual y con "java Cliente" y "java Servidor" funciona, pero con "java ClaseCargadora Cliente" y "java ClaseCargadora Servidor" te da problemas de que no encuentra las clases de Stubs, es posible que haya alguna diferencia en el CLASSPATH en los dos modos de arranque. ¿Puede ser simplemente que hayas puesto el CLASSPATH distinto en ambos casos?

Se bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar