Foros del Web » Programación para mayores de 30 ;) » Java »

paso de objetos de servidor a cliente

Estas en el tema de paso de objetos de servidor a cliente en el foro de Java en Foros del Web. Hola a todos: estoy pasando un objeto de mi servidor a mi cliente... el proceso es el siguiente 1. mando datos desde el cliente 2. ...
  #1 (permalink)  
Antiguo 14/06/2004, 14:49
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 20 años, 8 meses
Puntos: 0
paso de objetos de servidor a cliente

Hola a todos:
estoy pasando un objeto de mi servidor a mi cliente... el proceso es el siguiente
1. mando datos desde el cliente
2. el servlet (que esta en tomcat 5) procesa datos y crea el objeto "par" (del tipo Parametros, que asi se llama la clase) y lo manda al cliente
3. el cliente lo lee y procesa la información

Ya he hecho las dos clases iguales y serializables en ambos lados (en el servidor y el cliente) ... todo me funcionaba a la perfección pero, cuando hice que en el cilente la clase "Parametros" se empaquetara en un conjunto de clases... ya no me sale nada... por el simple hecho de ponerle "package sistema" me da un error al recibir el objeto (ObjectInputStream)... y necesito empaquetar la clase pues la utilizaré en otros lados de la aplicación... sé que una de las soluciones seria copiar el .class en cada carpeta en que lo tenga que usar... pero eso es lo que justamente me quiero evitar

aqui les paso la parte del código que me arroja error
Código:
import sistema.Paramentros; // llamo la clase que utilizo
import blablabla;
public class myclass{
// bla bla bla
ObjectInputStream oisDatos = new ObjectInputStream(conexionServlet.getInputStream());
parDatos = (Parametros)oisDatos.readObject(); //<- en esta linea se lanza el catch
oisDatos.close();
// bla bla bla
}
Y, la clase Parametros esta definida como una public final class Parametros implements Serializable... no sé si eso influirá en algo

Agradecido de antemano por su respuesta me despido deseándoles lo mejor
Gracias por todo

Pd: ayúdenme pues no encuentro solución a esto...
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche

Última edición por pacoalonso79; 16/06/2004 a las 12:35
  #2 (permalink)  
Antiguo 16/06/2004, 12:18
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 20 años, 8 meses
Puntos: 0
vamos muchachos.. una ayudadita.... no se olviden de mi
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
  #3 (permalink)  
Antiguo 16/06/2004, 13:09
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,
Para poder ayudarte mejor es bueno que expliques el tipo de error que te da, que mensaje muestra, en el cliente o en el servidor... etc.
Así de buenas a primeras, algunas cosas que me chocan son, según lo que dices... "...Ya he hecho las dos clases iguales y serializables en ambos lados..." ->
Eummm, para ser compatible el objeto que pases, en ambos lados has de usar LA MISMA CLASE, si no te dará un error. Si has definido dos clases con el mismo nombre, una en cada lado, no vale.

Si el error te da despues de haber hecho modificaciones en esa clase, que ha de ser la misma en ambos lados, puede ser por que en el cliente y el servidor tengas versiones diferentes, por no haber actualizado el .class, por ejemplo.

Sin saber el mensaje de error, es complicado poder intuir mas cosas. Ah, en el trozo de codigo copiado haces import de la clase "sistema.Paramentros", pero supongo que es un error tipográfico de copy/paste (Sobra una "n").

Un saludo
  #4 (permalink)  
Antiguo 16/06/2004, 15:48
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 20 años, 8 meses
Puntos: 0
Hola, muchas gracias por tus consejos, ahora paso a explicar mejor el problema que tengo...
Miren, les diré que la clase Parametros (Parametros.class) esta tanto en el servidor como el cliente, y tienen la misma estructura y contenido de código.
En un primer momento no tuve ningún problema pues los .class y sus contenidos eran completamente iguales pero luego he necesitado, del lado del cliente, empaquetar a la clase "Parametros" dentro del paquete "sistemas" (pues me va a ser muy pero muy útil para otras clases que estan en otros paquetes) para lo cual solamente he agr4egado al principio de todo el código fuente la sentencia "package sistemas;" -esto solo en la clase del lado del cliente-.
Luego he compilado la clase modificada del lado del cliente y hecho esto el .class del lado del cliente ha quedado ciertamente modificado pero, según cortamente puedo entender, la estructura de la clase y la gran mayoría del código permanecen iguales en ambos lados (cleinte y servidor) salvo la primera linea (package sistemas).
El error que me salio en un primer intento (luego de poner el "package") fue: "java.lang.NoClassDefFoundError: Parametros (wrong name: sistemas/Parametros)"
Luego hice otro intento y solamente me salio una excepcion de clase no encontrada que simplemente dice: "Parametros"...
Me puedo dar cuenta que ambas apuntan a esta línea de código:
"parDatos = (Parametros)oisDatos.readObject();" pues he revisado del lado del servidor y no arroja ningún error y, segun veo, al salir errror en esta línea quiere decir que no puede cambiar el tipo de objeto recibido por el cliente al tipo de objeto "Parámetros"... entonces... ¿que hago? ¿cual es mi error?
Bueno amigos, espero esta vez haberme explicado mejor para que asi me puedan ayudar ... hago hincapié que antes de poner "package sistema;" todo salía a la perfección, sólo despues de la introducción de dicha línea comenzaron los errores

Éxitos en todo
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
  #5 (permalink)  
Antiguo 17/06/2004, 01:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,
Me repito:
Cita:
Iniciado por GreenEyed
Eummm, para ser compatible el objeto que pases, en ambos lados has de usar LA MISMA CLASE, si no te dará un error. Si has definido dos clases con el mismo nombre, una en cada lado, no vale.
Si te funcionaba antes con la misma clase, era por que en realidad estaría cargando solo UNA de las dos y usandola, ya que tenían el mismo nombre. Ahora que las dos clases tienen nombres diferentes sistema.Parametros y Parametros, entonces se da cuenta y da el error correcto.

Lo dicho, UNA sola clase en ambos lados.
Un saludo
  #6 (permalink)  
Antiguo 17/06/2004, 07:33
 
Fecha de Ingreso: agosto-2003
Ubicación: Piura
Mensajes: 238
Antigüedad: 20 años, 8 meses
Puntos: 0
ay que cabeza dura la mia!!! que bobo que soy!!!!
Bueno, muchísimas gracias GreenEyed por la explicación... ya me ha sido bastante clara el problema era mi entendimiento... agradezco nuevamente tus conceptos... pero ahora... ¿que hago?... pues necesito que ese objeto recibido, el cual ya tiene unos atributos seteados, sea utilizado por algunas otras clases en otros paquetes... ¿seria la solución copiar y pegar la clase "Parametros.class" dentro de todos los paquetes e las cuales la voy a usar?
Muchas gracias nuevamente y perdones por la pasada terquedad y mal entendimiento
Éxitos

Pd: una dudita... si uso el "import" ¿¿¿necesariamente las clases que se invocan con esta sentencia deben estar empaquetadas???... muchas gracias
__________________
Un hombre inteligente, caminando, llega mucho mas rápido que un torpe en coche
  #7 (permalink)  
Antiguo 17/06/2004, 11:44
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,

Lo mejor es tener UN solo fichero Parametro.java y copiar la clase resultante Parametro.class tanto en el cliente como en el servidor. Has de tener en cuenta que si actualizas las clase Parametro y/o la recompilas, tienes que volver a actualizar el fichero .class en el cliente Y en el servidor. Hay trucos para no tener que actualizar las clases cada vez que recompilas, si no has hecho ningun cambio, pero eso ya es para nota (para eso sería bueno mirar un tutorial de Serializacion en java)

En cuanto al uso de paquetes, lo recomendables es colocar SIEMPRE las clases en paquetes, ya que el paquete "sin nombre" a veces da problemas extraños de conflicto de clases. Para usar la clase desde otras clases en otros paquetes, no debería haber ningún problema, con un "import sistema.Parametro;" ha de ser suficiente. Solamente asegurate de que el fichero Parametro.class esta en un directorio adecuado (sistema) dentro del classpath.

PD: El import se usa para importar clases que estan dentro de paquetes, ya que el paquete "sin nombre" se importa por defecto y no tiene sentido ni es necesario importar las clases sin paquete.

Un saludo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:20.