Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TRANSACCIONALES
Entrega 2
Presentado por:
Jhon Fredy Vélez Londoño Cod: 1911023172
Raúl Edgardo Casallas Zamora Cod: 1911024589
OBJETIVOS........................................................................................................................... 3
Objetivo General:................................................................................................................ 3
Objetivos Específicos..........................................................................................................3
DESARROLLO....................................................................................................................... 4
1) Socket server (demonio) que identifica el tipo de transacción y ejecuta la operación
sobre la base de datos:.......................................................................................................4
2) Socket cliente que llama al socket server para crear un cliente (inserción de un dato):. 7
3) Agregar al documento el código de cada operación y explicar que hace cada programa
(documentar el programa):...............................................................................................14
REFERENCIAS.................................................................................................................... 15
OBJETIVOS
Objetivo General:
El banco XYZ requiere que se desarrolle un prototipo transaccional, para simular la
ejecución de tres transacciones a saber, una consulta, una consignación y un retiro.
Para el desarrollo del proyecto, se requiere:
Objetivos Específicos
Hacer un modelo entidad relación sencillo del banco XYZ, con las entidades
de saldo, cliente, ciudad, país y movimientos (el propósito es académico).
Implementar el modelo en una base de datos libre como Oracle 11g R2
Express, por ejemplo.
Desarrollar los sockets server y cliente respectivos para hacer una
consignación (insert), un retiro (update) y una consulta (select).
Probar las operaciones desde el socket cliente con el socket server iniciado.
DESARROLLO
MySQL crea automáticamente un socket HTTP para que las distintas aplicaciones
con las correctas credenciales se puedan conectar. A continuación se muestran los
parámetros con los que se puede establecer conexión con MySQL server:
Nosotros estamos usando PHP para establecer la conexión y hacer las respectivas
transacciones. En los archivos adjuntos se encuentra el script que va a servir para la
conexión en toda la aplicación y la ruta es: /connect/conn.php
Las líneas de código que siguen después de la verificación de conexión son para
forzar el uso de codificación UTF 8 entre la aplicación y la base de datos (en
ocasiones no basta solo con establecer la base de datos para que almacene
información en UTF 8, también hay que especificar que la comunicación entre la
aplicación y la base de datos esté codificada en UTF 8).
Por último se configura para que cuando haya un error MySQL arroje una
excepción; esto se hace con el fin de poder forzar el rollback en caso que haya un
error al hacer una transacción. Por defecto MySQL hace auto commits de modo que
ingresa la información automáticamente en cuanto se le da la instrucción, pero en
ocasiones es necesario hacer el commit si todos los datos se ingresan
correctamente.
Para insertar datos, hicimos dos scripts para ingresar los datos de los países y
ciudades.
Como PHP tiene por defecto insertar los datos ahí mismo se ejecuta el query, se
desactivó el autocommit para poder probar el rollback o el commit, pero cuando
todos los datos se hayan ingresado correctamente. Para esto hicimos un arreglo con
la información y se hizo un loop para que insertara todos los datos. Si no había
errores, al final del loop se hace el commit, sino arroja una excepción y muestra cuál
fue el error que hubo.
Como la tabla ciudad tiene una llave foránea de la tabla países, comenzamos
ingresando primero los datos de los países.
Las primeras líneas de código son para incluir el archivo que se conecta a la base
de datos. Después se declara el arreglo con el contenido de los países que se van a
incluir y se incluye en la variable $keys las llaves del arreglo.
El otro programa que hicimos fue para insertar las ciudades. Las ciudades
dependen de la llave foránea de paisId de la tabla países. Es similar el script que se
hizo para ciudades solo que cambia el arreglo y el recorrido que se hace por el
arreglo ya que es un arreglo de dos niveles. Se necesitan dos contadores para
recorrer el arreglo.
Para mostrar cómo la transacción no se completa si hay errores, vamos a hacer lo
siguiente. Primero vemos que la tabla de ciudades está vacía:
A propósito se cambia la llave de Brasil para que haya un error casi al final de la
transacción. Si estuviera el autocommit habilitado, los datos anteriores se
ingresaban automáticamente por cada iteración de los contadores, pero como se
especificó que solo si terminaba toda la transacción sin errores se ingresaran los
datos, no se van a ingresar si hay errores:
Los datos se venían ingresando correctamente, hasta que topa con la llave de país
que no existe, muestra el error y no se ingresa ningún registro como se puede
observar en la tabla de Ciudad:
Una vez se corrija el error los datos se ingresan correctamente, como se evidencia
en el navegador: