Problema con Vector comunicacion Applet - Servlet
Hola
Tengo un applet que llama a un servlet para que procese unas cosas y el servlet lo que hace es algo asi como:
Objeto o [200];
int i = 0;
ResultSet rs = EjecutarConsulta(....)
Mientras (rs.next()) hacer
CalcularObjeto(Parametros)
o[i] = GetObjeto();
i++
Fin Mientras
Bueno muy a groso modo es eso. La clase Objeto implementa el interfaz serializable y printable. Estos objetos se deben devolver al applet mediante tunneling, y como son varios lo que se hace es devolverlos en un objeto de la clase Vector
Por tanto lo que hago es que mas adelante, en el codigo del servlet, meto en un objeto de la clase Vector los elementos de la clase Objeto.
Mi problema es que una vez salgo de ese bucle que os he puesto ahi, imaginaros que se ejecuta 5 veces, imprimo el contenido de cada elemento del array de objetos (antes de introducirlos en el objeto de la clase Vector) por pantalla mediante out.println(....) y lo que me sucede es que sale 5 veces la misma informacion; que es la del ultimo elemento introducido en el array.
De hecho si el bucle while se ejecuta 2 veces, la primera vez imprimo el contenido del elemento del array y esta bien, la segunda vez el contenido del elemento 0 del array cambia sus valores por los del elemento 1 del array
A que puede ser debido??, a ver si es posible que alguien me conteste
Muchas gracias
Tengo un applet que llama a un servlet para que procese unas cosas y el servlet lo que hace es algo asi como:
Objeto o [200];
int i = 0;
ResultSet rs = EjecutarConsulta(....)
Mientras (rs.next()) hacer
CalcularObjeto(Parametros)
o[i] = GetObjeto();
i++
Fin Mientras
Bueno muy a groso modo es eso. La clase Objeto implementa el interfaz serializable y printable. Estos objetos se deben devolver al applet mediante tunneling, y como son varios lo que se hace es devolverlos en un objeto de la clase Vector
Por tanto lo que hago es que mas adelante, en el codigo del servlet, meto en un objeto de la clase Vector los elementos de la clase Objeto.
Mi problema es que una vez salgo de ese bucle que os he puesto ahi, imaginaros que se ejecuta 5 veces, imprimo el contenido de cada elemento del array de objetos (antes de introducirlos en el objeto de la clase Vector) por pantalla mediante out.println(....) y lo que me sucede es que sale 5 veces la misma informacion; que es la del ultimo elemento introducido en el array.
De hecho si el bucle while se ejecuta 2 veces, la primera vez imprimo el contenido del elemento del array y esta bien, la segunda vez el contenido del elemento 0 del array cambia sus valores por los del elemento 1 del array
A que puede ser debido??, a ver si es posible que alguien me conteste
Muchas gracias
Hola!!!!!!!!!
Tene en cuenta que los objetos se pasan por referencia en JAVA (si sabes C++ entenderas de lo q hablo) entonces si vos no haces un new cada vez q recorres el ResultSet => estaras siempre apuntando al mismo lugar y estaras pisando los valores anteriores.
Entendiste???
Por q no posteas el codigo para ver si efectivamente ese es el problema y de paso te puedo decir como solucionarlo
Salu2!!!!!!!!!!!!!!!!!!!
Tene en cuenta que los objetos se pasan por referencia en JAVA (si sabes C++ entenderas de lo q hablo) entonces si vos no haces un new cada vez q recorres el ResultSet => estaras siempre apuntando al mismo lugar y estaras pisando los valores anteriores.
Entendiste???
Por q no posteas el codigo para ver si efectivamente ese es el problema y de paso te puedo decir como solucionarlo
Salu2!!!!!!!!!!!!!!!!!!!
Si se C++, y por tanto se de lo que estas hablando
Te pego la parte del codigo correspondiente a esa parte pa que veas :
Tarjeta T = new Tarjeta((PrintWritersesion.getAttribute("printer"));
Tarjeta t_aux [] = new Tarjeta [200];
int indice = 0;
String consulta = "SELECT Maquina_Procedimiento.....";
rs = BD.EjecutaConsulta(stmt,consulta);
while (BD.Siguiente(rs))
{
codigo_maquina = BD.getString(rs,"Cod_maquina");
codigo_punto_corte = BD.getString(rs,"Cod_punto_corte");
codigo_corte = C.CalculaCodigoCorte (codigo_punto_corte, fecha_solicitada_inicio);
query = "INSERT INTO Corte ...."
data = "'" + codigo_corte + "','" + ......;
query = query + data;
BD.EjecutaInsercion(stmt2, query);
T.HacerTarjeta(codigo_corte, nombre, solicitante, empresa, cargo, desc_especialidad, codigo_proc, codigo_maquina, codigo_punto_corte,fecha_solicitada_inicio, hora_solicitada_inicio, desc_prioridad,C.GetNumTarjeta());
t_aux [indice] = T.GetTarjeta(); // esto hace un return this
out.println("Objeto tarjeta " + indice + " devuelto de codigo corte " + t_aux[indice].GetParametro(1) + "<br>");
indice ++;
out.println("Objeto tarjeta de indice 0 devuelto de codigo corte " + t_aux[0].GetParametro(1) + "<br>");
}
Ahi va a ver que es en concreto lo que pasa
Gracias, byes
Te pego la parte del codigo correspondiente a esa parte pa que veas :
Tarjeta T = new Tarjeta((PrintWritersesion.getAttribute("printer"));
Tarjeta t_aux [] = new Tarjeta [200];
int indice = 0;
String consulta = "SELECT Maquina_Procedimiento.....";
rs = BD.EjecutaConsulta(stmt,consulta);
while (BD.Siguiente(rs))
{
codigo_maquina = BD.getString(rs,"Cod_maquina");
codigo_punto_corte = BD.getString(rs,"Cod_punto_corte");
codigo_corte = C.CalculaCodigoCorte (codigo_punto_corte, fecha_solicitada_inicio);
query = "INSERT INTO Corte ...."
data = "'" + codigo_corte + "','" + ......;
query = query + data;
BD.EjecutaInsercion(stmt2, query);
T.HacerTarjeta(codigo_corte, nombre, solicitante, empresa, cargo, desc_especialidad, codigo_proc, codigo_maquina, codigo_punto_corte,fecha_solicitada_inicio, hora_solicitada_inicio, desc_prioridad,C.GetNumTarjeta());
t_aux [indice] = T.GetTarjeta(); // esto hace un return this
out.println("Objeto tarjeta " + indice + " devuelto de codigo corte " + t_aux[indice].GetParametro(1) + "<br>");
indice ++;
out.println("Objeto tarjeta de indice 0 devuelto de codigo corte " + t_aux[0].GetParametro(1) + "<br>");
}
Ahi va a ver que es en concreto lo que pasa
Gracias, byes
