Introducción
Inteligencia Artificial
El año 2023 habrá estado marcado por el fulgurante progreso de la inteligencia artificial. Se ha democratizado a través de herramientas muy populares como ChatGPT. Ahora disponemos de toda una gama de herramientas que pueden producir un resultado a partir de una idea o un pensamiento.
Containerización
Al mismo tiempo, asistimos a la democratización y creciente popularidad de la contenedorización. Se ha convertido en una parte esencial de la infraestructura moderna. Al establecer nuevos estándares en el desarrollo de aplicaciones, normaliza las prácticas de desarrollo y garantiza la interoperabilidad de todos los componentes de SI. Así que invertir en tecnologías nativas de la nube ya no es nice-to-have sino un must-have. También recomiendo la lectura de este artículo publicado por Google, que destaca la importancia de estandarizar las herramientas.
...¿Y qué pasa con IBM i?
¿Cómo podemos acabar hablando de IA, containerización... e IBM i? En AUMERIAL acabamos de lanzar NTi, un proveedor de acceso a IBM i para .NET nativo en la nube, autónomo y contenedorizable.
En este artículo, voy a guiarte a través del desarrollo y publicación de una aplicación web .NET que accede a IBM i, contenedorizada en Docker en un entorno ARM.
La escritura de esta aplicación será supervisada por ChatGPT, para mostrar el interés de esta herramienta incluso para un desarrollador experimentado. No se trata aquí de sustituir al desarrollador por una IA, sino de demostrar la potencia de esta herramienta para aumentar la productividad en el desarrollo de aplicaciones .NET.
tenemos AI, contenedor e IBM i.
El escenario
Necesito desarrollar una aplicación web para reservar entradas de conciertos. Las etapas son las siguientes
- Diseño de la base de datos relacional
- Escribir los accesos a datos (CRUDs)
- Desarrollo de la interfaz web
Se desarrollará en el servidor ASP.NET Blazor, sobre una base de datos DB2 para i utilizando el proveedor de datos NTi desarrollado por AUMERIAL.
Este artículo repasa las distintas etapas que intervienen en el diseño y despliegue de una aplicación. No se pretende presentar un tutorial detallado, sino más bien una aproximación para demostrar que :
- El uso de un asistente virtual puede ayudar al desarrollador en su trabajo aumentando la productividad.
- Desarrollar una aplicación .NET/IBM i es una tarea tan trivial como utilizar cualquier otra base de datos.
- La solución NTi de AUMERIAL simplifica el desarrollo de aplicaciones y permite integrar IBM i en los esquemas de desarrollo modernos.
Por último, he elegido como objetivo una arquitectura ARM para este ejemplo, sin embargo, sin modificar el código, la aplicación puede ejecutarse en un entorno POWER o x86.
Briefing con ChatGPT
Empiezo por explicar mi enfoque a mi asistente virtual:
Luego explico claramente mi caso de uso:
Ahora que la sesión informativa ha terminado, ¡podemos empezar!
Paso 1: Crear la base de datos
Para desarrollar este tipo de aplicaciones, siempre empiezo por modelar la situación y crear mi modelo de datos. A continuación, creo las distintas tablas en mi SGBD. Echemos un vistazo a ChatGPT:
Al releer este modelo, he observado algunos puntos que deben corregirse:
Estoy contento con el modelo, así que pasaremos a implementarlo en SQL:
Copiamos todo en ACS para ejecutar este script, lo comprobamos y todo se crea sin problemas:
Todo ha ido bien, la base de datos está creada y sólo nos queda desarrollar nuestra aplicación.
Paso 2: Creación de la aplicación
Creando un nuevo proyecto .NET
Vamos a crear un proyecto asp.net blazor server. También añadiremos todas las dependencias que necesitaremos:
- MudBlazor** para crear la interfaz
- Aumerial.Data.Nti** y el ORM Dapper para acceder a DB2 for i
El proyecto ya está creado con sus dependencias. Una vez abierto el proyecto en Visual Studio (o VSCode), siga los pasos de instalación de MudBlazor.
Implementación de la capa de acceso a datos
Empecemos con los modelos:
Seguimos un enfoque muy tradicional en el que las clases representan las distintas entidades.
A continuación, creamos los distintos servicios que implementan el SQL para recuperar datos de los distintos modelos. El proveedor NTi expone las clases ADO.NET, así que pedimos a ChatGPT que cree una implementación basada en las clases genéricas ADO.NET, especificando que los signos de parámetro para nuestras consultas SQL sean los signos de interrogación para cumplir con el formato esperado por el IBM i:
No voy a entrar en todos los detalles, pero después de la verificación y algunos ajustes del trabajo realizado por ChatGPT, ahora tenemos todos los servicios de acceso a bases de datos, escritos en SQL y protegidos contra inyección SQL (uso de parámetros y consultas preparadas).
Las consultas se envían directamente a IBM i a través de NTi, sin utilizar controladores como ODBC u OLEDB. Por lo tanto, esta aplicación es totalmente agnóstica con respecto a la plataforma. Podemos contenerizar fácilmente nuestra aplicación.
Ahora podemos pasar a la interfaz.
Creación de una interfaz moderna
Por último, podemos crear la interfaz de nuestra aplicación utilizando las ricas y eficaces herramientas que ofrece .NET, en este caso la biblioteca de componentes MudBlazor.
En esta etapa, necesitamos crear las diferentes páginas de nuestra aplicación:
- Página de inicio de sesión/creación de cuenta
- Página de inicio/visualización de conciertos y reserva de entradas
- Página de visualización de las entradas reservadas por el usuario
- Página de gestión de la información del perfil del usuario
Vamos a pedir a ChatGpt el código para la página de visualización de conciertos y reserva de entradas:
El código generado por ChatGPT una vez más hace un buen trabajo, aunque todavía hay que hacer algunos ajustes, pero la estructura básica está ahí. El resultado es una aplicación web moderna y dinámica:
![Interfaz Blazor moderna que muestra conciertos disponibles para reservar(/images/articles/article-net-docker-db2-for-i-ia-conteneurisation/12.webp)
Los datos proceden de nuestra base de datos relacional DB2 para i:
Una vez desarrolladas todas las páginas siguiendo este principio, nuestra aplicación está lista para ser publicada en cualquier entorno que soporte Docker o disponga de un orquestador de contenedores (Openshift, Kubernetes, etc.).
Paso 3: Creación de la imagen Docker
Ahora que hemos terminado de desarrollar la aplicación, podemos publicarla como imagen Docker. Para ello, seguimos el proceso de Visual Studio para publicar nuestra aplicación como imagen Docker en un repositorio remoto.
Se crea automáticamente un DockerFile:
Y la interfaz gráfica de Visual Studio nos guía por las distintas etapas de la publicación:
Una vez completados estos pasos, nuestra aplicación es empujada a Docker:
Paso 4: Lanzar la aplicación en un contenedor
En esta última parte, todo lo que tenemos que hacer es recuperar la imagen Docker de la aplicación desde nuestro servidor y ejecutarla. En nuestro caso, se trata de un ordenador Raspberry pi monoplaca basado en arquitectura ARM. No se requieren dependencias, sólo una instalación de Docker.
Desde una sesión SSH en este servidor, ejecute el siguiente comando:
Este comando se traduce como:
Ejecutar la imagen concertbookingapp del repositorio rrouillo en un nuevo contenedor llamado ConcertApp, exponiendo el puerto 5000.
Una vez ejecutado este comando, nuestra aplicación arranca y puede ser accedida desde un navegador web (en la dirección 192.168.46.31 en mi caso):
Y la aplicación está disponible:
Conclusión
Con este artículo, habrás comprendido que un asistente virtual como ChatGPT puede ser una ayuda inestimable en el desarrollo de una aplicación, en este caso entre .NET y el IBM i.
También hemos visto que con la solución NTi desarrollada por AUMERIAL, manejarse con el IBM i desde .NET no es nada complejo, sino todo lo contrario. La sintaxis es idéntica a la de todos los demás proveedores de bases de datos, y se puede trabajar con IBM i sin que aparezca una pantalla verde.
Donde NTi se diferencia de otras soluciones es en su total integración con .NET: sea cual sea la arquitectura de destino, nuestra aplicación se comunica con IBM i. Se trata de un punto muy importante si desea poder ejecutar cargas de trabajo .NET/IBM i en otro lugar que no sean VM Windows... con un ahorro significativo y una infraestructura realmente moderna.
Por último, tanto a la hora de desarrollar la aplicación como de publicarla, todo es sencillo, eficiente y directo. Cualquier desarrollador puede dominar estos conceptos y desarrollar aplicaciones empresariales de alto rendimiento y decididamente modernas.
Gracias por leer este artículo. Estaré encantado de responder a cualquier pregunta que puedas tener sobre los temas anteriores. En un próximo artículo cubriré el uso de más recursos tipo IBM i, como los comandos CL y la llamada a programas RPG desde .NET con NTi.
Rémi ROUILLOT