nouveautés

IA et conteneurs au service de l'IBM i avec .NET et NTi

ParRémi Rouillot

image d’illustration de l’article

Contenu détaillé de l’article:IA et conteneurs au service de l'IBM i avec .NET et NTi

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 développé par AUMERIAL et accessible à tous. La preuve, même ChatGPT sait le faire.

2023 aura été marquée par deux tendances de fond : l'essor fulgurant de l'intelligence artificielle, avec des outils comme ChatGPT qui se sont démocratisés à grande vitesse, et la montée en puissance de la conteneurisation, 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 du SI. Investir dans des technologies cloud natives n'est donc plus nice-to-have mais un must-have. Google l'illustre d'ailleurs très bien dans cet article sur l'importance de standardiser ses outils.

Et l'IBM i dans tout ça ? AUMERIAL vient de sortir NTi, un fournisseur d'accès à l'IBM i pour .NET, cloud-natif, autonome et conteneurisable. Cet article présente le développement et la publication d'une application web .NET accédant à l'IBM i, conteneurisée dans Docker en environnement ARM, avec ChatGPT comme assistant de développement, non pas pour remplacer le développeur, mais pour illustrer le gain de productivité que cet outil apporte.

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

Le scénario

L'objectif est de développer une application web de réservation de billets de concert, en ASP.NET Blazor Server, sur une base DB2 for i via NTi. Les étapes couvrent :

  • La conception de la base de données relationnelle
  • L'écriture des accès aux données (CRUD)
  • Le développement de l'interface web
  • La conteneurisation et le déploiement

L'article ne constitue pas un tutoriel détaillé, mais démontre trois points :

  1. Un assistant virtuel comme ChatGPT apporte une réelle productivité dans le développement
  2. Développer une application .NET sur IBM i est aussi simple qu'avec n'importe quelle autre base de données
  3. NTi permet d'intégrer l'IBM i aux schémas modernes de développement

L'architecture cible est ARM, mais sans modifier une ligne de code, l'application peut s'exécuter en environnement POWER ou x86.

Briefing avec ChatGPT

La démarche est d'abord présentée à l'assistant virtuel :

Démarche initiale présentée à ChatGPT pour le projet de réservation

Puis le cas d'utilisation est exposé clairement :

Prompt détaillé envoyé à ChatGPT pour générer l’application .NET avec IBM i

Le briefing est terminé, on peut commencer !

Étape 1 - Création de la base de données

La première étape est la modélisation des données. ChatGPT propose un premier modèle entités-relations :

Modélisation entités-relations Concert, Billet et Utilisateur sous DB2 for i

Après relecture, quelques points sont à corriger :

Corrections du modèle relationnel : clés primaires et normalisation Client

Le modèle validé, ChatGPT génère le script SQL :

Script SQL de création des tables dans DB2 for i avec ACS

Le script est exécuté dans ACS, tout se crée sans problème :

Exécution du script SQL dans ACS et création des tables DB2 for i

Étape 2 - Création de l'application

Création du projet

Le projet est créé en ligne de commande avec ses dépendances :

dotnet new blazorserver -n ConcertBookingApp
cd ConcertBookingApp
dotnet add package Dapper
dotnet add package MudBlazor
dotnet add package Aumerial.Data.Nti
  • MudBlazor pour la réalisation de l'interface
  • Aumerial.Data.Nti et l'ORM Dapper pour l'accès à DB2 for i

Une fois le projet ouvert dans Visual Studio ou VSCode, on suit les étapes d'installation de MudBlazor.

Couche d'accès aux données

ChatGPT génère les modèles C# représentant les entités :

Modèles C# représentant les entités relationnelles Concert et Billet

L'approche est classique : des classes représentent les entités, des services implémentent le SQL. NTi exposant les classes ADO.NET standard, ChatGPT produit une implémentation basée sur ces classes génériques, avec des marqueurs de paramètres en ? pour respecter le format attendu par l'IBM i :

Implémentation des services SQL générés avec ChatGPT et NTi pour DB2 for i

Après vérification et quelques ajustements, tous les services d'accès aux données sont en place, écrits en SQL, protégés contre l'injection SQL via des paramètres et requêtes préparées.

Les requêtes sont soumises directement à l'IBM i via NTi, sans ODBC ni OLE-DB. L'application est totalement agnostique à la plateforme cible.

Interface moderne avec MudBlazor

Les différentes pages de l'application sont créées grâce à la bibliothèque de composants MudBlazor :

  • 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

ChatGPT est sollicité pour générer le code de chaque page. Par exemple, pour la page d'affichage des concerts et de réservation :

Code généré par ChatGPT pour la page Blazor de réservation de concerts

Le code généré dégrossit le travail, quelques ajustements restent nécessaires, mais la structure est là :

Affichage de l'application de réservation accessible via navigateur web local

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

Affichage des données relationnelles extraites de DB2 for i

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

Étape 3 - Création de l'image Docker

L'application est publiée sous forme d'image Docker depuis Visual Studio. Le Dockerfile est généré automatiquement :

FROM mcr.microsoft.com/dotnet/aspnet:7.0-bookworm-slim-arm64v8 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY ["ConcertBookingApp.csproj", "."]
RUN dotnet restore "./ConcertBookingApp.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "ConcertBookingApp.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "ConcertBookingApp.csproj" -c Release -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ConcertBookingApp.dll"]

L'interface de Visual Studio guide ensuite les étapes de publication :

Interface Visual Studio pour publier l’image Docker de l’application

L'image est poussée sur Docker Hub :

Application publiée dans Docker Hub depuis Visual Studio

Étape 4 - Déploiement sur Raspberry Pi

L'image est récupérée et exécutée sur un Raspberry Pi ARM, sans aucune dépendance autre que Docker :

Exécution de l’image Docker de l’application sur Raspberry Pi ARM

docker run -it --rm -p 5000:80 --name ConcertApp rrouillo/concertbookingapp

Cette commande lance l'image concertbookingapp du dépôt rrouillo dans un conteneur nommé ConcertApp, en exposant le port 5000.

L'application démarre et est accessible depuis un navigateur :

Application de réservation accessible via navigateur web local

Et l'appli est disponible :

Application .NET IBM i fonctionnelle et disponible dans le conteneur Docker

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.


Rémi ROUILLOT

Démarrez dès maintenant

Récupérez votre licence d’essai gratuite en ligne
et connectez vos applications .NET à votre IBM i en quelques minutes.

Créez votre compte

Connectez-vous au portail Aumerial, générez votre licence d’essai et activez NTi sur votre IBM i en quelques instants.

Démarrer l’essai

Ajouter NTi à votre projet

Installez NTi Data Provider depuis NuGet dans Visual Studio et référencez-le dans votre projet .NET.

Voir la documentation

Besoin d’aide ?

Si vous avez des questions sur nos outils ou sur les options de licence, notre équipe est disponible pour vous aider.

Nous contacter
30 jours d’essai gratuit activation immédiate sans engagement aucun composant à installer côté IBM i