Está en la página 1de 15

PERSISTENCIA DE DATOS

TRANSACCIONALES

Entrega 2

Presentado por:
Jhon Fredy Vélez Londoño Cod: 1911023172
Raúl Edgardo Casallas Zamora Cod: 1911024589

Docente: Silva Monsalve Alexandra María

Universidad Politécnico Grancolombiano


Ingeniería diseño e innovación
Bogotá 2020
TABLA DE CONTENIDOS

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

1) Socket server (demonio) que identifica el tipo de transacción y


ejecuta la operación sobre la base de datos:

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

En la siguiente imagen ilustramos el código que contiene dicho archivo:


Las 5 primeras líneas de código son las variables con sus respectivos valores que
deben coincidir con los que MySQL tiene configurados. Luego se crea el objeto
$conn instanciando la clase mysqli con los parámetros correspondientes. Para esta
ocasión se establece también la conexión con la base de datos; este valor es
opcional, pero nosotros ya estamos implementando de una vez la conexión con la
base de datos que vamos a utilizar.

Después se verifica si se estableció la conexión. Si hay un error el script se detiene


e indica el error por el que no se estableció la conexión. Pero si se establece la
conexión se muestra un aviso indicando que la conexión se realizó
satisfactoriamente como se muestra en la imagen a continuación:
Una vez establecida la conexión, cambiamos el valor de las variables iniciales para
ver los mensajes de error cuando algún parámetro es incorrecto.

Si el host no se especifica correctamente muestra el siguiente error:

Si no se define correctamente el usuario muestra el siguiente error:

En la siguiente imagen está el error si no se especifica la contraseña correcta:


Si no se establece la correcta base de datos, muestra el siguiente error:

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.

2) Socket cliente que llama al socket server para crear un cliente


(inserción de un dato):

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.

Luego se desactiva el autocommit y se especifica que comienza la transacción.

Se incluye el código encargado de la transacción dentro de un try/catch para poder


ver en pantalla si hay algún problema en la inserción de datos.
El código recorre el arreglo y por cada registro hace un query. Si no hay errores solo
imprime en pantalla los datos ingresados como se ve en la siguiente imagen:

Y se puede constatar que se ingresaron los registros en la base de datos:

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:

Y así mismo se observa en la base de datos que se ingresaron los registros


correctamente:
Se pudo constatar que la transacción se realiza cuando no hay errores. En este
caso forzamos el error escribiendo mal el Id de una llave foránea, pero pueden ser
muchas razones por las que una transacción no se termine y se debe garantizar que
no queden insertados registros a medias.
3) Agregar al documento el código de cada operación y explicar
que hace cada programa (documentar el programa):
Adjunto a este documento encontramos lo siguientes archivos:
/connect/conn.php
/inserts/insert-cities.php
/inserts/insert-countries.php

La explicación de lo que hacen los programas se realizó en los puntos anteriores.


REFERENCIAS

PHP. Manual PHP – Sockets. Recuperado de:


https://www.php.net/manual/es/book.sockets.php
Lázaro, D. (2018). Sockets en PHP. Recuperado de: https://diego.com.es/sockets-en-
php#:~:text=1.,emplear%2C%20se%20les%20denomina%20socket

También podría gustarte