Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 fois par an : en général en Bretagne et sur Paris.

Pause-café #91

Juin 2023
Le 22 juin avec les clubs Pays de Loire et Bretagne

IBM i 7.5 TR2 - 7.4 TR8

Généralités

Annoncée le 11/4/2023, disponible depuis le 5/5/2023

Rappels

Le rythme actuel des versions est d'environ 3 ans, avec 2 TR par an.

Vous pouvez mettre à niveau depuis la version n-2 (de 7.3 à 7.5 par exemple).

2 versions sont maintenues en concurrence. L'arrêt de la maintenance de la 7.3 est annoncé au 30/09/2023. Les TR ne sont désormais plus disponibles pour la 7.3


Références

Support

IBM i 7.5 n'est supporté qu'avec les serveurs Power 9 ou Power 10.

OS

I/O

  • #ESR0: NED24 NVMe Expansion Drawer
  • #EN2N and #EN2P: PCIe4 64 Gb 2-port Optical Fibre Channel Adapter
  • #EN2L and #EN2M: PCIe4 32 Gb 4-port Optical Fibre Channel Adapter
  • #EJ2B and #EJ2C: PCIe3 12 Gb x8 SAS Tape HBA Adapter
  • #EN2W and #EN2X: PCIe3 4-port 10 GbE BaseT RJ45 Adapter -- adds IBM i direct attach

Concurrent removal of FC devices

Auparavant, les unités de disque existantes pouvaient être supprimées d'un ASP pendant que la partition était en cours d'exécution ; cependant, bien que les unités n'aient pas été configurées, elles ne pouvaient pas être complètement supprimées de la LPAR sans un IPL.

Vous pouvez maintenant, via Hardware Service Manager, supprimer les unités de disque logique FC d'un ASP, supprimer le stockage sur le système de stockage externe, puis retirer et supprimer complètement les unités de disque logique. depuis la LPAR sans nécessiter d'IPL.

IBM i sur Power10 now supports direct attach to 8 Gb tape backup products

Possibilité d'attacher directement des lecteurs de bande à 8Gbps en Fibre Chanel via les adaptateurs 2 ports 32 Gbit/s (#EN1J ou #EN1K).

Matériel compatible : IBM i Removable Media: POWER10 tape and optical


Power HA (5770-HAS)

La version 5.3.2 amène les évolutions :

  • Réplication multicible jusqu'à 6 noeuds
  • Réduction des impacts des mises à jour matérielles
  • Plus de possibilités de gestion des copies d'iASP
  • Améliorations continues de l'interface Web moderne de PowerHA 

cf IBM PowerHA SystemMirror for i

Les nouvelles fonctions PowerHA seront disponibles le 23 juin 2023. 


DB2 Mirror for i (5770-DBM)

Vous devez installer le groupe SF99951 niveau 4, prévu pour le 19/5/2023.

cf IBM Db2 Mirror for i


Backup, Recovery and Media Services for i (5770-BR1)

De nombreuses évolutions :

  • Capacité à indiquer pour chaque système si les informations d'historiques sont partagées ou non (locales)
  • La commande SAVBRM prend en charge le paramètre OBJDTL(*YES) ou OBJDTL(*NO) pour spécifier si les détails de l'objet sont conservés dans la base de données BRMS pour les sauvegardes IFS. La valeur par défaut du paramètre est OBJDTL(*YES).
  • Installation des Services SQL BRMS
  • Améliorations des Services SQL BRMS : prise en charge du réseau BRMS et la copie du groupe de contrôle
  • Amélioration du rapport de récupération BRMS, incluant des informations sur les droits des OUTQ personnalisées dans QUSRSYS pendant une récupération après sinistre.

Cf https://helpsystemswiki.atlassian.net/wiki/spaces/IWT/pages/165642446/Enhancements+to+BRMS


SQL

Nouvelles fonctionnalités

  • RESTRICT ON DROP
    • 7.5 uniquement
    • RESTRICT ON DROP permet des protéger les tables de la suppression, y compris par un utilisateur qui en a les droits, voir un utilisateur ayant *ALLOBJ. Pour supprimer la table, vous devez préalablement supprimer RESTRICTON DROP par ALTER TABLE
    • Ce support est désormais étendu au procédures et fonctions, et RESTRICT ON DROP est donc supporté sur les instructions suivantes :
      • CREATE FUNCTION (scalaire, table, SQL ou externe)
      • CREATE PROCEDURE (SQL ou externe)
      • ALTER FUNCTION
      • ALTER PROCEDURE

      Vous ne pouvez plus supprimer l'objet protégé, que ce soit une fonction/procédure interne/externe :

      Attention : pour des procédures/fonctions externes, la suppression de l'objet est possible, le catalogue ne sera pas supprimée :

      Pour des procédures/fonctions SQL, la suppression par commande est bloquée :

     

  • Fonctions HTTP de QSYS2 : ajout du support des BLOBs
    • Jusqu'ici, les fonctions HTTP de QSYS2 ne fonctionnaient qu'avec des CLOBs (caractères). Le support des BLOBs (Binary Large OBject) est étendu à l'ensemble des méthodes HTTP disponibles via les fonctions :
    • HTTP_DELETE_BLOB et HTTP_DELETE_BLOB_VERBOSE
    • HTTP_GET_BLOB et HTTP_GET_BLOB_VERBOSE
    • HTTP_PATCH_BLOB et HTTP_PATCH_BLOB_VERBOSE
    • HTTP_POST_BLOB et HTTP_POST_BLOB_VERBOSE
    • HTTP_PUT_BLOB et HTTP_PUT_BLOB_VERBOSE
    • Cf https://www.ibm.com/support/pages/node/6486889

      Cela permet d'utiliser des types binaires dans vos services web, ce qui n'était pas possible jusqu'ici (les anciennes fonctions de SYSTOOLS basées sur Java le permettait). Par exemple : récupérer des images, des fichiers au format PDF ou autre formats binaires.

      L'intégration dans les programmes RPGLE, CBLLE est possible.

      Les LOBs en entrée/sortie sont limitée à 2Go.

     

  • Fonctions scalaires ADD_DAYS, ADD_HOURS, ADD_MINUTES, ADD_SECONDS, ADD_YEARS
  • Ces nouvelles fonctions vous permettent d'ajouter ou retirer des durées à des dates, heures ou horodatages

    Nous avions déjà ADD_MONTHS

    Nous avons également les opérateurs naturels + et - avec les opérandes DAYS, MONTHS, YEARS :

    Pourquoi ajouter des fonctions ? Principalement pour faciliter l'intégration dans du code (SQL, RPG ou autre) avec des variables hôtes.

     

  • Ajout de fonction dans Watson Geospatial Analytics
    • Ajout de la fonction ST_GEOHASHVALUE : retourne un géohachage d'un point
  • SQE : amélioration de la performance et de la compression
    • SQE peut compresser les plans d'exécution dans le cache de plans SQL afin de limiter la taille nécessaire au cache. Sur Power 10, la compression ZLIB peut être utilisée, ainsi que l'accélération matérielle.

Services

Services IBM i : nouveaux

  • QSYS2.DNS_LOOKUP_IP() : retourne le nom d'hôte depuis l'adresse IP. La résolution est faite par l'IBM i (dépend de la configuration réseau)
  • QSYS2.NETWORK_ATTRIBUTE_INFO : retourne une ligne contenant les informations sur les attributs réseau du système (équivalent des commandes DSPNETA, RTVNETA ou API QWCRNETA) -> 48 colonnes disponibles
  • QSYS2.RDB_ENTRY_INFO : retourne les postes de bases de données relationnelle (équivalent de la commande DSPRDBDIRE)
  • QSYS2.SAVE_FILE_INFO : retourne les informations sur les fichiers de sauvegarde (équivalent DSPSAVF). Les informations détaillées ne sont pas disponibles pour des fichiers de sauvegarde contenant des données de l'IFS
  • QSYS2.SAVE_FILE_OBJECTS et QSYS2.SAVE_FILE_OBJECTS() : retournent des informations détaillées sur les objets sauvegardés dans des fichiers de sauvegarde -> membres de fichiers base de donnée et spoules dans les files en sortie. La fonction UDTF permet la sélection par le passage de paramètre.
  • Attention : si un SAVF est en cours d'utilisation, il n'apparait pas dans la recherche, aucun message d'avertissement ou d'erreur (exemple : DSPSAVF dans une session suffit à verrouiller le fichier).

    La fonction scalaire admet les paramètres : SAVE_FILE, SAVE_FILE_LIBRARY (peut être un nom, *CURLIB ou *LIBL), OBJECT_NAME_FILTER, OBJECT_TYPE_FILTER (un type ou *ALL), DETAILED_INFO (NONE, FILE, OUTQ ou ALL) et IGNORE_ERRORS (NO ou YES).

    DETAILED_INFO(FILE) affiche le liste des membres, DETAILED_INFO(OUTQ) affiche la liste des spoules.

  • QSYS2.SMAPP_ACCESS_PATHS : retourne la liste des chemins d'accès protégés par System-Managed Access Path Protection (SMAPP). Equivalent de la commande DSPRCYAP/EDTRCYAP ou par Access Client Solutions (Maintenance de la base de données).
  • cf https://www.ibm.com/docs/en/i/7.5?topic=protection-starting-smapp-changing-smapp-values

  • QSYS2.TAPE_CARTRIDGE_INFO : retourne les informations sur les bandes (1 ligne par cartouche). Equivalent de la commande DSPTAPCTG, pour les médiathèques uniquement.
  • SYSTOOLS.AUDIT_JOURNAL_AP() : retourne les postes de journaux AP formatés : adoption de programme
  • SYSTOOLS.AUDIT_JOURNAL_AX() : retourne les postes de journaux AX formatés : contrôle d'accès de ligne et colonne
  • SYSTOOLS.AUDIT_JOURNAL_OR() : retourne les postes de journaux OR formatés : restauration d'objets
  • SYSTOOLS.AUDIT_JOURNAL_PA() : retourne les postes de journaux PA formatés : modification de programme pour adopter un propriétaire
  • SYSTOOLS.AUDIT_JOURNAL_PF() : retourne les postes de journaux PF formatés : opérations de modification provisoire du logiciel
  • SYSTOOLS.AUDIT_JOURNAL_PU() : retourne les postes de journaux PU formatés : modifications apportées à un objet de PTF
  • SYSTOOLS.AUDIT_JOURNAL_RA() : retourne les postes de journaux RA formatés : restauration d'objet et modification des droits
  • SYSTOOLS.AUDIT_JOURNAL_RO() : retourne les postes de journaux RO formatés : restauration d'objet et modification du propriétaire
  • SYSTOOLS.AUDIT_JOURNAL_RZ() : retourne les postes de journaux RZ formatés : modification de groupe principal lors de la restauration
  • Ces fonctions viennent compléter les fonctions déjà fournies pour l'analyse des journaux.

    Pour savoir quelles sont les fonctions disponibles sur votre système :

    Exemple pour les adoptions de programme des 7 derniers jours :

  • SYSTOOLS.DEFECTIVE_PTF_CURRENCY : liste des PTF défectueuses pour lesquelles aucune PTF corrective n'est appliquée (équivalent GO QMGTOOLS/MG option 24)

Services IBM i : évolutions

  • QSYS2.ASP_INFO : retourne des informations sur les ASPs. Ajout des colonnes ACCESS_PATH_TARGET_RECOVERY_TIME, ACCESS_PATH_ESTIMATED_RECOVERY_TIME, et SMAPP_DISK_STORAGE_USE
  • QSYS2.IFS_OBJECT_STATISTICS() : recherche d'objets sur l'IFS. Ajout des colonnes : EXIT_PROGRAM_OPEN_CLOSE et EXIT_PROGRAM_OPEN_CLOSE_DIRECTORY
  • QSYS2.JVM_INFO et QSYS2.JVM_INFO() : retourne des informations sur les travaux des JMVs. Ajout des colonnes JOB_NAME_SHORT, JOB_USER, et JOB_NUMBER
  • QSYS2.PROGRAM_INFO : retourne les informations sur les programmes. Ajout de la colonne COPYRIGHT_STRINGS
  • QSYS2.PTF_INFO : retourne des informations sur les PTFs. Ajout de la colonne PTF_PRODUCT_OPTION_2
  • QSYS2.STACK_INFO() : retourne des informations sur la pile d'appels. Ajout du paramètre IGNORE_ERRORS (défaut = *YES)
  • QSYS2.SYSDISKSTAT et QSYS2.SYSDISKSTAT() : retourne des informations sur l'usage des disques. Ajout de la colonne HARDWARE_STATUS
  • QSYS2.SYSTEM_STATUS_INFO et QSYS2.SYSTEM_STATUS() : retourne des informations système. Ajout des colonnes ACCESS_PATH_TARGET_RECOVERY_TIME, SMAPP_INCLUDE_ACCESS_PATHS, ACCESS_PATH_ESTIMATED_RECOVERY_TIME, ACCESS_PATH_ESTIMATED_INELIGIBLE_RECOVERY_TIME, et SMAPP_DISK_STORAGE_USED

Services DB2 : évolutions

  • QSYS2.SYSFILES : retourne des informations sur les fichiers BD. Ajout de la colonne BASED_ON_FILES : pour un LF donne la liste des fichiers sous-jacents sous forme de document JSON.
  • Exemple :

RPG / COBOL

RPG

%SPLIT

La fonction intégrée %SPLIT admet désormais un paramètre optionnel *ALLSEP :

%SPLIT(string {: separators { : *ALLSEP {: *NATURAL | *STDCHARSIZE}}})

Concrétement, sans *ALLSEP, seules les sous-chaines non vides sont retournées. Avec *ALLSEP, le tableau de retour contient des postes vides si plusieurs séparateurs sont transmis successivement :

cf https://www.ibm.com/docs/en/i/7.5?topic=functions-split-split-string-into-substrings 

Exemple :

%PASSED et %OMITTED

Sur une procédure (ie un appel prototypé), vous pouvez définir des paramètres *omit et/ou *nopass, c'est à dire des paramètres facultatifs. Or, lorsqu'ils ne sont pas transmis, le code ne doit pas les utiliser (provoque un plantage ou un résultat inattendu) :

  • *omit : le paramètre peut ne pas être transmis. A l'appel il faudra indiquer *omit à la place du paramètre afin de conserver le rang des paramètres suivants. Dans la procédure, un paramètre est reçu s'il a une adresse (on teste par %addr(mon_parm) <> *null
  • *nopass : le paramètre peut ne pas être transmis du tout (obligatoirement les derniers paramètres). On ne peut indiquer *omit. On teste le nombre de paramètres reçus avec %parms() >= %parmnum(mon_param)
  • *omit : *nopass : les deux ! On commence d'abord par tester qu'il est reçu (non "nopass") , et ensuite qu'il a une adresse (no "omit")

Les nouvelles fonctions intégrées :

  • %PASSED : permet de savoir si un paramètre est reçu et non omis
  • %OMITTED : permet de savoir si un paramètre est omis (*omit a été transmis)

Voici un code existant :

 

On peut désormais écrire :

 

cf https://www.ibm.com/support/pages/node/6982093

SELECT avec WHEN-IN et WHEN-IS

L'instruction SELECT supporte désormais les opérandes :

  • SELECT : valeur de comparaison
  • WHEN-IN : permet la recherche dans une liste
  • WHEN-IS : teste l'égalité

Exemple :

Quelques remarques :

  • lorsque vous indiquez un argument sur le SELEC, vous ne pouvez plus utiliser de clause WHEN, mais uniquement WHEN-IN et WHEN-IS. On perd la capacité à mélanger des tests sur différentes variables (mais on a indiqué une expression sur le SELECT c'est donc cohérent)
  • Vous ne pouvez plus faire de tests multiples dans le WHEN, il faut passer par un tableau ou une liste 

Ce ne sont pas des problèmes, juste un comportement adapté avec ces nouvelles syntaxes.

 

CRTBNDRPG et CRTRPGMOD

Nouveau paramètre PPMINOUTLN des commandes CRTBNDRPG et CRTRPGMOD permettant de contrôler la longueur d'enregistrement du fichier temporaire utilisé par CRTSQLRPGI avec RPGPPOPT *LVL1 ou *LVL2. Il faut indiquer cette valeur dans le paramètre COMPILEOPT de la commande CRTSQLRPGI.

 

Support des booléens dans le PCML : pcml v8.0

Les indicateurs n'étaient pas gérés dans le PCML jusque-là : ils étaient considérés comme des zone de type caractère et de longueur 1 (1 octet, ie la taille minimale adressable).

Avec PCML v8.0, on utilise toujours le type caractère de longueur 1, mais un attribut supplémentaire boolean={"true"|"false"} permet de préciser le type d'origine :

 

Les indicateurs sont supportés dans les situations suivantes, en tant que paramètre :

Ils ne sont toujours pas supportés en tant que valeur de retour d'une procédure :

Produit :

 

Pour utiliser PCML v8.0, vous pouvez :

Soit indiquer en CTL-OPT :

Soit ajouter la variable d'environnement QIBM_RPG_PCML_VERSION (au niveau *JOB ou *SYS) :

ADDENVVAR ENVVAR(QIBM_RPG_PCML_VERSION) VALUE('8.0') LEVEL(*SYS)

Ce deviendra la valeur par défaut dans une version ultérieure du compilateur.

 

COBOL

Les instructions COPY REPLACING et REPLACE ont de nouvelles extensions LEADING et TRAILING qui permettent de remplacer uniquement l'occurrence de début ou de fin d'un caractère ou d'une chaîne.

Nouveau paramètre TGTCCSID pour les commandes CRTBNDCBL et CRTCBLMOD pour indiquer le CCSID utilisé à la compilation : permet la compilation d'un source Unicode depuis l'IFS :

 

Support des booléens dans le PCML (cf RPG).

 

Nécessite :

  • 7.5 5770WDS SI83521
  • 7.4 5770WDS SI83503

 

Références :

RPG : https://www.ibm.com/support/pages/rpg-cafe

COBOL : https://www.ibm.com/support/pages/node/6963370

Java - 5770JV1

Nouvelle option 20 pour le produit 5770JV1 qui apporte le support de Java 17.

Disponible avec 7.5 SF99955 niveau 5

Documentation Java pour l'IBM i (dernière mise à jour en 2021...) : https://www.ibm.com/support/pages/java-ibm-i

 

Pour télécharger Java 17 :

- IBM i 7.5 : inclus dans le support B_GROUPx_05

- IBM i 7.4 : option 20 du produit 5770JV1 (Java 17 64 bit), à télécharger à part

Toutes les informations pour télécharger Java depuis l'ESS : https://www.ibm.com/support/pages/download-installation-and-usage-java-17-ibm-i-os

 

 

L'emplacement de la JRE est : /QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit

Pour utiliser cette JVM :

  • Au niveau système : ADDENVVAR ENVVAR(JAVA_HOME) VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit') LEVEL(*SYS)
  • Pour le travail en cours (une autre JVM ne doit pas déjà être instanciée) : ADDENVVAR ENVVAR(JAVA_HOME) VALUE('/QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit') LEVEL(*JOB)
  • Pour la session QSH :  export JAVA_HOME=/QOpenSys/QIBM/ProdData/JavaVM/jdk17/64bit

 

Java 17 a été officiellement délivré par Oracle en septembre 2021, c'est la première version avec un support à long terme (LTS) depuis Java 11 (déployé sur IBM i en avril 2021).

IBM utilise une édition certifiée d'IBM Semeru, construit sur OpenJDK et la JVM Eclipse OpenJ9.

Vous avez donc désormais le choix des versions Java suivante :

  • Java 17, Java 11 ou Java 8 en 64 bits
  • Java 8 en 32 bits

Enfin, la documentation https://ibmi-oss-docs.readthedocs.io/en/latest/java/APP_SERVERS.html indique les serveurs d'application Java Open Source disponibles et supportés pour IBM i : Apache Tomcat, Wildfly, OpenLiberty (non supporté alors qu'IBM participe au projet !), Eclipse Jetty.

RATIONAL DEVELOPER FOR i

RDi 9.6 fix 13

Ce fix disponible depuis le 31 mai 2023 corrige une faille de sécurité classée moyenne (4.9/10) permettant de retrouver des informations sur les Strings manipulées par le Java Toolbox (via les nouvelles fonctionnalités pour DB2 Mirror).

cf https://www.ibm.com/support/pages/node/6999745 

RDi 9.8

Généralités

Disponible depuis le 28 avril 2023.

C'est une nouvelle version à part entière, pas de version 9.7 !

 

Vous pouvez télécharger directement depuis la page principale de RDi (IBM Rational Developer for i Hub) : https://www.ibm.com/support/pages/node/1105665

 

Cette version apporte également le support des nouvelles fonctionnalités RPG, des améliorations de l'interface, des évolutions demandées par la communauté (Ideas) et des fixes.

La liste complète des évolutions : https://www.ibm.com/support/pages/fix-list-rational-developer-i#9800

Les annonces pour RDi 9.8 :  https://www.ibm.com/docs/en/announcements/rdi-rpg-cobol-tools-98

En complet :  https://www.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/7/897/ENUS223-007/index.html

Cycle de vie et codes produits : https://www.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_sm/9/899/ENUS5724-Y99/index.html&lang=en&request_locale=en#smpgmno 

Installation

C'est une des évolutions les plus visibles : pas d'installation, plus besoin d'Installation Manager !

Pour utiliser le produit, vous devez uniquement décompresser l'archive et lancer le programme RDi.exe.

 

Remarque : nous avons expérimenté des problèmes lors de la décompression de l'archive avec l'outil intégré à Windows (problème de longueur de chemin). Nous vous recommandons d'utiliser un outil tiers (type 7zip ou autre).

 

L'écran de sélection des espaces de travail s'affiche :

 

Le produit se lance et demande une licence :

 

C'est une nouvelle version : vos kits de licences 9.6 ne fonctionnent pas, vous devez obtenir une nouvelle licence (auprès de votre revendeur ou via l'ESS - Entitled Software Support).

L'option "Manage License" ne vous permet de ne gérer que les licences flottantes:

 

Pour importer un kit de licences (fourni sous forme de fichier zip/jar), vous devez passer par le menu "Help"-> "Install New Software..."

 

 Puis ajouter un référentiel local pointant sur l'archive (*.jar ou *.zip) contenant votre licence.

 

 A l'heure actuelle (mai 2023), les licences pour RDi 9.8 ne sont pas encore disponibles chez IBM, le produit étant encore en béta :

 

A notre dernier essai du 19 mai 2023, les kits de licences sont disponibles sur l'ESS : produit 5733-WDW (Windows) ou 5733-RDX (Linux) :

 

 

Rappel : pour utiliser le débogueur, vous devez disposer des PTFs 7.5 SI82343, 7.4 SI82335, 7.3 SI82198.

 

Vidéos pour l'installation :

 

Enfin, RDi 9.8 est désormais basé sur Eclipse 4.23.

 

Vous pouvez toujours disposer de plusieurs instances de RDi (décompresser l'archive plusieurs fois) :

 

Mac OS  

2 problèmes connus impactant uniquement les Mac :

 

Evolutions

On remarquera les changements graphiques, plus modernes :

 

Création de connexion

Les connexions sont désormais créées par défaut en mode sécurisé. Cela apparait sur le second écran de l'assistant (facultatif). On le retrouve dans les propriétés de connexion :

 

 Si vous n'avez pas chiffré vos méthodes de communication, vous obtiendrez :

 

Si ce n'est pas le cas, via les propriétés de la connexion, décocher l'option (les temps de réponse peuvent être très longs dans ce cas, RDi ayant tendance à planter quand l'hôte n'est pas disponibles):

Langages

RPG

  • %split avec *ALLSEP
  • Non supporté :
  • %passed et %omitted
  • Non supporté :
  • SELECT ... WHEN-IN ...
  • Non supporté :
  • Nouveau paramètre PPMINOUTLN des commandes CRTBNDRPG et CRTRPGMOD permettant de contrôler la longueur d'enregistrement du fichier temporaire utilisé par CRTSQLRPGI avec RPGPPO* *LVL1 ou *LVL2. Il faut indiquer cette valeur dans le paramètre COMPILEOPT de la commande CRTSQLRPGI.

 

COBOL

  • COPY REPLACING et COPY supportent désormais LEADING et TRAILING
  • Les commandes CRTBNDCBL et CRTCBLMOD supportent désormais le paramètre CCSID, pour permettre la compilation depuis l'IFS avec des fichiers en Unicode.

RPG & COBOL

  • Le PCML (Program Call Markup Language) support les attributs de type booléen pour les variables indicateur !
  • Non pris en charge par RDi 9.8 :

Historique des modifications dans QSYS (ie les membres sources)

Une nouvelle vue est disponible à cet effet :

Permet l'affichage de cette vue (vous déplacez où bon vous semble) :

Ensuite, lorsque vous éditez (création/modification mais pas la suppression !) des membres sources :

Pour chaque membre, vous pouvez alors :

  • Afficher dans
    • Systèmes distants : se positionne sur le membre via le filtre utilisé dans la vue "Systèmes distants"
    • Détails du système distant : affiche le contenu du filtre utilisé pour accéder au membre dans la vue "Détails du système distant". Produit un effet proche de la vue "Table" ou PDM
    • Moniteur distant : affiche le contenu du filtre utilisé pour accéder au membre dans la vue "Moniteur distant". Produit le même effet que Détails du système distant, le moniteur permettant un refresh automatique (intervalle réglable) du contenu (ie liste des membres)
  • Ouvrir : ouvre le membre en édition
  • Comparer : permet de comparer avec l'historique local
    • Les modifications peuvent être propagées au membre
    • L'option "Get contents" permet de remplacer le membre par la valeur mémorisée dans l'historique local
  • Remplacer par : remplace le membre par une des valeurs de l'historique local

 

L'outil fonctionne également pour les sources de l'IFS !

 

Ces fonctionnalités, couplées au Ctl-Z dans l'édition de source, permettent un meilleur contrôle de vos modifications, et retour arrière ciblé en cas de problème.

 

 Template

RDi fournit la possibilité d'appliquer un template (modèle) de code à la création d'un membre source (cela ne fonctionne pas sur l'IFS) :

 

Vous pouvez personnaliser ce modèle ici :

 

 Pour créer un membre vide (comportement précédent) : sélectionner *NONE dans TEMPLATE

Zoom

Nouvelle fonction de remise à zéro du zoom.

Clique droit dans un source :

 

Affichage des erreurs de compilation

Changement de valeur par défaut/comportement des messages produits par la compilation.

Les valeurs par défaut deviennent :

  • Afficher les messages sous formes d'annotations
  • Insérer automatiquement dans les membres et les fichiers ouverts

Pour modifier ce comportement :

 

Mise en évidence des variables

Nouvelle option Ctl+F3 (ou clique droit -> source -> show in outline) : permet de sélectionner la variable dans la vue structure :

Emulateur

 L'émulateur intégré à RDi (émulateur de connexion hôte) n'est plus disponible :

 

Remarque : lorsque vous utiliser les options de lancement de Access Client Solutions, RDi lance ACS installé sur votre poste, mais avec la JVM de RDi !

 

Autres fixes

Les fixes complémentaires ci-dessous non détaillés dans notre Pause Café :

Access Client Solutions

L'historique des versions et fonctionnalités associées https://www.ibm.com/support/pages/ibm-i-access-acs-updates

Version 1.1.9.1

Disponible depuis novembre 2022

Taille de la JVM

La taille de la mémoire par défaut pour ACS n'est plus de 1Go, mais déterminée par la JVM en fonction de la mémoire disponible du PC (ne lancez pas ACS en premier !). IBM indique que dans la plupart des cas ce sera 25% de la mémoire installée (donc plutôt 2Go sur des machines actuelles !).

Vous pouvez toujours personnaliser la taille mémoire :

  • Par l'option -Xmx sur la ligne de commande : Start_Programs\Windows_x86-64\acslaunch_win-64.exe -Xmx2g
  • Par la variable d'environnement JAVA_TOOL_OPTIONS : JAVA_TOOL_OPTIONS=-Xmx2g

Améliorations

Scripts SQL

  • Ajout de la possibilité de sauvegarde automatique des scripts SQL

 En cas de de fermeture anormale du produit, vous serez prompté pour récupérer vos sauvegardes automatiques.

 

  • Lors de la connexion, message de confirmation de fermeture des résultats :

 

  •  Sauvegarde des résultats avec entêtes de colonnes

 

  • Quelques autres améliorations de l'interface (vue détaillée par défaut dans le navigateur de fichier pour PC, historique de travail rafraîchit au lieu d'ouvrir une autre fenêtre ...)

Schémas


  • Support de RESTRICT ON DROP dans les boites de dialogues de définition des tables (uniquement lorsque connecté sur une machine en 7.5)
  • Support du renommage des partitions de table
  • Ajout de colonnes statistiques à l'affichage
  • Ajout des options pour suppression des récepteurs de journaux : IGNORE_REMOTE_JOURNALS("*IGNTGTRCV") +("*IGNINQMSG") IGNORE_EXIT_PROGRAM("*IGNEXITPGM") (Idea IBMI-I-2901)
  • Génère :

Centre de performances SQL

Visual Explain

  • Affichage du nom des objets par défaut

Integrated File System

  • Ajout des options 'Use short date format' et 'Use IBM i system time zone' (Idea IBMI-I-2612)

 

Autres patchs

SE77812 OSP ACS DATA TRANSFER SAVE DTTX MIGHT NOT SHOW THE NAME OF THE FILE
SE78009 OSP ACS 1.1.9.0 AND EHLLAPI BRIDGE 9.22.096 CRASHING WHEN USING ] OR [ CHARACTER
SE78103 OSP-UNPRED NO SIGNON PROMPT ON EACH TIME YOU START NAVIGATOR REQUESTS WHEN "PROMPT FOR USER NAME AND PASSWORD EVERY TIME"
SE78106 OSP-INCORROUT UNABLE TO SAVE CUSTOM JKS KEYSTORE FROM ACS KEY MANAGEMENT
SE78199 OSP-UNPRED COLUMN DELIMITER IS INCORRECT WHEN DBCS DATA IS ENTERED TO A FIELD WITH DSPATR (CS)
SE78282 OSP-MSGCPF3344 ISSUED FOR SPOOLED FILES IN FINISHED STATUS WHEN VIEWING THROUGH ACS PRINTER OUTPUT
SE78423 OSP-OSP ACS CHANGE TABLE, REMOVE FIELD NOT WORKING
SE78518 OSP-F/QWSGET-T/QWSGET-MSGMCH0601 THE MESSAGE IN THE CURSOR PROTECTION AREA ON LINE 27 CAN BE DELETED WITH THE DEL KEY
SE78567 OSP ACS 1.1.9. BUILD ID 2151 - SQL SHOW NO OUTPUT WHEN SYNTAX IS INCORRECT DEFINED
SE78601 OSP-UNPRED MESSAGE TEXT NOT SHOWN AT LINE 24 IF FUNCTIONS KEY BUTTONS ARE AT LINE 24

 

Version 1.1.9.2

Disponible depuis avril 2023

Améliorations

Run SQL Scripts (RSS)

  • Prompt pour les variables SQL dans les instructions https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-1883
  • Vous pouvez utiliser des marqueurs de paramètres sous la forme "?" (style SQL) ou ":nom" (style langage hôte). Vous pouvez mélanger les deux !

     

    Fonctionne également avec les procédures/fonctions :

     

    Ne peut pas remplacer une bibliothèque, une table, un nom d'objet en général. Ne peut pas être indiqué dans la liste des colonnes/expressions d'un SELECT :

     

    Très pratique pour obtenir des scripts SQL génériques ! On utilise souvent des variables globales dans ce cas, initialisées en début de script. C'est une façon de remplacer et de simplifier (les variables nécessitent d'être créées/supprimées).

  • Configuration JDBC : correction du comportement par défaut pour la bibliothèque par défaut et la liste de bibliothèques
  • Le copier/coller conserve la mise en forme (Rich-text copy support) https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-2202
  • Les liens hypertexte deviennent cliquables (Active hyperlinks) https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-3237 Fonctionne dans les instructions et les commentaires
  • Supporte le mode insertion/recouvrement. Pour passer d'un mode à l'autre : touche "Inser". cf  https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-2364
  • L'utilisateur peut choisir le nombre de lignes par défaut à retrouver https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-3269
  • Sur une partition IBM i 7.4 ou supérieure : ajout d'exemples Geospatial Analytics

Visual Explain

  • Les options "Explicitation" et "Exécution et explicitation" ne lancent plus de débogage
  • Sauf si vous indiquez :

Schemas

  • Support de RESTRICT ON DROP pour les routines

Emulateur 5250

  • Support des certificats avec plusieurs Subject Alternative Name (SAN) (cf https://ibm-power-systems.ideas.ibm.com/ideas/IBMI-I-3505). Utile lorsque vos systèmes ont plusieurs IPs/Noms DNS. C'est souvent le cas des machines de HA qui ont une IP/nom DNS en mode standby, et qui basculent sur l'IP/nom DNS de la machine de production en cas de besoin.

Autres patchs

SE78904 OSP-UNPRED INTEGRATED FILE SYSTEM ICONS ARE NOT CORRECTLY SHOWN
SE78949 OSP-OTHER-INCORROUT ACS 1.1.9.1 CALLING STORED PROC WITH NEWLINE FAILS
SE78968 OSP ACS STRPCCMD COMMAND MIGHT HANG WHEN RUNNING A BATCH FILE WITH ECHO OFF
SE79066 OSP-DB-OTHER INCORROUT ACS PLAN CACHE DUMP SUBSET MISSING AFTER CREATION
SE79072 OSP-UNPRED DB - SCHEMAS - CHANGE RECEIVERS ON AUDIT JOURNAL FAILS
SE79090 OSP-RC42705-MSGSQ99999 RELATIONAL DATABASE NOT IN RELATIONAL DATABASE DIRECTORY VENDOR CODE: -99999 SQL STATE 42705
SE79274 OSP-INCORROUT DATA TRANSFER OF EXCEL FILE IS INCORRECT AND INCOMPLETE
SE79356 OSP-INCORROUT DATA TRANSFER TO SOURCE FILE NOT TRUNCATING DATA
SE79402 OSP-INCORROUT SYSTEM SET TO PROMPT ALWAYS W/ 5250 SESSION BYPASS SIGNON CONTINUES TO USE PREVIOUS CREDENTIALS IF SIGNON
SE79501 OSP ACS 5250S IMAGES SAVED FROM THE SCREEN HISTORY WILL NOT KEEP THE CORRECT COLORS
SE79505 OSP-DB ACS - UPLOAD RESULT FAILS WITH SQL0104 IF COMMA IS THE DECIMAL SEPARATOR
SE79525 CA400EXP USING ACS RUN SQL SCRIPT AND THE EXPLAIN ONLY OPTION WILL RUN THE SQL FOR SOME SQL STATEMENTS
SE79526 CA400EXP CHANGES TO ACS RUN SQL SCRIPT AND HOW LIBRARY LIST IS POPULATED
SE79527 OSP ACS OSPM IS FAILING TO CREATE AN NGINX FILE IN THE CLONE REPO FUNCTION
SE79531 OSP-INCORROUT ACS DATA TRANSFER TO IASP FAILS WITH MSGDB0036

Navigator for i

Evolutions de la nouvelle interface

Rappels

L'interface de Navigator for i a été totalement revue en 2022. On parlera de Navigator for i "heritage" pour l'ancienne interface.

Cette dernière peut être désactivée : soit simplement arrêtée, soit désinstallée par PTF. C'est une nécessité pour assurer la sécurité de votre système (CVE relatives à Log4j et autres dans la version heritage).

 

Dernières PTF :

Evolutions

Généralités

La recherche tient compte des dernières fonctionnalités et mots-clés intégrés à l'outil

 

Les messages d'erreur sont plus détaillés.

 

Pour tous les tableaux : plus de capacités de filtres :

Pour chaque colonne, capacité de filtre avec :

Pour les colonnes numériques, un compteur.

 

Le rafraichissement tient compte des filtres :

  • doubles flèches : rafraîchir les données en conservant les filtres et les tris
  • simple flèche : réinitialisation des filtres et des tris

L'enregistrement en favori ne mémorise pas les filtres.

IFS

C'est un des points les plus importants de cette mise à jour.

Nous trouvons un système d'onglet qui permet d'ouvrir un répertoire dans un nouvel onglet et maintenir plusieurs onglets ouverts en simultané.

 

A l'arrivée dans le navigateur :

 

Il est toujours possible de de lister le contenu du répertoire par la flèche déroulante, et surtout une nouvelle option permet d'afficher le répertoire dans un nouvel onglet :

Produit :

Vous pouvez ensuite naviguer entre les onglets.

 

Autre nouveauté : possibilité de télécharger un fichier/répertoire vers/depuis l'IBM i:

 

On retrouve également l'amélioration des filtres permettant le rafraîchissement ou la réinitialisation.

 

Serveurs TCP/IP

  • ObjectConnect server over IP : Properties support
  • NetServer : réorganisation de l'ordre des colonnes
  • DDM server :ajout des propriétés
  • FTP server : ajout des propriétés
  • DNS server : ajout de la mise à jour des propriétés
  • Telnet server : Properties support
  • Support de l'ensemble des services de débogage
    • IDE Debugger Server – QB5ROUTER
    • Correspond aux commandes STRDBSVR/ENDDBGSVR
    • Utilisé par RDi, nécessite désormais un certificat TLS
    • Debug Service – nouveau service, utilise les job QB5
      • Variable d'environnement : DEBUG_SERVICE_KEYSTORE_FILE et DEBUG_SERVICE_KEYSTORE_PASSWORD
      • Démarrage et arrêt par startDebugService.sh et stopDebugService.sh
      • Créé des travaux QP0ZSPWT
    • System Debug
    • Utilisé par STRDBG
    • Egalement par le "System Debugger" accessible depuis l'exécution de script SQL

Sécurité

Ajout de la gestion des masters keys :

Egalement la gestion des fichiers de clés de chiffrement :

 

Advanced Job Scheduler

Amélioration du support, ajout de nouvelles fonctionnalités

Correctifs

  • Valeurs systèmes : correction apportée au réglage de l'heure / date
  • AJS (Advanced Job Scheduler) – divers correctifs
  • Amélioration du formatage SQL et coloration syntaxique
  • Edition possible des paramètres pour l'ajout d'un programme d'exit dans la boite de dialogue
  • Propriétés FTP : correctifs mineurs
  • System Monitor ne se déclenchera pas si QWEBADMIN ne dispose pas des droits appropriés. L'utilisateur doit disposer des droits *USE pour exécuter la commande CREATE ALIAS.
  • APAR SE79087 – Correction d'un problème PDI avec la vue d'ensemble des taux d'E/S du disque graphique avec les statistiques de cache
  • Etat de l'imprimante : correction du statut
  • APAR SE79011 - Correction d'un problème de rejet des messages exclus (Monitored Message Set)

Références

https://www.ibm.com/support/pages/node/6483299

https://www.ibm.com/support/pages/node/6486565

IWS Integrated Web Services

Pour les services de type REST, support des paramètres en input/output, comme supporté sur les services SOAP.

Auparavant il fallait choisir soit input, soit output.

API REST Remote System Explorer

Nouveau connecteur universel !

Introduction

Les APIs RSE (ne pas confondre avec la vue RSE dans RDi !) sont un ensemble d'API REST fournies par le système d'exploitation au travers du serveur ADMIN5. Ces APIs sont utilisables depuis le web et permettent de lancer des commandes, accéder à l'IFS etc ...

L'implémentation s'appuie sur JT400 : nous disposons des possibilités, mais aussi des limitations du JT400.

Avantage : la mise à disposition sous forme de web service rend l'accès à ces services agnostique à la technologie Java.

Deux points :

  • Tous les appels doivent être sécurisés par TLS (https) : tous les appels http rejetés
  • Tous les messages sont en JSON

Les catégories de services :

  • Administration Services
    • Permet d'obtenir des informations à propos des API RSE, comme le nombre de sessions, la consommation mémoire et les paramètres globaux
    • Seuls les administrateurs, ou les utilisateurs disposant de *ALLOBJ, peuvent invoquer ces services, et uniquement sur localhost
  • CL Command Service
    • Exécuter des commandes CL
  • IFS Services
    • Accès à l'IFS, lire et écrire des fichiers
  • QSYS Services
    • Accéder à des objets de QSYS (bibliothèques)
  • SQL Service
    • Exécuter des requêtes SQL
  • Server Information Service
    • Permet d'obtenir des informations sur les API RSE
  • Session Services
    • Services de gestion des sessions et d'authentification

Prérequis

Les options logicielles suivantes doivent être installées pour IBM i 7.3, 7.4 et 7.5 :

  • 5770SS1 option 3 - Extended Base Directory Support
  • 5770SS1 option 12 - Host Servers
  • 5770SS1 option 30 - Qshell
  • 5770SS1 option 33 - PASE
  • 5770SS1 option 34 - Digital Certificate Manager
  • 5770DG1 - IBM HTTP Server for IBM i
  • 5770JV1 - IBM Java SE 8 64

Bien sûr, mettre à jour les groupes de PTF pour HTTP et JAVA.

Mise en route

Arrêt/Démarrage

En mode commande :

STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
ENDTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)

Si l'administrateur a désactivé le démarrage automatique de l'ensemble des serveurs d'administration :

STRTCPSVR SERVER(*IAS) INSTANCE(admin5)
ENDTCPSVR SERVER(*IAS) INSTANCE(admin5)

Lorsque démarré vous devez trouver un travail ADMIN5 :

 

Par l'interface graphique :

Connectez-vous à l'administration HTTP : http ://systeme:2001/HTTPAdmin

Dans l'onglets "All Servers", sélectionnez "All Application Servers", puis Admin5. Utilisez ensuite les bouton Stop/Start.

Sécurisation

Commençons par sécuriser notre serveur pour permettre l'appel des API : génération d'un certificat TLS et association à l'instance ADMIN5.

Dans notre exemple, un certificat créé directement sur votre IBM i. Vous pouvez également importer un certificat créé par ailleurs.

Rendez-vous sur l'interface d'administration HTTP, sélectionnez "Configure TLS" :

 

Réglez le port (2012 par défaut) ainsi que le niveau du protocole TLS (nous vous recommandons TLS 1.3.) :

 

Choisir DCM en tant que magasin de certificat :

 

Saisir le mot de passe :

 

Vous pouvez créer un nouveau certificat ou utiliser un certificat déjà) présent dans DCM :

 

Pour la création, choix des chiffrements :

 

Redémarrage du serveur pour prise en compte :

 

Synthèse et validation :

 

Après quelques instants, le serveur est redémarré et sécurisé.

 

La configuration modifie les fichiers de configuration, dont /qibm/userdata/os/admininst/admin5/wlp/usr/servers/admin5/resources/security/admin-cust.properties

Attention :

Lors de l'opération de sécurisation de l'instance ADMIN5, nous avons constaté une indisponibilité du service sécurisé sur les systèmes avec plusieurs IPs.

Une solution temporaire est de désactiver iamobile dans le fichier de configuration /qibm/userdata/os/admininst/admin5/wlp/usr/servers/admin5/server.xml :

 

Effet :

 

A noter : les APIs sont fonctionnelles, l'interface graphique n'arrive pas à afficher Swagger UI

Emplacement

De façon classique :

  • /QIBM/ProdData/OS/RSEAPI : le package API RSE
  • /QIBM/UserData/OS/RSEAPI : vide à l'installation initiale. Si vous personnalisez les propriétés du serveur RSE, contient alors un fichier rseapi.properties

Accès à l'interface RSE

  • Non sécurisé : http://systeme:2011/rseapi/
  • Sécurisé : https://systeme:2012/rseapi/

URLs :

- https://systeme:2012/rseapi/ : interface "principale", permet d'accéder à la documentation et à Swagger UI

-https://systeme:2012/openapi/ui/ : Swagger UI, permettant de documenter et tester le service

- https://systeme:2012/openapi/ : documentation technique du service au format openapi 3.0.0

 

Liste des services

  • Services de session
  • Permet de créer une session, obtenir un jeton (bearer), de se délogger. Permet de gérer les attributs de session.

  • Services d'administration
  • Permet d'obtenir des informations sur le serveur RSE, de modifier les propriétés du serveur, de supprimer des sessions utilisateurs.

  • Services Commandes CL
  • Permet de retrouver la description d'une commande CL, d'exécuter une ou plusieurs instructions CL.

  • Services IFS
  • Permet d'obtenir une liste de fichiers d'un répertoire, le contenu d'un fichier, écrire un fichier ou de retrouver les attributs d'un fichier.

  • Services QSYS
  • Recherche d'objets dans le système de fichiers QSYS

  • Services SQL
  • Exécuter une requête SQL

  • Services d'information sur le serveur (RSE)
  • Retourne des informations sur les API RSE

 

Sécurité

Dans tous les cas il est nécessaire de s'authentifier avec un profil IBM i pour utiliser les API RSE. Les droits du profil sont utilisés pour chaque action.

Deux possibilités :

  • Authentification basique
  • A chaque appel d'API il faut envoyer un entête contenant le profil et le mot de passe encodé en base64

    Authorization: Basic BASE64(userid:password)
  • Authentification par un jeton de session
  • Appel d'une première API à laquelle on transmet profil et mot de passe. L'API renvoie un jeton de session (token sous la forme d'un GUID) à transmettre en entête de toutes les requêtes suivantes.

    Authorization: Bearer 4eaa14e6-ea9c-4dde-b6f7-f542b34d5309-60da75d3-3132

    Avantage : il est possible d'indiquer des attributs de session.

    Bonne pratique : pensez à appeler l'API de logout qui invalide le jeton.

Tests avec Swagger UI

Commencons par utiliser une authentification basique :

Swagger UI transmettra cette authentification à chaque appel d'API.

 

Exemple : obtenir la description de la commande DSPLIBL :

 

Produit :

 

Pour exécuter des commandes CL :

 

Produit :

On contrôle sur la machine :

 

En cas d'erreur ?

 

Si l'on indique "continueOnError": false

 

Je peux tout faire ?

 

Le fonctionnement est similaire pour l'ensemble des catégories de services :

 

Et maintenant avec une session :

On désactive l'authentification basique :

Puis on va générer un jeton de session :

Le jeton sera transmis par Swagger UI à tous les appels.

L'authentification par jeton est nécessaire pour l'usage des services "Administration Services" et "Sessions Services".

 

Par exemple, les informations sur la session en cours :

Produit :

On retrouve de nombreuses informations sur l'environnement technique : information sur le jeton (utilisateur, péremption), l'environnement SQL (les propriétés JDBC), le travail de commande à distance (QZRCSRVS) avec sa liste de bibliothèque ...

{
  "sessionInfo": {
    "userID": "RSEDEMO",
    "host": "localhost",
    "expiration": "2023-06-14T12:13:30Z",
    "creation": "2023-06-14T10:09:49Z",
    "lastUsed": "2023-06-14T10:13:30Z",
    "domain": "rseapi",
    "expired": false
  },
  "sessionSettings": {
    "libraryList": [],
    "clCommands": [],
    "envVariables": {},
    "sqlDefaultSchema": null,
    "sqlTreatWarningsAsErrors": false,
    "sqlProperties": {
      "XA loosely coupled support": "0",
      "access": "all",
      "auto commit": "true",
      "autocommit exception": "false",
      "bidi implicit reordering": "true",
      "bidi numeric ordering": "false",
      "bidi string type": "5",
      "big decimal": "true",
      "block criteria": "2",
      "block size": "32",
      "character truncation": "true",
      "concurrent access resolution": "2",
      "cursor hold": "true",
      "cursor sensitivity": "asensitive",
      "data compression": "true",
      "data truncation": "true",
      "database name": "",
      "date format": "iso",
      "date separator": "",
      "decfloat rounding mode": "half even",
      "decimal separator": "",
      "driver": "toolbox",
      "errors": "basic",
      "extended dynamic": "false",
      "extended metadata": "false",
      "full open": "false",
      "hold input locators": "true",
      "hold statements": "false",
      "ignore warnings": "01003,0100C,01567",
      "lazy close": "false",
      "libraries": "*LIBL",
      "lob threshold": "32768",
      "maximum blocked input rows": "32000",
      "maximum precision": "31",
      "maximum scale": "31",
      "metadata source": "1",
      "minimum divide scale": "0",
      "naming": "system",
      "numeric range error": "true",
      "package": "",
      "package add": "true",
      "package cache": "false",
      "package ccsid": "13488",
      "package criteria": "default",
      "package error": "warning",
      "package library": "QGPL",
      "portNumber": "0",
      "prefetch": "true",
      "proxy server": "",
      "qaqqinilib": "",
      "query optimize goal": "0",
      "query replace truncated parameter": "",
      "query storage limit": "-1",
      "query timeout mechanism": "qqrytimlmt",
      "remarks": "system",
      "secondary URL": "",
      "server trace": "0",
      "sort": "hex",
      "sort language": "",
      "sort table": "",
      "sort weight": "shared",
      "time format": "iso",
      "time separator": ":",
      "trace": "false",
      "transaction isolation": "read uncommitted",
      "translate binary": "false",
      "translate boolean": "true",
      "translate hex": "character",
      "true autocommit": "false",
      "use block update": "false",
      "variable field compression": "all"
    },
    "sqlStatements": []
  },
  "jobRemoteCommand": {
    "id": "071392/QUSER/QZRCSRVS",
    "ccsid": 297,
    "homeDirectory": "/home/RSEDEMO",
    "curLib": null,
    "systemLibl": [
      {
        "name": "QSYS",
        "attribute": "PROD",
        "description": "Bibliothèque système"
      },
      {
        "name": "QSYS2",
        "attribute": "PROD",
        "description": "Bibliothèque système pour CPI"
      },
      {
        "name": "QHLPSYS",
        "attribute": "PROD",
        "description": ""
      },
      {
        "name": "QUSRSYS",
        "attribute": "PROD",
        "description": "System Library for Users"
      }
    ],
    "userLibl": [
      {
        "name": "QGPL",
        "attribute": "PROD",
        "description": "General Purpose Library"
      },
      {
        "name": "QTEMP",
        "attribute": "TEST",
        "description": ""
      }
    ],
    "envVariables": {},
    "jobLog": []
  }
}

 

Vous pouvez également modifier ces attributs de session :

 

Si l'on rappelle les attributs de session, on voit la prise en compte :

 

Tests avec Postman

La cinématique des APIs est identiques, mais POSTMAN vous permet d'enregistrer os requêtes, partager vos espaces de travail en équipe etc ... un bon outil donc pour conserver une base de tests et documentaire.

Commencer par importer la définition de l'API dans POSTMAN.

Puis générer une session :

Récupérer le jeton généré et configurer la sécurité :

On appelle l'API qui retourne les informations de session pour contrôle :

 

Le fonctionnement des APIs est strictement similaire à ce que nous avons vu avec Swagger UI.

 

Intéressons-nous à l'API "Server Information Services" : retourne les informations sur la version du serveur RSE

 

Dans la catégorie "Administration Services", l'API /admin/environment produit un résultat comparable :

On trouve également les informations concernant le système d'exploitation et la version de Java.

A noter que pour toutes les routes /admin, il faut avoir un profil administrateur des API RSE,à  savoir :

  • soit un profil avec l'autorité spéciale *ALLOBJ
  • soit un profil déclaré administrateur pour RSE (cf plus bas)

 

La fonction /memory indique l'empreinte mémoire :

 

La fonction /sessions retourne la liste des utilisateurs connectés et le nombre de sessions de chacun :

 

La méthode DELETE permet la suppression de toutes les sessions, ou de toutes les sessions d'un utilisateur :

Dès lors, tous les appels qui utilisent les tokens liés à l'utilisateur RSEDEMO tombent en erreur :

Il faut générer un nouveau token, ou passer par l'authentification basique.

 

Enfin /settings permet d'accéder aux propriétés du serveur RSE :

Et également de les modifier :

La prise en compte est immédiate :

 

Propriétés :

  • persist : true/false. Indique si les paramètres doivent être enregistrés (persistants) pour utilisation aux futurs démarrages du service RSE.
  • adminUsers : liste des utilisateurs avec rôle d'administration des services RSE
  • includeUsers : utilisateurs autorisés à RSE
  • excludeUsers : utilisateurs exclus de RSE
  • maxFileSize : taille maximale des fichiers IFS lus ou écrits
  • maxSessions : nombre maximum de sessions
  • maxSessionsPerUser : nombre maximum de sessions par utilisateurs
  • maxSessionInactivity : nombre de secondes d'inactivité avant invalidation de la session
  • maxSessionLifetime : nombre de secondes maximum de la session avant invalidation
  • maxSessionUseCount : nombre maximum d'usages de la session
  • maxSessionWaitTime : nombre de secondes d'attente pour obtenir la disponibilité de la session
  • sessionCleanupInterval : intervalle d'exécution du démon de maintenance des sessions

Si vous avez indiqué "persist": "true", le fichier /QIBM/UserData/OS/RSEAPI/rseapi.properties est créé :

Via l'API RSE de lecture d'un fichier IFS :

 

Hôte distant

La documentation, et le schéma de fonctionnement, indiquent qu'il est possible de générer un jeton sur une machine et d'exécuter les requêtes sur une autre.

A l'heure actuelle nous n'avons pas réussi à faire fonctionner ce mécanisme.

A noter : fonctionne uniquement en https.

Performances

API RSE

Ne demander que le niveau de détail nécessaire

Utiliser la configuration de la gestion des sessions (temps d'inactivité etc...)

Limiter les fonctions de recherche : ces fonctions peuvent ramener de nombreuses informations

Réseau

La documentation précise qu'il est conseillé :

  • d'utiliser l'option *FULL DUPLEX
  • d'augmenter la taille maximale de frame : 8996 octets (1496 par défaut)

Cela réduit grandement le trafic réseau et améliore les temps de réponse.

Logs

La configuration des logs se fait par l'administration HTTP de l'instance ADMIN5 :

L'ensemble des fichiers de log est disponible ici : /QIBM/UserData/OS/AdminInst/admin5/wlp/usr/servers/Admin5/logs

Références

https://www.ibm.com/support/pages/node/6982701