Problema con Vector comunicacion Applet - Servlet

colokdo
03 de Diciembre del 2004
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

nicokiki
03 de Diciembre del 2004
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!!!!!!!!!!!!!!!!!!!

colokdo
03 de Diciembre del 2004
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

colokdo
03 de Diciembre del 2004
Muchisismas gracias, me ha servido de ayuda tu comentario sobre el new.

Ya lo he arreglado y funciona perfectamente.
1 millon de gracias,
Saludos, colokdo