Diseno Del Modulo De Base De Datos
BaseDeDatosComunUML.png

Descripcion

El Modulo de Base de Datos actua de intermediario estre los modulos de servidor y la base de datos del sistema, proporcionando metodos para lanzar consultas contra esta.

Dependencias

Modulo de Log

Usado para notificar errores graves del sistema

Empaquetado

La implementación del módulo está en el fichero ModuloBaseDeDatos.jar mientras que los interfaces y clases usables por otros modulos se encuentran en ModuloBAseDeDatosComun.jar

Uso del módulo

Uso del módulo desde otros módulos

Lo primero es obtener una instancia de IModuloBaseDeDatos mediante una llamada a IGestorModulos.obtenerInstanciaModulo("BaseDeDatos"). A partir de aqui se pueden usar los métodos definidos en la interfaz que pasamos a detallar:

IModuloBaseDatos

  • Sentencia ejecutarBloqueando(String sql)

Ejecuta una consulta sql bloqueando el thread actual hasta que los resultados están disponibles

  • void ejecutarAsincrono(String sql,IReceptorBD recep)

Ejecuta una consulta sql asíncronamente

  • Sentencia ejecutarBloqueando(String sql,int idTransaccion)

Ejecuta una consulta sql bloqueando el thread actual hasta que los resultados están disponibles. La consulta se ejecutará en el contexto de la transacción indicada por el parámetro idTransacción

  • void ejecutarAsincrono(String sql,IReceptorBD recep,int idTransaccion)

Ejecuta una consulta sql asíncronamente. La consulta se ejecutará en el contexto de la transacción indicada por el parámetro idTransacción

  • int iniciarTransaccion()

Inicia una transacción en la base de datos que garantiza que las siguientes consultas realizadas contra ella usando el identificador de transacción devuelto se ejecutan de forma atómica

  • void confirmarTransaccion(int idTransaccion)

Confirma todas las operaciones realizadas para la transacción indicada en el parámetro idTransaccion (escribiendo en la base de datos) y la termina.

  • void cancelarTransaccion(int idTransaccion)

Cancela todas las operaciones realizadas para la transacción indicada en el parámetro idTransaccion y la termina.


Si se desea usar el modelo de acceso a datos asincrono es necesario implementar un observador de eventos del modulo de base datos que ha de cumplir con la siguiente especificacion:

IReceptorBD

  • public void datosRecibidos(Sentencia res)

Método llamado por el módulo de bases de datos cuando una consulta asíncrona ha terminado su ejecución


Los resultados de las consultas se encapsulan en una clase llamada Sentencia:

Sentencia

Responsabilidad

Encapsular consultas hacia la base de datos, asi como los resultados de las mismas y los posibles errores que hayan sucedido

Dependencias

Métodos

  • public Sentencia(String sql,Semaphore sem)
  • public Sentencia(String sql,IReceptorBD recep)

Constructoras. Para uso interno del módulo

  • public void completar(ResultSet res, Exception ex,EEstadoResultado estado)
  • public void completar(int numAfectados, Exception ex,EEstadoResultado estado)

Usado para introducir los resultados de una consulta en la sentencia. Para uso interno

  • public boolean esAsincrono()

Indica si una sentencia se ejecuta de forma asincrona

  • public String getSql()

Devuelve la consulta SQL a ejecutar

  • public Semaphore getSemaforo()

Obtiene el semaforo usado para sincronizacion en caso de *Sentencia* sincrona (bloqueante)

  • public IReceptorBD getReceptor()

Facilita la instancia de la clase observadora, que obtendrá los resultados de esta consulta

  • public ResultSet getResultado()

Devuelve los resultados de ejecutar la consulta SQL

  • public Exception getEx()

Devuelve la excepcion ocurrida, en caso de que haya habido

  • public EEstadoResultado getEstadoEjecucion()

Devuelve el estado con el que terminó la ejecucion

  • public int getNumAfectados()

Nos indica el numero de filas afectadas en la ultima operacion