La primera parte de este bloque de ejercicios consiste en comprobar el funcionamiento de las transacciones. Para ello vamos a realizar dos clases que accederán a la misma tabla de forma concurrente y así comprobaremos el funcionamiento en las transacciones. Las dos clases accederán a la tabla vuelo. De la tabla vuelo consultarán el registro del vuelo número 9 y 10, y actualizarán el valor del aeropuerto de inicio.
Ambas clases tendrán un método cambio que primero realizará una consulta del vuelo número 9 y mostrará el valor de su aeropuerto de inicio. A continuación actualizará el valor de su aeropuerto de inicio. La sentencia SQL puede ser la siguiente:
Update vuelo set aeroinic='ALC2' where numero=9
A continuación se quedará esperando que el usuario pulse una tecla. Podéis utilizar el siguiente código:
int pp = System.in.read();
Por último modificará el valor del aeropuerto inicio del registro número 10 a MAD2. Recordad que antes de la primera actualización se debe llamar al método setAutoCommit y después de la última commit para que surtan efecto los cambios. También debéis llamar a rollback si se produce una excepción. Para probar este ejercicio se llamarán a las dos clases desde sesiones distintas. Probad primero con PostGres. La primera clase actualizará el valor de la fila y se quedará esperando que pulsemos una tecla. En ese momento ejecutamos la segunda. Comprobad que la segunda se queda esperando, pero aunque pulsemos no continúa su ejecución, pues está esperando que se libere el bloqueo producido por la primera. Cuando pulsamos en la primera aplicación las dos finalizan.
Otra prueba a realizar es el interbloqueo. Para ello simplemente cambiáis el orden de una de las clases, que primero acceda a la fila con número 10 y después a la 9. Veréis que PostGres detecta el interbloqueo.
Cambiad ahora y comprobad el funcionamiento con MySQL. Con el primer ejemplo, cambiad el final de la primera clase para que no haga commit sino rollback. El sistema debe dar un error.
En la segunda parte de la sesión vamos a utilizar los RowSet. Descargad la implementación de RowSet que ha realizado Sun. Se encuentra disponible en la página de recursos. Modificad el ejercicio desarrollado en la sesión 2 para que trabaje con un objeto de la clase CachedRowSet (cread una nueva clase). Cread un nuevo método en la misma clase que utilice un WebRowSet y que tenga la misma funcionalidad que MuestraTray, pero que el resultado lo envíe a un fichero en formato XML. Comprobad el resultado que se obtiene. No es posible leer el fichero XML de vuelta, pues el DTD no es correcto.