.NET & DB2 for i: IA e container al servizio dell'IBM i

Fare IBM i come si fa SQL Server o MySQL in .NET? Con interfacce moderne? Containerizzato su ARM o POWER? È possibile grazie alla soluzione NTi proposta da AUMERIAL e accessibile a tutti. La prova, anche #ChatGPT sa farlo ;)

immagine illustrativa dell'articolo “.NET & DB2 for i: IA e container al servizio dell'IBM i”

Introduzione

Intelligenza artificiale

L'anno 2023 sarà segnato dai progressi folgoranti dell'intelligenza artificiale. È stata democratizzata attraverso strumenti molto popolari come ChatGPT. Ora disponiamo di un'intera gamma di strumenti in grado di produrre un risultato a partire da un'idea o da un pensiero.

Containerizzazione

Allo stesso tempo, stiamo assistendo alla democratizzazione e alla crescente popolarità della containerizzazione. È diventata una parte essenziale dell'infrastruttura moderna. Stabilendo nuovi standard nello sviluppo delle applicazioni, standardizza le pratiche di sviluppo e garantisce l'interoperabilità di tutti i componenti IS. Pertanto, investire in tecnologie cloud native non è più nice-to-have ma must-have. Consiglio anche la lettura di questo articolo pubblicato da Google, che sottolinea l'importanza di standardizzare i propri strumenti.

...E che dire di IBM i?

Come possiamo finire a parlare di AI, containerizzazione... e IBM i? In AUMERIAL abbiamo appena rilasciato NTi, un fornitore di accesso al cloud IBM i per .NET, nativo, autonomo e containerizzabile.

In questo articolo, vi illustrerò lo sviluppo e la pubblicazione di un'applicazione web .NET che accede a IBM i, containerizzata in Docker in un ambiente ARM.

La scrittura di questa applicazione sarà supervisionata da ChatGPT, per dimostrare l'interesse di questo strumento anche per uno sviluppatore esperto. Non si tratta di sostituire lo sviluppatore con un'intelligenza artificiale, ma di dimostrare la potenza di questo strumento per aumentare la produttività nello sviluppo di applicazioni .NET.

Quindi abbiamo AI, container e IBM i.

Lo scenario

Devo sviluppare un'applicazione web per la prenotazione di biglietti per concerti. Sono coinvolte le seguenti fasi:

  • Progettazione del database relazionale
  • Scrittura degli accessi ai dati (CRUD)
  • Sviluppo dell'interfaccia web

Il tutto sarà sviluppato in ASP.NET Blazor server, su un database DB2 for i utilizzando il data provider NTi sviluppato da AUMERIAL.

Questo articolo passa in rassegna le varie fasi della progettazione di un'applicazione e della sua distribuzione. L'obiettivo non è quello di presentare un tutorial dettagliato, ma piuttosto un approccio per dimostrare che :

  1. L'uso di un assistente virtuale può aiutare lo sviluppatore nel suo lavoro aumentando la produttività.
  2. Lo sviluppo di un'applicazione .NET/IBM i è un compito banale come l'utilizzo di qualsiasi altro database.
  3. La soluzione NTi di AUMERIAL semplifica lo sviluppo di applicazioni e consente di integrare l'IBM i nei moderni schemi di sviluppo.

Infine, per questo esempio ho scelto di puntare su un'architettura ARM, ma senza modificare il codice, l'applicazione può essere eseguita in un ambiente POWER o x86.

Briefing con ChatGPT

Inizio spiegando il mio approccio al mio assistente virtuale:

Approccio iniziale presentato a ChatGPT per il progetto di prenotazione

Poi spiego chiaramente il mio caso d'uso:

Prompt dettagliato inviato a ChatGPT per generare l’app .NET con IBM i

Ora che il briefing è finito, possiamo iniziare!

Passo 1: Creare il database

Per sviluppare questo tipo di applicazione, inizio sempre modellando la situazione e creando il mio modello di dati. Poi creo le varie tabelle nel mio DBMS. Diamo un'occhiata a ChatGPT:

Modellazione ER di Concerto, Biglietto e Utente in DB2 for i

Rileggendo questo modello, ho notato alcuni punti che devono essere corretti:

Correzioni al modello relazionale: chiavi primarie e normalizzazione Cliente

Sono soddisfatto del modello, quindi passiamo all'implementazione in SQL:

Script SQL per la creazione delle tabelle in DB2 for i con ACS

Copiamo tutto in ACS per eseguire questo script, lo controlliamo e tutto viene creato senza problemi:

Esecuzione dello script SQL in ACS e creazione delle tabelle DB2 for i

Tutto è andato bene, il database è stato creato e non resta che sviluppare la nostra applicazione!

Conferma della creazione del database in DB2 for i

Passo 2: creazione dell'applicazione

Creazione di un nuovo progetto .NET

Creeremo un progetto asp.net blazor server. Aggiungeremo anche tutte le dipendenze di cui avremo bisogno:

  • MudBlazor** per creare l'interfaccia
  • Aumerial.Data.Nti** e l'ORM Dapper per accedere a DB2 for i

![Progetto ASP.NET Core Blazor Server con dipendenze MudBlazor e NTi(/images/articles/article-conteneurisation/8.webp)

Il progetto è ora creato con le sue dipendenze. Una volta aperto il progetto in Visual Studio (o VSCode), seguire i passi di installazione di MudBlazor.

Implementazione del livello di accesso ai dati

Cominciamo con i modelli:

Modelli C# che rappresentano le entità relazionali Concerto e Biglietto

Ci atteniamo a un approccio molto tradizionale, in cui le classi rappresentano le diverse entità.

Poi creiamo i vari servizi che implementano l'SQL per recuperare i dati dai vari modelli. Il fornitore NTi espone le classi ADO.NET, quindi chiediamo a ChatGPT di creare un'implementazione basata sulle classi generiche ADO.NET, specificando che i parametri delle nostre query SQL sono i punti interrogativi per rispettare il formato previsto dall'IBM i:

Servizi SQL implementati con ChatGPT e NTi per DB2 for i

Non entrerò nei dettagli, ma dopo aver controllato e messo a punto il lavoro svolto da ChatGPT, ora disponiamo di tutti i servizi di accesso al database, scritti in SQL e protetti contro le SQL injection (uso di parametri e query preparate).

Le query vengono inviate direttamente all'IBM i tramite NTi senza l'uso di driver come ODBC o OLEDB. Questa applicazione è quindi totalmente agnostica rispetto alla piattaforma. Possiamo facilmente containerizzare la nostra applicazione.

Possiamo ora passare all'interfaccia.

Creare un'interfaccia moderna

Infine, possiamo creare l'interfaccia della nostra applicazione utilizzando i ricchi ed efficienti strumenti offerti da .NET, in questo caso la libreria di componenti MudBlazor.

A questo punto, dobbiamo creare le varie pagine della nostra applicazione:

  • Pagina di accesso/creazione dell'account
  • Pagina iniziale/visualizzazione dei concerti e delle prenotazioni dei biglietti
  • Pagina di visualizzazione dei biglietti prenotati dall'utente
  • Pagina di gestione delle informazioni sul profilo dell'utente

Chiediamo a ChatGpt il codice per la pagina di visualizzazione dei concerti e di prenotazione dei biglietti:

Codice generato da ChatGPT per la pagina Blazor di prenotazione concerti

Il codice generato da ChatGPT fa ancora una volta un buon lavoro, anche se ci sono ancora alcuni aggiustamenti da fare, ma la struttura di base c'è. Il risultato è un'applicazione web moderna e dinamica:

Interfaccia Blazor moderna che mostra i concerti prenotabili

I dati provengono dal nostro database relazionale DB2 for i:

Visualizzazione dei dati relazionali estratti da DB2 for i

Una volta sviluppate tutte le pagine secondo questo principio, la nostra applicazione è pronta per essere pubblicata in qualsiasi ambiente che supporti Docker o che disponga di un orchestratore di container (Openshift, Kubernetes, ecc.).

Passo 3: Creare l'immagine Docker

Ora che abbiamo finito di sviluppare l'applicazione, possiamo pubblicarla come immagine Docker. Per farlo, seguiamo la procedura di Visual Studio per pubblicare la nostra applicazione come immagine Docker in un repository remoto.

Viene creato automaticamente un file Docker:

Dockerfile generato automaticamente per la pubblicazione dell’app .NET

E l'interfaccia grafica di Visual Studio ci guida attraverso le varie fasi della pubblicazione:

Interfaccia di Visual Studio per pubblicare l’immagine Docker dell’applicazione

Una volta completati questi passaggi, la nostra applicazione viene inserita in Docker:

Applicazione pubblicata su Docker Hub da Visual Studio

Passo 4: Avvio dell'applicazione in un contenitore

In quest'ultima parte, tutto ciò che dobbiamo fare è recuperare l'immagine Docker dell'applicazione dal nostro server ed eseguirla. Nel nostro caso, si tratta di un computer Raspberry pi a scheda singola basato su architettura ARM. Non sono necessarie dipendenze, ma solo l'installazione di Docker.

Esecuzione dell’immagine Docker dell’applicazione su Raspberry Pi ARM

Da una sessione SSH sul server, eseguire il seguente comando:

Comando SSH docker run per avviare l’applicazione containerizzata

Questo comando si traduce come:

Eseguire l'immagine di concertbookingapp dal repository rrouillo in un nuovo contenitore chiamato ConcertApp, esponendo la porta 5000.

Una volta eseguito questo comando, la nostra applicazione si avvia ed è accessibile da un browser web (all'indirizzo 192.168.46.31 nel mio caso):

Applicazione di prenotazione accessibile tramite browser web locale

E l'app è disponibile:

Applicazione .NET IBM i funzionante e disponibile nel container Docker

Conclusione

Da questo articolo avrete capito che un assistente virtuale come ChatGPT può essere un aiuto prezioso nello sviluppo di un'applicazione, in questo caso tra .NET e IBM i.

Abbiamo anche visto che con la soluzione NTi sviluppata da AUMERIAL, l'utilizzo dell'IBM i da .NET non è affatto complesso, anzi. La sintassi è identica a quella di tutti gli altri fornitori di database e si può lavorare con l'IBM i senza che ci sia uno schermo verde.

NTi si distingue dalle altre soluzioni per la sua totale integrazione con .NET: qualunque sia l'architettura di destinazione, la nostra applicazione comunica con IBM i. Questo è un punto molto importante se si vuole essere in grado di eseguire i carichi di lavoro .NET/IBM i altrove rispetto alle macchine virtuali di Windows... con risparmi significativi e un'infrastruttura veramente moderna.

Infine, che si tratti di sviluppare l'applicazione o di pubblicarla, tutto è semplice, efficiente e diretto. Qualsiasi sviluppatore può padroneggiare questi concetti e sviluppare applicazioni aziendali performanti e decisamente moderne.

*Grazie per aver letto questo articolo. Sarò lieto di rispondere a qualsiasi domanda o di fornire chiarimenti o commenti su questi argomenti. In un prossimo articolo tratterò l'uso di altre risorse di tipo IBM i, come i comandi CL e la chiamata di programmi RPG da .NET con NTi.


Rémi ROUILLOT