Mises à jour majeures

Ci-dessous sont décrites les actions importantes à effectuer pour le passage d’une version majeure de SAINet à une autre. Pour chaque point mentionné, il est indiqué quelles actions doivent être entreprises selon le type d’installation.

Attention:

Il est recommandé de toujours passer d’une version majeure à la suivante sans sauter de version.

Mise à jour de la version 4.10 à 4.11

1. Mises à jour du système

Installation Docker

Attention:

Dès la version MariaDB 10.8.3, il est nécessaire d’avoir la version docker 20.10.10 ou supérieure, sinon le container affichera une erreur durant le démarrage. Il est également possible de contourner ce problème en utilisant cette solution.

  1. Stopper les différents containers (docker-compose down), puis effectuer une sauvegarde de la base de données.
  2. Mettre à jour le container MariaDB vers la version 10.11.
  3. Redémarrer le container (docker-compose up -d sainet_db) et appliquer le script de migration des données à l’intérieur du container:
docker ps
docker exec -ti <container_id> /bin/bash
mariadb-upgrade --user=root --password=<pwd>
  1. Mettre à jour le container de SAINet vers la version saierp/sainet:4.11.
  2. Si utilisées, renommer les variables d’environnement relatives à MariaDB (voir les paramètres ci-dessous).
  3. Mettre à jour les versions des autres services si nécessaire (traefik, redis, …).
  4. Relancer les containers (docker-compose up -d).

Installation système

  1. Stopper les services SAINet et MariaDB, puis effecuter une sauvegarde de la base de données.
  2. Mettre à jour MariaDB vers la version 10.11.
  3. Redémarrer le service MariaDB et appliquer le script de migration: mariadb-upgrade --user=root --password=<pwd>.
  4. Mettre à jour le JDK vers la version 21.
  5. Si utilisées, renommer les variables d’environnement relatives à MariaDB (voir les paramètres ci-dessous).
  6. Télécharger la version 4.11 désirée et remplacer le fichier sainet.jar existant.
  7. Appliquer la mise à jour manuellement: java -Djdk.jar.maxSignatureFileSize=32000000 -jar sainet.jar --runtime <runtime> --update.
  8. Démarrer le service SAINet.

Paramètres de connexion à MariaDB

Les variables d’environnement ont été renommées:

Version 4.10 Version 4.11
SAINET_DATABASE_MYSQL_URL SAINET_DATABASE_URL
SAINET_DATABASE_MYSQL_SCHEMA SAINET_DATABASE_SCHEMA
SAINET_DATABASE_MYSQL_HOST SAINET_DATABASE_HOST
SAINET_DATABASE_MYSQL_PORT SAINET_DATABASE_PORT
SAINET_DATABASE_MYSQL_USER SAINET_DATABASE_USER
SAINET_DATABASE_MYSQL_PASSWORD SAINET_DATABASE_PASSWORD
SAINET_DATABASE_MYSQL_PARAMS SAINET_DATABASE_PARAMS

Dans le cas où le fichier server.properties est utilisé, la propriété database.type doit être modifiée de mysql à mariadb et les propriétés suivantes modifiées:

Version 4.10 Version 4.11
database.mysql.host database.mariadb.host
database.mysql.port database.mariadb.port
database.mysql.schema database.mariadb.schema
database.mysql.user database.mariadb.user
database.mysql.password database.mariadb.password

Sauvegardes automatiques de la base de données lors des mises à jour

Le système n’effectue plus de sauvegarde automatique lors des mises à jour de SAINet.

Cela n’a aucune influence sur les sauvegardes automatiques quotidiennes qui sont généralement effectuées par un autre système (soit au niveau de la machine virtuelle, soit par un script externe).

Portail

Pour les installations Docker du portail, mettre à jour le tag vers la version 4.11.

2. Changements majeurs dans SAINet

Mode strict pour la recherche de tabelle IJM/LAAC

Le moteur de salaire SAL24 utilise le mode strict lorsqu’une tabelle IJM/LAAC est recherchée en UNI85. Ainsi, si une tabelle n’est pas trouvée, une erreur sera mentionnée alors qu’auparavant toute la ligne était à zéro, sans soumis. Plus d’informations ici.

Il est possible de revenir à l’ancien comportement en changeant la variable sal24.legacy_table_lookup_strict en SYS22.

Mise à jour de Hibernate

La mise à jour sur les dernières versions de Hibernate impliquent que certaines requêtes EJBQL sont plus strictes et que désormais certaines constructions peuvent être rejetées.

  • Les comparaisons avec NULL doivent systématiquement se faire avec <field> IS NULL/<field> IS NOT NULL. Les prédicats <field> = NULL/<field> != NULL ne sont plus valides. Cela ne provoque pas d’erreur, mais les résultats peuvent être différents et certains enregistrements qui étaient renvoyés auparavant ne le seront plus.
  • Les types des paramètres doivent correspondre au type de l’entité. Ainsi, il n’est plus possible d’effectuer le prédicat <dateField> = ?1 et de passer une chaîne de caratère pour le paramètre ?1.

Cela nécessite une vérification dans les macros UNI93 (notamment pour le DEB22).

Mise à jour de GraalJS

Dès la version 23.1.0 de GraalJS, certaines variables entrent en conflit avec les variables injectées par SAINet. Par conséquent, celles-ci ont du être renommées.

Tâches Variables en 4.10 Variables en 4.11 Description
GTP02 engine gtpEngine La variable engine pointe vers une instance interne du moteur GraalJS. Pour stopper le script courant, utiliser gtpEngine.stop() en lieu et place de engine.stop().
UNI20 context validationContext La variable context pointe sur le contexte interne GraalJS. Pour garder le fonctionnement, renommer context en validationContext dans les scripts.

Mise à jour de HttpComponents

La nouvelle version de Apache HttpComponents implique quelques changements de fond dans le traitement des requêtes HTTP/HTTPS. Cela ne devrait pas avoir de conséquence particulière, mais les accès aux services externes (Mises à jour automatiques, Exchange, OBP, MediData, ISM, …) doivent être testés afin de valider leur fonctionnement suite à la mise à jour.

Changement de fond dans le protocole

Le format d’échange n’était pas tout à fait identique entre le serveur et le client riche, notamment sur les données relatives aux dossiers. Le serveur utilisait le nom complet (par exemple ADRDOSDOSSIER.ID_PK) tandis que le client utilisait le nom raccourdi (ADRDOS.ID_PK). Tout a été aligné afin que seul le nom raccourci soit utilsé partout.

Ce changement peut notamment affecter les templates en UNI94 et la gestion des référents ou les filtres spéciaux gérés par le code métier. De manière générale, tout devrait fonctionner de manière identique sans modification spéciale. Il n’est pas exclus que pour certains templates UNI94 il faille également passer à la syntaxe raccourcie.

Autres changements

  • Le support de la base de données Oracle a été supprimé.
  • Le support du serveur applicatif JBoss a été supprimé.

Anciennes mises à jour

Mise à jour de la version 4.9 à 4.10

Mise à jour de la version 4.9 à 4.10

1. Mises à jour du système

Installation Docker

  1. Stopper les différents containers (docker-compose down), puis effectuer une sauvegarde de la base de données.
  2. Mettre à jour le container MariaDB vers la version 10.6.
  3. Redémarrer le container (docker-compose up -d sainet_db) et appliquer le script de migration des données à l’intérieur du container:
docker ps
docker exec -ti <container_id> /bin/bash
mariadb-upgrade --user=root --password=<pwd>
  1. Mettre à jour le container de SAINet vers la version saierp/sainet:4.10.
  2. Si utilisée, renommer la variable d’environnement SAINET_MOBILE_ENABLED en SAINET_WEBAPP_ENABLED dans docker-compose.yml.
  3. Mettre à jour les versions des autres services si nécessaire (traefik, redis, …).
  4. Relancer les containers (docker-compose up -d).

Installation système

  1. Stopper les services SAINet et MariaDB, puis effecuter une sauvegarde de la base de données.
  2. Mettre à jour MariaDB vers la version 10.6.
  3. Redémarrer le service MariaDB et appliquer le script de migration: mariadb-upgrade --user=root --password=<pwd>.
  4. Mettre à jour le JDK vers la version 17.
  5. Si utilisée, renommer la variable d’environnement SAINET_MOBILE_ENABLED en SAINET_WEBAPP_ENABLED dans <runtime>/services/widnows/sainet-vars.bat.
  6. Télécharger la version 4.10 désirée et remplacer le fichier sainet.jar existant.
  7. Appliquer la mise à jour manuellement: java -Djdk.jar.maxSignatureFileSize=32000000 -jar sainet.jar --runtime <runtime> --update.
  8. Démarrer le service SAINet.
Note:

La version de MariaDB doit être >= 10.6.9 pour des raisons de performances, sinon certaines requêtes SQL ne s’exécutent pas avec le bon index et cela résulte en des temps de réponse très lents.

2. Changements majeurs dans SAINet

Déploiement de l’accès mobile

Il est important de tester l’accès mobile (via navigateur et/ou tablette) afin de s’assurer que la migration de la variable SAINET_MOBILE_ENABLED a bien été effectuée. Dans le cas contraire, une page indiquera que cette fonctionnalité n’est pas disponible.

Listes personnalisées (UNI94)

A des fins de sécurités, le support du formatter legacy (<format><array>...</array></format>) est restreint. Notamment, plusieurs types de noeuds permettant l’utilisation du JavaScript ont été supprimées (voir ici et ). Par conséquent, il se peut que certaines listes personnalisées stockées en UNI94 ne soient plus fonctionnelles (notamment dans les tâches ADRS2/ADRL2 ou SALEL).

Ces listes devront être refaites en utilisant un formatter BlueIron.

Moteur de JavaScript (Nashorn => GraalJS)

Nashorn était le moteur JavaScript intégré au JDK jusqu’au JDK 14 après quoi, celui-ci a été complètement supprimé, raison pour laquelle il est nécessaire de migrer sur le nouveau moteur GraalJS. Celui-ci est plus performant et implémente les derniers standards ECMAScript.

Le moteur GraalJS est également beaucoup plus strict. Ainsi, certaines constructions qui fonctionnaient auparavant ne sont plus tolérées. Quelques exemples sont mentionnés dans les chapitres suivants.

Les tâches impactées sont UNI20,UNI23,UNI25 et GTP02.

Migrer de Nashorn vers GraalJS

Nashorn permettait certaines opérations plus ou moins valide et ne remontait pas d’exception en cas d’erreur, mais ajustait son comportement. Bien que pratique, cela pouvait cacher certains problèmes de fond, ce qui donnait l’impression de fonctionner alors que le traitement n’était pas correct.

Les chapitres suivants montrent quelques exemples de constructions invalides qui passaient avec Nashorn mais qui provoquent désormais une erreur avec GraalJS.

  • Embedded BigDecimal

Il était possible de passer un BigDecimal en paramètre à un autre. Ce constructeur n’existant pas, désormais un message d’erreur sera affiché.

var a = new BigDecimal(100);
var b = new BigDecimal(a); //erreur
  • Division par zéro

Une division par zéro “fonctionnait”:

var a = new BigDecimal(100);
var b = a.divide(BigDecimal.ZERO, MathContext.DECIMAL64); //pas d'erreur

GraalJS sortira clairement une erreur comme quoi la division est indéterminée. Il est donc nécessaire de vérifier le paramètre.

if(divisor.compareTo(BigDecimal.ZERO) != 0) {
  var b = value.divide(a, MathContext.DECIMAL64);
}
  • Opérateurs

Nashorn tolérait le mixage entre BigDecimal et Number.

var a = 5;
var b = new BigDecimal(10);
var c = a + b; //15

Cela n’est plus possible avec GraalJS, il est nécessaire d’avoir des objets du même type afin d’utiliser les opérateurs numériques.

var a = 5;
var b = new BigDecimal(10);
var c = a + b.intValue(); //15

Autre solution:

var a = new BigDecimal(5);
var b = new BigDecimal(10);
var c = a.add(b); //new BigDecmial(15)
  • Constantes invalides

Les erreurs relatives à une constante invalides étaient cachées.

var a = new BigDecimal("123.456");
var b = a.setScale(2, BigDecimal.HALF_DOWN); //BigDecimal.HALF_DOWN n'existe pas

Désormais ce genre de cas sortira une erreur car BigDecimal.HALF_DOWN vaudra null (remplacer par MathContext.HALF_DOWN).

  • Utilisation des fonctions de String Java/JavaScript

L’intégration des chaînes de caractères se fait au format JavaScript et il n’est plus possible d’utiliser certaines méthodes de String Java.

var x = myString.isEmpty(); //erreur 'isEmpty' is not defined
var y = "a".compareTo("c"); //erreur 'compareTo' is not defined, utiliser la méthode localeCompare

Il faut donc se limiter aux fonctions de String JavaScript.

Mise à jour de la version 4.8 à 4.9

Mise à jour de la version 4.8 à 4.9

Ce chapitre décrit les changements principaux par rapport à la version 4.8.

1. Configurations HistoryViewer (GTP40)

La gestion des configurations de l’HistoryViewer (GTP) a été refaite avec un nouveau format. Il se peut que certaines configurations pré-existantes ne s’affichent plus (ce qui indique qu’elles avait déjà un problème de cohérence au préalable).

Dans ce cas, il faudra recréer la configuration.

2. Configuration système (SYS22)

La listes des variables système est désormais explicite (visible via la tâche SYSSV). Les variables indiquées en rouge dans SYS22 sont inconnues du système et elles peuvent donc être supprimées.