.NET y DB2 for i: IA y contenedores al servicio de IBM i

¿Usar IBM i como se usa SQL Server o MySQL en .NET? ¿Con interfaces modernas? ¿Contenerizado en ARM o POWER? Es posible gracias a la solución NTi propuesta por AUMERIAL y accesible para todos. La prueba, incluso #ChatGPT sabe cómo hacerlo ;)

Imagen ilustrativa del artículo

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 :

  1. El uso de un asistente virtual puede ayudar al desarrollador en su trabajo aumentando la productividad.
  2. Desarrollar una aplicación .NET/IBM i es una tarea tan trivial como utilizar cualquier otra base de datos.
  3. 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:

Enfoque inicial presentado a ChatGPT para el proyecto de reservas

Luego explico claramente mi caso de uso:

Prompt detallado enviado a ChatGPT para generar la aplicación .NET con IBM i

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:

Modelado ER de Concierto, Boleto y Usuario en DB2 for i

Al releer este modelo, he observado algunos puntos que deben corregirse:

Correcciones al modelo relacional: claves primarias y normalización Cliente

Estoy contento con el modelo, así que pasaremos a implementarlo en SQL:

Script SQL de creación de tablas en DB2 for i con ACS

Copiamos todo en ACS para ejecutar este script, lo comprobamos y todo se crea sin problemas:

Ejecución del script SQL en ACS y creación de tablas DB2 for i

Todo ha ido bien, la base de datos está creada y sólo nos queda desarrollar nuestra aplicación.

Confirmación de la base de datos creada en DB2 for i

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

Proyecto ASP.NET Core Blazor Server con dependencias MudBlazor y NTi

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:

Modelos C# que representan las entidades relacionales Concierto y Boleto

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:

Servicios SQL implementados con ChatGPT y NTi para DB2 for 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:

Código generado por ChatGPT para la página Blazor de reserva de conciertos

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:

Visualización de datos relacionales extraídos de DB2 for 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:

Dockerfile generado automáticamente para publicar la aplicación .NET

Y la interfaz gráfica de Visual Studio nos guía por las distintas etapas de la publicación:

Interfaz de Visual Studio para publicar la imagen Docker de la aplicación

Una vez completados estos pasos, nuestra aplicación es empujada a Docker:

Aplicación publicada en Docker Hub desde Visual Studio

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.

Ejecución de la imagen Docker de la aplicación en Raspberry Pi ARM

Desde una sesión SSH en este servidor, ejecute el siguiente comando:

Comando SSH docker run para iniciar la aplicación en contenedor

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):

Aplicación de reservas accesible a través de navegador web local

Y la aplicación está disponible:

Aplicación .NET IBM i funcional y disponible en el contenedor Docker

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