Java et l’i : l’intégration (première partie) – Connecter Spring Boot à une base de données IBM Db2

Java et l’i : l’intégration (première partie) – Connecter Spring Boot à une base de données IBM Db2

09:47 01 mai dans Blogue, Modernisation d'écran vert, Productivité des développeurs IBM i, Transformation du code
0 Commentaires

Introduction

Voici le premier d’une série d’articles techniques sur l’intégration de Java et d’IBM i, intitulée « Java et l’i ». Nous nous pencherons sur l’exécution d’applications Java sous IBM i, ainsi que sur l’utilisation de la base de données IBM Db2 pour i intégrée. Nous utiliserons d’abord Spring Boot et l’écosystème Spring avant de passer à MicroProfile pour Java EE, et plus particulièrement à IBM WebSphere Liberty. Entre-temps, nous verrons aussi comment appeler un programme IBM i natif (en langage COBOL ou RPG) à partir d’une application Java, ainsi que la manière d’appeler une application Java à partir d’un programme RPG. Retroussez vos manches et préparez-vous pour une profusion de code et de commandes!

Dans cette première partie, nous commencerons par une simple application Spring Boot qui expose une API REST. L’objectif est d’accéder à la base de données Db2 pour i à partir de l’environnement de développement intégré (EDI). Il s’agit d’un point de départ plutôt simple. Bien entendu, vous devez avoir accès à un appareil IBM i pour tester le code et l’application échantillon. Assurez-vous de pouvoir accéder au port de l’instance Db2 pour i à partir de votre ordinateur.

Ce que vous devez avoir sur votre ordinateur :

• la trousse d’outils JDK pour Java 8;

• un EDI Java, soit JetBrains IntelliJ ou Eclipse IDE (avec le module d’extension Maven). L’échantillon de code devrait fonctionner avec Spring Tools 4 pour Eclipse, Apache NetBeans 10 et Microsoft Visual Studio Code (avec MS Java Extension Pack et Spring Boot Extension Pack). Personnellement, j’utilise JetBrains IntelliJ IDEA édition Community, un logiciel libre (licence Apache 2.0);

l’application bureautique IBM i Access Client Solutions.

1. Application REST échantillon des guides Spring

Pour commencer, nous allons télécharger l’application REST échantillon des guides Spring. Cette page contient une liste impressionnante de guides et d’échantillons pour découvrir Spring Boot et son écosystème.

Pour nos besoins, nous utiliserons le guide suivant : Accessing JPA Data with REST (accéder à des données JPA avec REST). Vous pouvez soit suivre toutes les étapes du guide, soit aller droit au but et télécharger l’application REST ou la cloner avec Git. Accédez au dossier « gs-accessing-data-rest/complete » et importez le projet Maven dans votre EDI. Dans IntelliJ, le projet devrait ressembler à ceci :

Exécutez la classe de test « ApplicationTests ». Les résultats devraient tous être en vert (test réussi).

L’application utilise une base de données relationnelle en mémoire appelée H2. La prochaine étape sera de la remplacer par une base de données IBM Db2 pour i.

2. Application de modifications dans une base de données IBM Db2 pour i

2.1. Création d’un schéma à des fins d’essai

Nous allons maintenant créer un schéma appelé « BOOTTEST » dans Db2 pour i. La solution la plus simple, selon moi, est d’utiliser la fonction « Run SQL Scripts » de l’application bureautique IBM i Access Client Solutions, ou peut-être de demander à un administrateur de bases de données de le faire. Créez le schéma « BOOTTEST » :

    create schema BOOTTEST;

La bibliothèque « BOOTTEST » est maintenant créée dans IBM i et journalisée, et un catalogue SQL est défini. La bibliothèque devrait ressembler à ceci :

2.2. Création d’une table dans le schéma

Toujours en utilisant la fonction « Run SQL Scripts », créez la table « TPERSON » dans le schéma « BOOTTEST » :

create table BOOTTEST.TPERSON
(
  ID         int generated always as identity
                 constraint TPERSON_PK primary key,
  FIRST_NAME varchar(100),
  LAST_NAME  varchar(100)
);

3. Modification du code Java dans l’EDI

3.1. Modification de la classe Personne

Insérez les annotations de la table, avec « TPERSON » comme nom de table et « BOOTTEST » comme schéma. Changez le mode de génération de l’annotation @Id de « AUTO » à « IDENTITY ». Remarquez que pour la table « TPERSON », la colonne « ID » porte la mention « generated always as identity » (toujours générée comme identité). La classe Personne devrait commencer par ces lignes :

package hello;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "TPERSON", schema = "BOOTTEST")
public class Person {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private long id;

Le reste de la classe ne change pas.

3.2. Modification du fichier pom.xml de Maven

Si vous souhaitez utiliser la dernière version de Spring Boot, vous pouvez changer la version pour « 2.1.3.RELEASE » (la plus récente au moment d’écrire cet article) :

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>

Plutôt que d’utiliser la base de données en mémoire H2, nous souhaitons utiliser la base de données IBM Db2 pour i. Le pilote JDBC pour IBM Db2 pour i se trouve sur le site JTOpen. La dernière version du fichier JAR se trouve également dans le référentiel Maven.

Remplacez :

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>

Par :

    <dependency>
        <groupId>net.sf.jt400</groupId>
        <artifactId>jt400</artifactId>
        <version>9.7</version>
    </dependency>

3.3. Ajout d’un fichier de configuration d’application

Le fichier de configuration standard de Spring Boot se nomme soit « application.yml » ou « application.properties ». Nous voulons ajouter l’emplacement de la base de données IBM Db2 pour i et la classe du pilote au fichier de configuration. Personnellement, je préfère utiliser le fichier « application.yml » :

spring.datasource:
  url: jdbc:as400://[ibm_i_ip_address];naming=system;libraries=BOOTTEST;socket
timeout=30000;thread used=false;transaction isolation=read commited;translate
binary=true;date format=iso;prompt=false
  username: [db2_for_i_database_username]
  driver-class-name: com.ibm.as400.access.AS400JDBCDriver
  hikari.connection-test-query: values 1

spring.jpa:
  database-platform: org.hibernate.dialect.DB2400Dialect
  hibernate.ddl-auto: none

L’URL entière devrait tenir en une seule ligne. Le texte peut toutefois s’afficher sur plusieurs lignes à des fins de formatage. Les propriétés de l’URL JDBC (bibliothèques, fil utilisé, isolation des transactions, etc.) sont définies sur la page IBM Toolbox for Java JDBC properties.

Vous remarquerez que le mot de passe de la base de données IBM Db2 pour i n’est pas défini dans le fichier de configuration. Comme il s’agit d’une valeur secrète, elle ne doit pas être visible dans le code source. Nous verrons plus bas comment configurer le mot de passe à des fins d’essai.

5. Exécution du code

Comme nos besoins sont simples, nous pourrions insérer le mot de passe en tant que variable d’environnement de l’utilisateur. Telle que définie par Spring Boot, cette variable devrait s’appeler « SPRING_DATASOURCE_PASSWORD ». Toutefois, nous pourrions aussi configurer le mot de passe dans l’EDI. Voici un exemple de configuration dans IntelliJ : Run menu > Edit Configurations… > JUnit > ApplicationTests.

Exécutez maintenant la classe de test « ApplicationTests ». Les résultats devraient encore être tous en vert (test réussi).

Dans le deuxième article de cette série, nous exécuterons la même application Spring Boot sous IBM i. À bientôt!

À propos de Claudio Lawira

Claudio est un développeur Java senior expérimenté en matière d’applications WebSphere et Web. Sa carrière débuta en tant que développeur COBOL Mainframe, et il admet encore avoir la même passion pour le codage aujourd’hui.
Chez Fresche Solutions, il travaille dans le laboratoire de modernisation et des outils de transformation, où il se familiarise avec IBM i et RPG. Étant un individu multilingue ayant vécu dans plusieurs pays, de la France à l’Indonésie, en passant par la Roumanie, pour n’en nommer que quelques-uns, sa personnalité colorée et ses expériences diverses brillent à travers son travail.

Pas de commentaires

Écrire un commentaire