Moderniser l’AS400 avec Java Spring Boot

Tuto - Moderniser l'utilisation de l'AS400 avec Java Spring Boot ! On vous explique tout pas à pas.
AntoineC.jpg
Antoine CHARMEAUMis à jour le 21 Juil 2022
AS400 java spring boot moderniser

L’AS400 est-il mort ?

Moqué par les jeunes développeurs, l’AS400 reste omniprésent dans un très grand nombre de systèmes informatiques. Entre son moteur DB2 pour la base de données, et le langage RPG permettant de communiquer avec le serveur, l’utilisation de l’AS400 en 2022 est quelque peu déroutante.

Mais rassurez-vous, il existe des moyens de moderniser son utilisation, notamment avec Java Spring Boot, comme nous allons le découvrir dans cet article.

Initialiser le projet Java Spring Boot

Dans un premier temps, rendez-vous sur https://start.spring.io/ afin de générer le package du projet.

Nous choisissons la dernière version stable de Spring, c’est-à-dire la 2.7.1. Il est possible de choisir un projet Maven comme Gradle, cela n’a pas d’importance. Enfin, nous utiliserons la version 17 de JavaLangage de développement très populaire !

Java spring boot initializr as400

Au niveau des dépendances, vous pouvez ajouter ce que vous voulez, mais nous utiliserons dans ce tutoriel Spring Web, Spring Data JPA ainsi que Lombok.

Vous pouvez générer et ouvrir le projet, dans notre cas avec l’IDE IntelliJ.

Il est nécessaire maintenant d’ajouter la dépendance JT400 afin de pouvoir se connecter à la base de données de l’AS400.

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

Une fois la dépendance ajoutée, il est nécessaire de configurer correctement le fichier de configuration de votre Spring BootFramework Java se basant sur Spring. (dans notre cas, nous utilisons le fichier application.properties) afin de permettre la connexion à la base de données de votre AS400.

spring.datasource.url=jdbc:as400://01.02.03.04/(SCHEMA)
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD
spring.datasource.driver-class-name=com.ibm.as400.access.AS400JDBCDriver

Vous devez préciser, l’URLUniform Ressource Locator de connexion, l’identifiant et le mot de passe. Il est important aussi de préciser le driver JDBC de l’AS400. Il est possible de spécifier un schéma par défaut, mais cela est optionnel, surtout si votre base DB2 est décomposée en plusieurs schémas.

Félicitations, le projet est initialisé !

Si toutefois vous avez des erreurs au démarrage, allez jeter un coup d’œil dans la section dédiée ci-dessous.

Créer votre première entité

Une fois que votre application peut démarrer correctement, vous pouvez créer votre première entité. Ici, vous pouvez par exemple créer un fichier User.java correspondant au fichier “DBUSER” de votre AS400, situé dans le schéma “BDDEMO”.

package com.axopen.article.as400.bo;    
import lombok.AllArgsConstructor;  
import lombok.Getter;  
import lombok.NoArgsConstructor;  
import lombok.Setter;  
import javax.persistence.Column;  
import javax.persistence.Entity;  
import javax.persistence.Id;  
import javax.persistence.Table;  
  
@Getter  
@Setter  
@NoArgsConstructor  
@AllArgsConstructor  
@Entity  
@Table(schema = "DBDEMO", name = "DBUSER")  
public class User {  
    @Id  
    @Column(name = "USNUID")  
    private Long id;  
  
    @Column(name = "USLNAM")  
    private String nom;  
  
    @Column(name = "USFNAM")  
    private String prenom;  
}

La spécificité de l’AS400, est d’avoir des noms de colonnes très particuliers et peu explicites. Ainsi, vous pouvez mapper facilement ces bizarretés avec des attributs beaucoup plus explicites.

Nous pouvons maintenant créer notre repository permettant de faire les requêtes sur la base de données DB2.

package com.axopen.article.as400.repository;  
import com.axopen.article.as400.bo.User;  
import org.springframework.data.jpa.repository.JpaRepository;  
import org.springframework.stereotype.Repository;  
@Repository  
public interface UserRepository extends JpaRepository<User, Long> {}

Enfin, il ne reste plus qu’à créer le service associé, ainsi que le controller permettant les appels HTTP. Par exemple voici le service UserService.java content la fonction findAll() qui récupère l’ensemble des utilisateurs dans la table “DBUSER” de l’AS400.

package com.axopen.article.as400.service;  
import com.axopen.article.as400.bo.User;  
import com.axopen.article.as400.repository.UserRepository;  
import org.springframework.stereotype.Service;  
import java.util.List;  
@Service  
public class UserService {  
    private final UserRepository userRepository;  
  
    public UserService(UserRepository userRepository) {  
        this.userRepository = userRepository;  
    }  
    /**
    * Fonction pour récupérer l'ensemble des utilisateurs de la DB2
    */
    public List<User> findAll() {  
        return this.userRepository.findAll();  
    }  
}

Et c’est terminé !

Les problèmes & erreurs fréquemment rencontrées

Démarrage de l’application impossible : “abstract boolean isValid(int)”

Lors du démarrage de votre application, il est possible que Spring n’arrive pas à se connecter à l’AS400 et qu’une erreur apparaisse dans la console.

Receiver class com.ibm.as400.access.AS400JDBCConnectionImpl does not define or inherit an implementation of the resolved method ‘abstract boolean isValid(int)’ of interface java.sql.Connection.

Pour cela, il est nécessaire d’ajouter dans le fichier application.properties une configuration supplémentaire :

spring.datasource.hikari.connection-test-query=values 1

Les données reçues sont en bytes

Il se peut que les données récupérées dans votre DB2 soient des bytes. Ainsi il est nécessaire d’ajouter dans le fichier de configuration application.properties la configuration suivante :

spring.datasource.url=jdbc:as400://01.02.03.04/;translate binary=true;ccsid=37;

Les Updates et Deletes sont impossibles

S’il est impossible de modifier ou supprimer un champ de votre fichier DB2, et que vous obtenez l’erreur ci-dessous :

SQL Error: -7008, SQLState: 55019 [SQL7008] Table DBUSER de DBDEMO incorrecte pour cette opération.

Cela signifie qu’il faut ajouter à votre fichier application.properties la configuration suivante :

spring.datasource.url=jdbc:as400://01.02.03.04/;transaction isolation=none;

Conclusion

Ainsi, avec Java Spring Boot vous pouvez facilement interagir avec la base de données DB2 avec en utilisant des attributs bien plus explicites que les colonnes originales du fichier AS400, sans avoir besoin d’apprendre le langage RPG.

Si vous souhaitez aller plus loin, vous pouvez aussi lire notre article Comment appeler des programmes AS400.

Pour discuter plus en détails de votre projet, n'hésitez pas à nous contacter !