Quand l'IA et la conteneurisation rencontrent l'IBM i

Rémi Rouillot

vendredi 17 novembre 2023

  • Nouveautés

Faire de l'IBM i comme on fait du SQL Server ou du MySQL en .NET ? Avec des interfaces modernes ? Conteneurisé sur ARM ou POWER ? C'est possible grâce à la solution NTi proposée par AUMERIAL et accessible à tous. La preuve, même #ChatGPT sait le faire ;)

Image principale de l’article « Quand l'IA et la conteneurisation rencontrent l'IBM i »

Introduction

L'Intelligence Artificielle

Cette année 2023 aura été marquée par les progrès fulgurants de l'intelligence artificielle. Elle s'est démocratisée à travers des outils très populaires tels que ChatGPT. Nous disposons aujourd'hui de toute une panoplie d'outils permettant de produire un résultat à partir d'une idée ou d'une pensée.

La Conteneurisation

En parallèle, on assiste à la démocratisation et à la montée en puissance de la conteneurisation. Elle est devenue un incontournable de l'infrastructure moderne. En posant de nouveaux standards dans le développement d'applications, elle uniformise les pratiques de développement et garantit une interopérabilité de tous les composants de son SI. Investir dans des technologies cloud natives n'est donc plus nice-to-have mais un must-have. Je vous recommande d'ailleurs la lecture cet article publié par Google et mettant en évidence l'importance de standardiser ses outils.

...Et l'IBM i dans tout ça ?

Comment peut-on se retrouver à parler d'IA, de conteneurisation... et d'IBM i ? Chez AUMERIAL, nous venons de sortir NTi, un fournisseur d'accès à l'IBM i pour .NET cloud-natif, autonome et conteneurisable.

Je vais dans cet article vous présenter le développement et la publication d'une application web .NET accédant à l'IBM i, conteneurisée dans Docker en environnement ARM.

L'écriture de cette appli sera supervisée par ChatGPT, pour montrer l'intérêt de cet outil pour un développeur même expérimenté. Pas question ici d'envisager que le développeur soit remplacé par une IA, mais plutôt de montrer la puissance de cet outil pour gagner en productivité dans le développement d'applications .NET.

CQFD on a de l'IA, du container et de l'IBM i.

Le scénario

Je dois développer une application web de réservation de billets de concert. On retrouvera les étapes suivantes:

  • La conception de la base de données relationnelle
  • L'écriture des accès aux données (les CRUDs)
  • Le développement de l'interface web

Le tout sera développé en ASP.NET Blazor server, sur une base de données DB2 for i grâce aux fournisseur de données NTi développé par AUMERIAL.

Cet article passe en revue les différentes étapes de la conception d'une application et de son déploiement. L'objectif n'est pas de présenter un tutoriel détaillé mais plutôt une approche pour démontrer que :

  1. L'utilisation d'un assistant virtuel peut aider le développeur dans son travail en apportant de la productivité
  2. Développer une application .NET/IBM i est une tâche aussi triviale qu'avec n'importe quel autre base de données
  3. La solution NTi proposée par AUMERIAL simplifie le développement d'applications et permet d'intégrer l'IBM i aux schémas modernes de développement.

Enfin, j'ai choisi de cibler une architecture ARM pour cet exemple, cependant sans modifier le code, l'application peut s'exécuter en environnement POWER ou x86.

Briefing avec ChatGPT

Je commence par expliquer ma démarche auprès de mon assistant virtuel:

article 1

Ensuite je lui expose clairement mon cas d'utilisation:

article 1

Le briefing est terminé, on peut commencer !

Etape 1: Création de la base de données

Pour développer ce genre d'application, je commence toujours par la modélisation de la situation et la création de mon modèle de données. Ensuite je crée les différentes tables dans mon SGBD. Faisons le point avec ChatGPT:

article 1

En relisant ce modèle, je remarque quelques point à corriger:

article 1

Le modèle me convient, on passe à l'implémentation en SQL:

article 1

On copie tout dans ACS pour exécuter ce script, on vérifie et tout se crée sans problème:

article 1

Tout s'est bien passé, la base de données est créée, il ne reste plus qu'à développer notre application !

article 1

Etape 2: Création de l'application

Création d'un nouveau projet .NET

Nous allons créer un projet asp.net blazor server. On ajoute également toutes les dépendance dont nous aurons besoins:

  • MudBlazor pour la réalisation de l'interface
  • Aumerial.Data.Nti et l'ORM Dapper pour l'accès à DB2 for i

article 1

Le projet est maintenant créé avec ses dépendances. Une fois le projet ouvert dans Visual Studio (ou VSCode), on suit les étapes d'installation de MudBlazor.

Implémentation de la couche d'accès aux données

Commençons par les modèles:

article 1

On reste sur une approche très classique où des classes représentent les différentes entités.

On réalise ensuite les différents services qui implémentent le SQL pour la récupération des données dans les différents modèles. Le fournisseur NTi expose les classes ADO.NET, on demande donc à ChatGPT de nous réaliser une implémentation basé sur les classes génériques ADO.NET, en précisant bien que les marque de paramètres de nos requêtes SQL sont les points d'interrogation pour respecter le format attendu par l'IBM i:

article 1

Je passe les détails mais après vérification et quelques retouches du travail dégrossi par ChatGPT nous disposons maintenant de tous les services d'accès à la base de données, écrits en SQL et protégés contre l'injection de SQL (utilisation de paramètres et requêtes préparées).

Les requêtes sont directement soumises à l'IBM i via NTi sans utilisation de driver comme l'ODBC ou OLEDB. Cette application est donc totalement agnostique à la plateforme sur laquelle elle va s'exécuter. On pourra sans problème conteneuriser notre application.

Nous pouvons maintenant passer à la partie interface.

Création d'une interface moderne

Enfin, nous pouvons créer l'interface de notre application grâce à la richesse et l'efficacité des outils offerts par .NET, en l'occurence la bibliothèque de composants MudBlazor.

À ce stade, il faut créer les différentes pages de notre application:

  • Page de connexion/création de compte
  • Page d'accueil/affichage des concerts et réservation de billets
  • Page d'affichage des billets réservés par l'utilisateur
  • Page de gestion des informations du profil utilisateur

Demandons à ChatGpt le code de la page d'affichage des concerts et de réservation de billets:

article 1

Le code généré par ChatGPT dégrossit encore une fois le travail, il reste toutefois quelques ajustements à réaliser mais la structure de base est présente. Le résultat est une application web moderne et dynamique:

article 1

Les données remontent bien de notre base de données relationnelle DB2 for i:

article 1

Une fois toutes les pages développées selon ce principe, notre application est prête à être publiée dans n'importe quel environnement supportant docker ou disposant d'un orchestrateur de conteneurs (Openshift, Kubernetes,...).

Etape 3: Création de l'image Docker

Le développement de l'application étant terminé, nous pouvons maintenant la publier sous forme d'image Docker. Pour cela on suit le processus dans Visual Studio permettant de publier notre application comme image Docker dans un dépôt distant.

Un DockerFile est créé automatiquement:

article 1

Et l'interface graphique de Visual Studio nous guide dans les différentes étapes de publication:

article 1

Une fois ces étapes suivies, notre application est poussée dans Docker:

article 1

Etape 4: Démarrage de l'application dans un container

Dans cette dernière partie, il ne nous reste plus qu'à récupérer l'image Docker de l'application depuis notre serveur et à l'exécuter. Dans notre cas, il s'agit d'un ordinateur mono-carte Raspberry pi basé sur l'architecture ARM. Il n'y a besoin d'aucune dépendance, simplement d'une installation de docker.

article 1

Depuis une session SSH sur ce serveur, on exécute la commande suivante:

article 1

Cette commande se traduit par:

Exécuter l'image concertbookingapp du dépôt rrouillo dans un nouveau container nommé ConcertApp en exposant le port 5000

Une fois cette commande exécutée, notre application démarre et est accessible depuis un navigateur web (à l'adresse 192.168.46.31 dans mon cas):

article 1

Et l'appli est disponible:

article 1

Conclusion

À travers cet article, vous aurez donc compris qu'un assistant virtuel comme ChatGPT peut être d'une aide précieuse dans le développement d'une application, en l'occurrence entre .NET et l'IBM i.

Nous avons également pu constater qu'avec la solution NTi développée par AUMERIAL, appréhender l'IBM i depuis .NET n'a rien de complexe, bien au contraire. La syntaxe est identique à celle de tous les autres fournisseurs de base de données et on peut faire de l'IBM i sans faire d'écran vert.

Là où NTi se différencie des autres solutions, c'est dans son intégration totale à .NET: peu importe l'architecture cible, notre application communique avec l'IBM i. C'est un point très important pour pouvoir faire tourner des charges de travail .NET/IBM i ailleurs que sur des VMs Windows... avec de belles économies à la clé et une vraie infrastructure moderne.

Enfin, que ce soit dans le développement de l'application ou dans sa publication, tout est simple, efficace et sans approximation. N'importe quel développeur peut maîtriser ces concepts et développer des applications métier performantes et résolument modernes.

Merci pour votre attention dans la lecture de cet article, je suis à votre disposition pour toute question, précision ou remarque autour des sujets abordés ci-dessus. Dans un prochain article je couvrirai l'utilisation de ressources plus typées IBM i comme les commandes CL et l'appel de programmes RPG depuis .NET avec NTi.

Rémi ROUILLOT

Retour