BASES DE DATOS

Transacción en una base de datos

Una transacción en un Sistema de Gestión de Bases de Datos, es un conjunto de órdenes que se ejecutan formando una unidad de trabajo, es decir, en forma indivisible o atómica.

Un SGBD se dice transaccional, si es capaz de mantener la integridad de los datos, haciendo que estas transacciones no puedan finalizar en un estado intermedio. Cuando por alguna causa el sistema debe cancelar la transacción, empieza a deshacer las órdenes ejecutadas hasta dejar la base de datos en su estado inicial (llamado punto de integridad), como si la orden de la transacción nunca se hubiese realizado. Una transacción debe contar con ACID  quiere decir: Atomicidad, Consistencia, Aislamiento y Durabilidad. Entonces para que un Sistema de Gestión de Bases de Datos sea considerado Transaccional, debe cumplir con estos criterios.



Transacciones manejadas por el container

En una transacción manejada por el container es necesario definir ciertos atributos para especificar como debe controlarla. Existen seis tipos de atributos del cual debe ser elegido uno de ellos y declarado en el elemento del descriptor:

  • Required. Se utiliza este modo si se desea que el bean se ejecute siempre dentro de una transacción. Si una transacción se encuentra en curso, el bean participa en ella. Si no existe ninguna transacción en curso, el container creará una especial para la ejecución del método del bean y al finalizar el container ejecuta un commit si es que no ha sido abortada por el bean. Este modo es utilizado cuando se necesita que el bean sea transaccional.
  • RequiresNew. En este modo el método del bean siempre ejecutará en una nueva transacción. Si no existen transacciones, se crea una especial igual al modo Required. Si existe una transacción en curso, es suspendida mientras el bean ejecuta en una transacción independiente y una vez terminado el método del bean, la transacción inicial continúa su curso. Se puede utilizar este modo cuando el bean es transaccional pero no se desea que comparta instrucciones con otros beans o con el cliente.
  • NotSupported. En este modo el bean no puede ser ejecutado dentro de una transacción. Por tanto si se está desarrollado una transacción, es suspendida su ejecución mientras se ejecuta el bean y luego es reanudada al finalizar el bean. Este modo puede ser utilizado cuando el bean no requiere de sistemas transaccionales o no se desean las propiedades ácidas para su ejecución. Por ejemplo se puede utilizar para ciertos beans con reportes de baja prioridad y no se desea bajar el performance del sistema con ellos.
  • Supports. En este modo el comportamiento depende de si existe una transacción en curso. Si es así, es utilizada dentro del bean. Si no es así, el bean no se ejecuta dentro de una transacción. Dada la dualidad de comportamiento, este modo debe ser utilizado con cuidado. Puede utilizarse cuando se desea delegar la decisión de usar una transacción sobre otro bean.
  • Mandatory. En este modo es obligatoria la existencia de una transacción en curso para su ejecución. De no ser así el container debe emitir la excepción javax.ejb.TransactionRequiredException si se está utilizando interfaces remotas o javax.ejb.TransactionRequiredLocalException si se utiliza una interfaz local. Este modo garantiza que la ejecución será realizada bajo una transacción que fue iniciada por el cliente. Es útil para beans que componen un workflow y que son parte de un sistema mayor.
  • Never. En este modo es obligatoria la no existencia de una transacción. De existir es emitida la excepción java.rmi.RemoteException si el cliente es remoto, o javax.ejb.EJBException si es un cliente local. Este modo permite asegurar al cliente que este bean no necesita de utilizar transacciones y puede ser utilizado en el desarrollo de sistemas no transaccionales por naturaleza y asegurar que así será utilizado. 




Transacciones manejadas por el bean 
 
Las transacciones manejadas por el bean permiten un control avanzado sobre el comportamiento de la transacción. Para poder hacer uso de la transacción es necesario utilizar una API especializada conocida como Java Transaction API (JTA).

JTA es un conjunto de interfaces de alto nivel divididas en tres conjuntos: un conjunto de interfaces para administradores de recursos que utilizan el estándar X/Open XA, un conjunto de interfaces para transacciones manejadas por servidores de aplicación, y -la que nos interesa- un conjunto de interfaces para el uso de transacciones por aplicaciones transaccionales.

Al ser una interfaz de alto nivel, JTA necesita de una implementación que debe ser dada por cada proveedor. Esta implementación es realizada a través de la API Java Transaction Service (JTS). Por otra parte, JTS es una implementación en Java del OMG Object Transaction Service (OTS) el cual es un servicio de CORBA para la utilización de transacciones.

JTA contiene la interfaz javax.transaction.UserTransacion que permite controlar las transacciones en un bean. Esta interfaz posee métodos como begin(), commit() y rollback(), que permiten manejar el flujo de la transacción. Este objeto puede ser obtenido por un enterprise bean a través del método getUserTransaction del objeto EJBContext que le entrega el container para su inicialización, o a través de JNDI haciendo un lookup a una dirección definida en el container como por ejemplo java:comp/UserTransaction.



JNDI

La Interfaz de Nombrado y Directorio Java  es una Interfaz de Programación de Aplicaciones (API) de Java para servicios de directorio. Permite a los clientes descubrir y buscar objetos y datos a través de un nombre. Como todas las APIs de Java que hacen de interfaz con sistemas host, es independiente de la implementación subyacente. Adicionalmente, especifica una interfaz de proveedor de servicio (SPI) que permite que las implementaciones del servicio de directorio sean integradas en el framework. Las implementaciones pueden hacer uso de un servidor, un fichero, o una base de datos; la elección depende del desarrollador.


Qué es el Query Language

SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada) es un lenguaje específico del dominio que da acceso a un sistema de gestión de bases de datos relacionales que permite especificar diversos tipos de operaciones en ellos. Una de sus características es el manejo del álgebra y el cálculo relacional que permiten efectuar consultas con el fin de recuperar, de forma sencilla, información de bases de datos, así como hacer cambios en ellas.
Originalmente basado en el álgebra relacional y en el cálculo relacional, SQL consiste en un lenguaje de definición de datos, un lenguaje de manipulación de datos y un lenguaje de control de datos. El alcance de SQL incluye la inserción de datos, consultas, actualizaciones y borrado, la creación y modificación de esquemas y el control de acceso a los datos. También el SQL a veces se describe como un lenguaje declarativo, también incluye elementos procesales.




Que es una Excepciones en Java

En Java los errores en tiempo de ejecución (cuando se esta ejecutando el programa) se denominan excepciones, y esto ocurre cuando se produce un error en alguna de las instrucciones de nuestro programa, como por ejemplo cuando se hace una división entre cero,  cuando un objeto es 'null' y no puede serlo, cuando no se abre correctamente un fichero, etc. Cuando se produce una excepción se muestra en la pantalla un mensaje de error y finaliza la ejecución del programa.
En Java (al igual que en otros lenguajes de programación), existen mucho tipos de excepciones y enumerar cada uno de ellos seria casi una labor infinita. En lo referente a las excepciones hay que decir que se aprenden a base experiencia, de encontrarte con ellas y de saber solucionarlas.
Cuando en Java se produce una excepción se crear un objeto de una determina clase (dependiendo del tipo de error que se haya producido), que mantendrá la información sobre el error producido y nos proporcionará los métodos necesarios para obtener dicha información.


Excepciones de aplicación

Las excepciones de aplicación alertan al cliente de problemas específicos de la aplicación o de lógica empresarial; no informan de excepciones a nivel de sistema. Este tema incluye una breve visión general de cómo se definen las excepciones de aplicación y ejemplos de la anotación @ApplicationException y el elemento de descriptor de despliegue application-exception correspondiente.



Comentarios