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.
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 !.
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.
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é !
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
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;
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;
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 !
La fonctionnalité de Optional pour éviter les NPE.
Zoom sur Next.js, l'étoile montante des frameworks JavaScript
Comment installer et structurer un projet avec le framework PHP incontournable Symfony !