Moderniser l’AS400 avec Java Spring Boot

Le 21/07/2022 Par Antoine CHARMEAUjavaspring boot

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 Java.

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

(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’URL 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çu 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 !

Sommaire

  • fleche vers la droite L’AS400 est-il mort ?
  • fleche vers la droite Initialiser le projet Java Spring Boot
  • fleche vers la droite Créer votre première entité
  • fleche vers la droite Les problèmes &#x26; erreurs fréquemment rencontrées
  •         fleche vers la droite Démarrage de l’application impossible : “abstract boolean isValid(int)”
  •         fleche vers la droite Les données reçu sont en bytes
  •         fleche vers la droite Les Updates et Deletes sont impossibles
  • fleche vers la droite Conclusion

À voir aussi

Tous les articles