BASES DE DATOS

Transacción 

Una transacción en una serie de operaciones que simulan ser ejecutadas como una sola gran instrucción, así las transacciones garantizan que todas las operaciones del conjunto serán exitosas o ninguna de ellas lo será.

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 <trans-attribute> 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. 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.

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 (Java Naming and Directory Interface)

Es una API que permite a las aplicaciones guardar y recoger datos identificados por un nombre, organizando dichos datos en una estructura que puede ser similar a una estructura de directorios. Usualmente se almacenan variables de todo tipo como String, int, etc., que pueden ser distintos datos como direcciones de bases de datos, y otros.

EJB Query Language

Es un lenguage de consulta como SQL que sirve para realizar consultas a una base de datos desde Java. La ventaja de esto es que se tiene una única sintaxis, por lo que no tendremos que preocuparnos por la sintaxis especifica de cada sistema gestor de bases de datos. 

Excepciones en Java

En la programación ocurren usualmente problemas, y las excepciones se generan cuando ocurre algún problema. 

Excepciones de la Aplicación 

Son generadas cuando ocurre algún problema con la lógica de negocio o las reglas de negocio son violadas.

Excepciones del Sistema

Cualquier otra excepción que no tenga que ver con la lógica de negocios. Por ejemplo, problemas de conexión.

Bloque Try-Catch

Es utilizado para gestionar las excepciones en Java. 

try {
    -lo que se desea hacer y es posible que genere una excepcion-
} catch (TipoDeExcepcion ex) {
    -lo que se tiene que hacer si ocurre una exception-
}

Comentarios

Entradas populares