Wenn KI und Containerisierung auf IBM i treffen

Rémi Rouillot

Freitag 17 November 2023

  • Neuheiten

IBM i so machen, wie man SQL Server oder MySQL in .NET macht? Mit modernen Schnittstellen? Containerisiert auf ARM oder POWER? Das ist mit der von AUMERIAL angebotenen und für jedermann zugänglichen NTi-Lösung möglich. Der Beweis: Sogar #ChatGPT kann es ;)

Hauptbild des Artikels „Wenn KI und Containerisierung auf IBM i treffen“

Einleitung

Künstliche Intelligenz

Das Jahr 2023 war geprägt von den rasanten Fortschritten der künstlichen Intelligenz. Sie hat sich durch sehr populäre Tools wie ChatGPT demokratisiert. Wir verfügen heute über eine ganze Reihe von Werkzeugen, die es uns ermöglichen, aus einer Idee oder einem Gedanken ein Ergebnis zu erzeugen.

Die Containerisierung

Parallel dazu ist die Demokratisierung und der Aufschwung der Containerisierung zu beobachten. Sie ist zu einem unverzichtbaren Bestandteil der modernen Infrastruktur geworden. Indem sie neue Standards für die Entwicklung von Anwendungen setzt, vereinheitlicht sie die Entwicklungspraktiken und garantiert die Interoperabilität aller Komponenten ihres IS. In native Cloud-Technologien zu investieren ist daher kein Nice-to-have mehr, sondern ein Must-have. Ich empfehle Ihnen die Lektüre dieses Artikels, der von Google veröffentlicht wurde und die Bedeutung der Standardisierung von Tools unterstreicht.

...Und was ist mit IBM i in all dem?

Wie kommt man dazu, über KI, Containerisierung ... und IBM i zu sprechen? Bei AUMERIAL haben wir gerade NTi herausgebracht, einen IBM i-Zugangsanbieter für .NET, der cloud-nativ, eigenständig und containerisierbar ist.

In diesem Artikel werde ich Ihnen die Entwicklung und Veröffentlichung einer .NET-Webanwendung vorstellen, die auf die IBM i zugreift und in Docker in einer ARM-Umgebung containerisiert wird.

Das Schreiben dieser App wird von ChatGPT überwacht, um den Nutzen dieses Tools für selbst erfahrene Entwickler zu verdeutlichen. Es geht hier nicht darum, dass der Entwickler durch eine KI ersetzt wird, sondern vielmehr darum, die Leistungsfähigkeit dieses Tools zu zeigen, um die Produktivität bei der Entwicklung von .NET-Anwendungen zu steigern.

CQFD wir haben KI, Container und IBM i.

Das Szenario

Ich muss eine Webanwendung für die Buchung von Konzertkarten entwickeln. Wir werden die folgenden Schritte finden:

  • Das Design der relationalen Datenbank
  • Das Schreiben von Datenzugriffen (CRUDs)
  • Die Entwicklung der Webschnittstelle

Das Ganze wird in ASP.NET Blazor server entwickelt, auf einer DB2 for i-Datenbank mithilfe des von AUMERIAL entwickelten NTi-Datenproviders.

Dieser Artikel gibt einen Überblick über die verschiedenen Schritte bei der Entwicklung einer Anwendung und ihrer Bereitstellung. Ziel ist es nicht, ein detailliertes Tutorial zu präsentieren, sondern vielmehr einen Ansatz, um zu zeigen, dass :

  1. Der Einsatz eines virtuellen Assistenten kann den Entwickler bei seiner Arbeit unterstützen, indem er für mehr Produktivität sorgt.
  2. Die Entwicklung einer .NET/IBM i-Anwendung ist eine ebenso triviale Aufgabe wie die Arbeit mit jeder anderen Datenbank.
  3. Die von AUMERIAL angebotene NTi-Lösung vereinfacht die Anwendungsentwicklung und ermöglicht die Integration von IBM i in moderne Entwicklungsschemata..

Schließlich habe ich für dieses Beispiel eine ARM-Architektur gewählt, aber ohne den Code zu ändern, kann die Anwendung in einer POWER- oder x86-Umgebung ausgeführt werden..

Briefing mit ChatGPT

Ich beginne damit, meinem virtuellen Assistenten meine Vorgehensweise zu erklären:

article 1

Anschließend stelle ich meinen Anwendungsfall klar dar:

article 1

Das Briefing ist beendet, es kann losgehen!

Schritt 1: Erstellen der Datenbank

Um diese Art von Anwendung zu entwickeln, beginne ich immer mit der Modellierung der Situation und der Erstellung meines Datenmodells. Dann erstelle ich die verschiedenen Tabellen in meinem DBMS. Lassen Sie uns einen Blick auf ChatGPT werfen:

article 1

Beim erneuten Lesen dieser Vorlage fallen mir einige Punkte auf, die ich korrigieren muss:

article 1

Das Modell gefällt mir, wir gehen zur Implementierung in SQL über:

article 1

Wir kopieren alles in ACS, um dieses Skript auszuführen, überprüfen es und alles wird ohne Probleme erstellt:

article 1

Alles ist gut gelaufen, die Datenbank ist erstellt, jetzt müssen wir nur noch unsere Anwendung entwickeln!

article 1

Schritt 2: Erstellen Sie die Anwendung.

Erstellen Sie ein neues .NET-Projekt.

Wir erstellen ein asp.net blazor server Projekt. Wir fügen auch alle Abhängigkeiten hinzu, die wir benötigen werden:

  • MudBlazor, um die Schnittstelle zu erstellen.
  • Aumerial.Data.Nti und den ORM Dapper, um auf DB2 for i zuzugreifen.

article 1

Das Projekt ist nun mit seinen Abhängigkeiten erstellt. Nachdem wir das Projekt in Visual Studio (oder VSCode) geöffnet haben, folgen wir den Schritte zur Installation von MudBlazor.

Implementierung der Datenzugriffsschicht.

Beginnen wir mit den Modellen :

article 1

Wir bleiben bei einem sehr klassischen Ansatz, bei dem Klassen die verschiedenen Entitäten repräsentieren.

Wir realisieren dann die verschiedenen Dienste, die SQL für den Abruf von Daten aus den verschiedenen Modellen implementieren. Der NTi-Anbieter stellt die ADO.NET-Klassen aus, also bitten wir ChatGPT, uns eine Implementierung auf der Grundlage der generischen ADO.NET-Klassen zu erstellen, wobei die Parametermarken unserer SQL-Abfragen die Fragezeichen sind, um das von IBM i erwartete Format einzuhalten:

article 1

Ich überspringe die Details, aber nach der Überprüfung und einigen Nachbesserungen der von ChatGPT grob ausgearbeiteten Arbeit verfügen wir nun über alle Dienste für den Zugriff auf die Datenbank, die in SQL geschrieben und gegen SQL-Injection geschützt sind (Verwendung von Parametern und vorbereiteten Abfragen).

Die Abfragen werden über NTi direkt an die IBM i übermittelt, ohne Verwendung von Treibern wie ODBC oder OLEDB. Diese Anwendung ist also völlig agnostisch in Bezug auf die Plattform, auf der sie laufen wird. Wir werden unsere Anwendung ohne Probleme in Container packen können..

Wir können uns nun dem Teil der Benutzeroberfläche zuwenden.

Erstellen einer modernen Benutzeroberfläche

Schließlich können wir die Oberfläche unserer Anwendung mithilfe der vielfältigen und effizienten Werkzeuge von .NET erstellen, in diesem Fall [die Komponentenbibliothek MudBlazor] (https://mudblazor.com/docs/overview).

In diesem Stadium müssen wir die verschiedenen Seiten unserer Anwendung erstellen:

  • Anmeldungsseite/Konto erstellen.
  • Startseite/Anzeige von Konzerten und Ticketreservierungen.
  • Seite zur Anzeige der vom Nutzer gebuchten Tickets.
  • Seite zur Verwaltung der Profilinformationen des Nutzers

Fragen wir ChatGpt nach dem Code für die Seite, auf der Konzerte angezeigt und Tickets gebucht werden können:

article 1

Der von ChatGPT erzeugte Code ist noch einmal grob skizziert. Es müssen zwar noch einige Anpassungen vorgenommen werden, aber die Grundstruktur ist vorhanden. Das Ergebnis ist eine moderne und dynamische Webanwendung:

article 1

Die Daten stammen tatsächlich aus unserer relationalen Datenbank DB2 for i:

article 1

Sobald alle Seiten nach diesem Prinzip entwickelt wurden, ist unsere Anwendung bereit, in jeder Umgebung veröffentlicht zu werden, die Docker unterstützt oder über einen Container-Orchestrator (Openshift, Kubernetes, ...) verfügt.

Schritt 3: Erstellen des Docker-Images

Nachdem die Entwicklung der Anwendung abgeschlossen ist, können wir sie nun als Docker-Image veröffentlichen. Dazu folgen wir dem Prozess in Visual Studio, um unsere Anwendung als Docker-Image in einem entfernten Repository zu veröffentlichen.

Ein DockerFile wird automatisch erstellt:

article 1

Und die grafische Benutzeroberfläche von Visual Studio führt uns durch die verschiedenen Schritte der Veröffentlichung:

article 1

Nachdem diese Schritte durchgeführt wurden, wird unsere Anwendung in Docker geschoben:

article 1

Schritt 4: Starten der Anwendung in einem Container

In diesem letzten Teil müssen wir nur noch das Docker-Image der Anwendung von unserem Server abrufen und ausführen. In unserem Fall handelt es sich um einen Raspberry pi Single-Board-Computer, der auf der ARM-Architektur basiert. Es werden keine Abhängigkeiten benötigt, lediglich eine Docker-Installation.

article 1

Von einer SSH-Sitzung auf diesem Server aus führen wir den folgenden Befehl aus:

article 1

Dieser Befehl wird wie folgt übersetzt:

Führen Sie das Bild concertbookingapp aus dem Repository rrouillo in einem neuen Container namens ConcertApp aus, indem Sie den Port 5000 exponieren.

Sobald dieser Befehl ausgeführt wurde, startet unsere Anwendung und ist über einen Webbrowser zugänglich (in meinem Fall unter der Adresse 192.168.46.31):

article 1

Und die App ist verfügbar:

article 1

Fazit

Anhand dieses Artikels haben Sie also verstanden, dass ein virtueller Assistent wie ChatGPT eine wertvolle Hilfe bei der Entwicklung einer Anwendung sein kann, in diesem Fall zwischen .NET und IBM i.

Wir haben auch festgestellt, dass es mit der von AUMERIAL entwickelten NTi-Lösung nicht kompliziert ist, die IBM i von .NET aus zu verstehen, ganz im Gegenteil. Die Syntax ist die gleiche wie bei allen anderen Datenbankanbietern und man kann IBM i ohne Green Screen betreiben.

Was NTi von anderen Lösungen unterscheidet, ist seine vollständige Integration in .NET: Unabhängig von der Zielarchitektur kommuniziert unsere Anwendung mit dem IBM i. Dies ist ein sehr wichtiger Punkt, wenn Sie .NET/IBM i-Workloads nicht auf Windows-VMs laufen lassen wollen, was zu erheblichen Kosteneinsparungen und einer modernen Infrastruktur führen kann.

Schließlich ist alles, ob bei der Entwicklung der Anwendung oder bei ihrer Veröffentlichung, einfach, effizient und ohne Annäherungen. Jeder Entwickler kann diese Konzepte beherrschen und leistungsfähige und entschieden moderne Geschäftsanwendungen entwickeln.

Vielen Dank für Ihre Aufmerksamkeit beim Lesen dieses Artikels. Ich stehe Ihnen gerne für Fragen, Erläuterungen oder Anmerkungen rund um die oben behandelten Themen zur Verfügung. In einem späteren Artikel werde ich die Verwendung von eher IBM i-typischen Ressourcen wie CL-Befehlen und den Aufruf von RPG-Programmen aus .NET mit NTi behandeln..

Remi ROUILLOT.

Zurück