Ejercicios de opciones avanzadas en el acceso a una BD
Transacciones
Vamos a trabajar con las transacciones. Para ello, vais a crear un método en el DAO de usuario llamado reserva. Recibirá tres parámetros, el dni del usuario que reserva, el número de vuelo y el número de hotel. Se debe restar tanto al hotel como al vuelo una plaza del campo PlazasDisp. Cuando se haga esto, se debe introducir un registro en las tablas correspondientes de reserva. Como el campo PlazasDisp es sin signo, cuando intentemos restar a algún elemento que no tenga plazas, dará un error MySQL. Este es un buen ejercicio para comprobar el funcionamiento de las transacciones.
Para introducir un registro podéis usar lo siguiente:
insert into resHotel values (null, 1, dni, '2006-11-20', 2)
El primer valor que se introduce es null debido a que el campo tiene autoincrento. La fecha hay que indicarla así.
Pool de conexiones
En la implementación de la fuente de datos que habéis usado hasta ahora, se manejaba una sólo conexión. Esto es un problema si tenemos varios clientes de manera simultánea. Una posible solución es que la fuente de datos maneje el pool de conexiones. Vais a modificar la clase FuenteDatos de la siguiente manera:
- Cread un array de conexiones. Se crearán las conexiones en el constructor. Usad una variable para definir el número máximo de conexiones.
- Cread otro array de booleanos que indicará si la conexión correspondiente está siendo usada.
- Modificad el método getConnection para que busque por el array y devuelva la primera conexión no usada. Si encuentra una conexión libre la devuelve y si no deuelve null.
- Añadid un método adicional que llamaréis close(Connection c). Este método chequea el array con al conexión pasada por parámetro y libera la conexión (cambiando el valor del array de booleanos.
RowSet
Como parte optativa de esta sesión se propone el uso de los RowSet para manejar los usuarios.