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.
Il est recommandé de toujours passer d’une version majeure à la suivante sans sauter de version.
Mise à jour de la version 4.11 à 4.12 (en développement)
Le serveur applicatif n’a plus de port HTTPS ouvert par défaut. Cela pour des raisons de performances et également car le serveur applicatif se trouve toujours derrière un service Apache ou traefik qui permettent la gestion des certificats SSL, soit manuellement ou en les renouvelant de manière automatique.
Il est possible d’utiliser la variable d’environnement SAINET_PORT_HTTPS
afin de rétablir le comportement précédent.
Pour les installations Docker, des limites mémoire ont été ajoutées par défaut:
Propriété | Valeur |
---|---|
MaxMetaspaceSize |
384m |
CompressedClassSpaceSize |
128m |
MaxDirectMemorySize |
256m |
Ces valeurs peuvent être modifiées par la variable d’environnement JAVA_OPTIONS
.
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.
- Stopper les différents containers (
docker-compose down
), puis effectuer une sauvegarde de la base de données. - Mettre à jour le container MariaDB vers la version 10.11.
- 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>
- Mettre à jour le container de SAINet vers la version saierp/sainet:4.11.
- Si utilisées, renommer les variables d’environnement relatives à MariaDB (voir les paramètres ci-dessous).
- Mettre à jour les versions des autres services si nécessaire (traefik, redis, …).
- Relancer les containers (
docker-compose up -d
).
- Stopper les services SAINet et MariaDB, puis effecuter une sauvegarde de la base de données.
- Mettre à jour MariaDB vers la version 10.11.
- Redémarrer le service MariaDB et appliquer le script de migration:
mariadb-upgrade --user=root --password=<pwd>
. - Mettre à jour le JDK vers la version 21.
- Si utilisées, renommer les variables d’environnement relatives à MariaDB (voir les paramètres ci-dessous).
- Télécharger la version 4.11 désirée et remplacer le fichier
sainet.jar
existant. - Appliquer la mise à jour manuellement:
java -Djdk.jar.maxSignatureFileSize=32000000 -jar sainet.jar --runtime <runtime> --update
. - Démarrer le service SAINet.
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 |
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).
Pour les installations Docker du portail, mettre à jour le tag vers la version 4.11
.
Il est possible de saisir des clés de répartition comptables pour la saisie des factures fournisseurs. Ces clés peuvent être enregistrées dans le FOU07, puis être sélectionnées dans les adresses de paiement en FOU02 (elles seront ainsi utilisées automatiquement) et également au niveu du FOU30.
Cette nouvelle fonctionnalité n’implique pas d’adaptation majeure dans le processus de saisie des factures fournisseur.
Plusieurs modifications ont été introduites dans le dossier de l’employé (SAL04) et la saisie des assurances (SAL05) afin de répondre à la certification Swissdec 5. D’autres modifications seront également amenées dans les versions suivantes au fur et à mesure de l’avancement des travaux. Celles-ci sont indiquées dans le guide de migration Swissdec 5 dans l’aide en ligne.
Ces changements n’impliquent pas d’adaptation majeure dans le processus de saisie des données salariales.
Une incohérence de fond provoquait une erreur d’affichage dans l’ordre des pages, typiquement lorsque des pages devant être ordrées chronologiquement n’étaient pas saisies dans l’ordre croissant des dates. Désormais, l’ordre des pages multiples affichées dans les vues de dossier (par exemple SALV4) est cohérent avec l’affichage présenté dans la tâche de saisie correspondante (SAL04).
Toutefois, cette modification peut provoquer des différences dans certaines listes UNI94 qui utilisent le formatteur legacy (avec des <array>
). Les formatteurs BlueIron ne sont pas affectés
par ce changement.
Il est possible de revenir à l’ancien comportement en utilisant la valeur by_occurrence
dans la propriété dossier.views.page_sort
en SYS22.
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.
Ces changements sont principalement techniques et ne devraient pas impacter les fonctionnalités de l’application.
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).
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. |
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.
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 raccourci (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.
- Le support de la base de données Oracle a été supprimé.
- Le support du serveur applicatif JBoss a été supprimé.
Mise à jour de la version 4.9 à 4.10
- Stopper les différents containers (
docker-compose down
), puis effectuer une sauvegarde de la base de données. - Mettre à jour le container MariaDB vers la version 10.6.
- 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>
- Mettre à jour le container de SAINet vers la version saierp/sainet:4.10.
- Si utilisée, renommer la variable d’environnement
SAINET_MOBILE_ENABLED
enSAINET_WEBAPP_ENABLED
dansdocker-compose.yml
. - Mettre à jour les versions des autres services si nécessaire (traefik, redis, …).
- Relancer les containers (
docker-compose up -d
).
- Stopper les services SAINet et MariaDB, puis effecuter une sauvegarde de la base de données.
- Mettre à jour MariaDB vers la version 10.6.
- Redémarrer le service MariaDB et appliquer le script de migration:
mariadb-upgrade --user=root --password=<pwd>
. - Mettre à jour le JDK vers la version 17.
- Si utilisée, renommer la variable d’environnement
SAINET_MOBILE_ENABLED
enSAINET_WEBAPP_ENABLED
dans<runtime>/services/widnows/sainet-vars.bat
. - Télécharger la version 4.10 désirée et remplacer le fichier
sainet.jar
existant. - Appliquer la mise à jour manuellement:
java -Djdk.jar.maxSignatureFileSize=32000000 -jar sainet.jar --runtime <runtime> --update
. - Démarrer le service SAINet.
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.
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.
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 là).
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.
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.
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
Ce chapitre décrit les changements principaux par rapport à la version 4.8.
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.
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.