logoAnerty's Lair - Actualités << Home
enfr
^ Utilitaires Documentation
article

BugFix & Mise à jour: jSAVF 1.70

Cette version corrige un certain nombre de bugs dans la manière dont jSAVF implémente les différents algorithmes de décompression nécessaires pour lire le contenu des SAVF:

  • La décompression *LOW/SNA pouvait dans certains cas produire plus de données que prévu ce qui corrompait l'extraction de fichiers SAVF inclus dans d'autres SAVF.
  • La décompression *MEDIMU/TERSE gère maintenant beaucoup plus de cas exotiques dans la manière dont le dictionnaire de cet algorithme semble se comporter une fois plein, qui se produisent majoritairement en présence d'objets à forte entropie tels que des programmes, des fichiers SAVF inclus, sur lesquels TERSE donne un taux de compression négatif.
  • La décompression zlib qui semble nécessaire pour lire les fichiers SAVF à partir de la V7R5 est maintenant supportée.
jSAVF offre désormais un export d'objet brut en version non compressée pour aider à débugger ce genre de comportements, donc si vous êtes confrontés à un export incorrect qui vous fait penser à un problème de décompression, n'hésitez pas à me faire parvenir un échantillon.

Cette version apporte une première mouture d'un export CSV pour les tables de base de données (membres de fichiers physiques non-source). La plupart des types de champs sont gérés sauf DECFLOAT qui viendra éventuellement plus tard. Il est cependant possible que certaines variantes que je n'ai pas pu tester ne soient pas exportées correctement.

Pour le moment j'ai pu tester les types de champs suivants: NUMERIC, DECIMAL, TINYINT, SMALLINT, INTEGER, BIGINT, FLOAT, REAL, DOUBLE, DATE, TIME, TIMESTAMP, CHAR, BINARY, VARCHAR, VARBINARY, GRAPHIC, VARGRAPHIC, DBCS, CLOB, BLOB, DBCLOB

Le volume des échantillons que j'ai pu trouver en libre accès sur Internet étant assez limité, il est probable que l'export de grosses tables pose des problèmes (en particulier si celles-ci contiennent des champs VARYING ou LOB vu la manière dont ceux-ci sont stockés lorsqu'ils ne tiennent pas dans l'espace qui leur est alloué dans l'enregistrement principal). En cas de problème il est possible d'obtenir plus d'information en activant le mode debug/expérimental dans les préférences et en redémarrant jSAVF.

J'envisage par la suite de rendre l'export CSV des tables configurable pour choisir les champs et leur formattage, ainsi que permettre de forcer leur encodage.

Cette version ajoute aussi une première version expérimentale de l'extraction du contenu des vues de débogage *SOURCE ou *LIST inclues dans certains programmes à la compilation. Ceci est disponible sur les objets de type *PGM, *MODULE et *SRVPGM lorsque le mode debug/expérimental est activé au démarrage de jSAVF.

Pour le moment c'est assez basique, l'ensemble des vues sont exportées ensembles sans autre traitement qu'une éventuelle décompression si nécessaire, donc les sources peuvent représenter le contenu de plusieurs spools ou fichiers sources.

Si vous avez des problèmes avec cette version de jSAVF, n'hésitez pas a m'en informer.

article

Mise à jour: jSAVF 1.60

L'ancienne option -noUI a été remplacée par quelques options fournissant une interface permettant de contrôler jSAVF en ligne de commande. Ces options permettent d'exécuter des commandes batch au travers d'une API limitée soit sur la ligne de commande soit au moyen de fichiers. Lorsque jSAVF est lancé en mode --console, il exécutera les expressions et/ou fichiers batch après avoir ouvert un SAVF si un était spécifié sur la ligne de commande. Lorsqu'aucun script n'est fourni, un script par défaut affiche le résultat de l'impression du SAVF décrivant les objets qu'il contient.

Pour l'instant l'API batch de jSAVF permet principalement d'ouvrir un SAVF, de le vérifier, et d'afficher son contenu, mais j'ajouterais d'autres moyens d'interagir avec le reste des fonctionnalités de jSAVF dans des versions futures.

La documentation de l'API batch de jSAVF batch API est inclue dans les archives ou installers en téléchargemet, avec un fichier batch démontrant ce qu'on peut faire avec.

Le langage de script sous-jascent est basé sur Apache JEXL et offre une syntaxe entre Java et JavaScript:

var savf = jsavf:openSaveFile("~/some.savf");
out.println(savf.displaySaveFile());
jsavf:exit(0);

Si vous avez des problèmes avec cette version de jSAVF, n'hésitez pas a m'en informer.

article

BugFix & Update: jSAVF 1.51

Un utilisateur a signalé un problème lors de l'utilisation de jSAVF avec un message lié au chargement de la configuration de l'application. Il semble que la manière dont les fichiers de propriétés XML Java sont chargés a changée dans une version récente de la JRE, et depuis jSAVF n'était plus capable de charger sa configuration ou de démarrer.

Apres quelques recherches, le bug Java qui a été corrigé et reporté dans les versions LTS des JREs était probablement le suivant: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8214820.

Apparament la méthode Properties.loadFromXML() rejette maintenant des fichiers properties XML avec une DTD intégrée tels que :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties [
<!ELEMENT properties (comment?, entry*)>
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA)>
<!ELEMENT entry (#PCDATA)>
<!ATTLIST entry key CDATA #REQUIRED>
]>
<properties>
...
et n'accepte plus maintenant que des documents tels que :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
...
malgré que les deux DTDs décrivent des contraintes rigoureusement identiques, et que les éléments les respectent.

J'ai donc converti la configuration vers l'ancien format de properties car ce format a moins de chance de subire une régression de la sorte, et aussi parceque la configuration n'avait pas vraiment besoin d'être conservée en XML.

J'ai aussi profité de cette occasion pour mettre à jour la version du JRE OpenJDK intégré dans l'installer Windows (v11.0.7+10), l'installeur NSIS lui même (v3.0.5), et quelques autres dépendences (slf4j, outils de build, ...).

Si vous découvrez un problème avec cette version n'hésitez pas à me le remonter.

article

BugFix & Mise à jour: jSAVF 1.50

Un utilisateur m'a remonté avoir des problèmes avec des SAVF Japonais. L'extraction de fichiers sources ne fonctionnait pas à cause d'un type de champ DBCS non supporté, et il y avait aussi des problème d'affichage de caractères Japonais. J'ai reproduit les deux problèmes à l'aide de SAVF Japonais trouvés sur le net (merci http://hrm.fixa.jp/free/freesoft.htm).

Pour cette version, j'ai donc amélioré le support de l'internationalisation dans jSAVF:

  • J'ai ajouté le support des champs DBCS à l'extracteur de sources, donc maintenant il peut exporter des sources en Japonais.
  • J'ai rendu quelques choses configurables:
    • Les polices de caractères de taille fixe utilisés pour l'affichage des impressions et du texte sont maintenant configurables, avec un apperçu de leur capacité à rendre correctement quelques caractères internationaux avec la chaîne suivante faite de traductions machine du mot "Gauche" dans divers langages: "Gauche Lénks Слева Αριστερά اليسار שמאלה Trái 剩下 左 ひだり レフト 왼쪽 बाएं ਖੱਬੇ ".
    • Un nouvel onglet de configuration est dédié aux conversions de texte, et permet maintenant aux utilisateurs d'outrepasser la décision prise par jSAVF concernant quel jeu de caractère peut décoder quel CCSID. Pour les CCSIDs pour lesquels jSAVF n'a pas pu trouver de jeu de caractère correspondant, lorsque la JVM a un jeu de caractère qui peut décoder un CCSID de la même famille l'utilisateur peut maintenant utiliser ce jeu de caractère pour decoder le CCSID autrement non supporté. Par exemple le CCSID 5026 n'est pas supporté par la JVM, mais le CCSID 930 l'est au travers du jeu de caractère Java IBM930, donc en ajoutant une conversion utilisateur du CCSID 5026 avec le jeu de caractère IBM930 on peut extraire la majorité du texte correctement lors d'un export.
    • Le CCSID par défaut que jSAVF utilise dès qu'il ne sait pas comment décoder quelquechose (la plupart des choses liées au CCSID du Job AS/400) peut maintenant aussi être configuré sur cet onglet, et peut désormais utiliser un CCSID qui n'est pas supporté par la JVM tant qu'il existe une conversion utilisateur qui lui assigne un jeu de caractère.

Coté construction, j'ai mis à jour l'OpenJDK inclus dans l'installeur de jSAVF pour Windows (v11.0.4+11), et je construis maintenant tout sous Linux. Je savais qu'on pouvait préparer des installeurs NSIS avec un makensis compilé sous Linux, mais j'ai été agréablement surpris de découvrir que jlink est aussi capable de construire une image modulaire minimale d'OpenJDK pour Windows alors qu'il tourne sous Linux.

Comme toujours, si vous avez des problèmes avec cette version de jSAVF ou que vous n'arrivez pas à ouvrir un SAVF avec, n'hésitez pas a m'en informer.