Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2011, 06:16
alfonso2222
 
Fecha de Ingreso: mayo-2011
Mensajes: 16
Antigüedad: 12 años, 11 meses
Puntos: 0
Concurrencia en java

Hola ,

Tengo un problema de concurrencia. estoy creando una pagina web, mas bien una aplicacion web , a traves de Jsp y servlet.

He creado un servlet , que cada vez que es ejecutado, llama a una función que actualiza una tabla en mi base de datos PostgresSql.

Pongo el codigo aquí:

miServlet
.
.
JdbcMovimientosDao.actualizaMovimiento(fecha,estad o);//aqui llama a actualizar
.
.

//fin del servlet

Y aqui la funcion actualizaMovimiento(estado):

public static boolean actualizaMovimiento(Timestamp id, String estado) {

Connection conn = null;
PreparedStatement pStm = null;
ResultSet rs = null;
int filasactualizadas=0;
boolean retorna =false;
try {
conn = DriverManager.getConnection(Constantes.conexion,Co nstantes.usuario,Constantes.pass);
conn.setAutoCommit(false);

String update = "update mercado.movimientos set estado = ? where fechamodif = ?";
pStm = conn.prepareStatement(update);
pStm.setString(1, estado);
pStm.setTimestamp(2, id);
if((filasactualizadas = pStm.executeUpdate())>0)
retorna=true;

pStm.close(); pStm = null;rs = null;
conn.commit(); conn.close(); conn = null;

} catch(Throwable t) {
logger.error("Error: " + t.getMessage().toString());
try {
if(pStm != null) pStm.close();
if(conn != null) {
conn.rollback();
conn.close();
}
return false;
} catch(SQLException sqle) { }
}
return retorna;
}

//final de la funcion


¿Como puedo hacer que se llame a esta función de manera concurrente, o sea que sea actualize la tabla mercado.movimientos, si es llamada desde varias sesiones diferentes a la vez, y esto no cause error en alguna de las actualizaciones?

Muchas gracias de antemano

Alfonso