Intégration de dépendances (JAR) dans l'image Docker Simplicité

Version

Version=5.1.35
BuiltOn=2022-03-19 08:31
Git=release/34afbaeefbb5109867b443c5798d486a221a9b74

Description

Je dois utiliser une librairie interne (code Renault) pour valider un token JWT fourni par un front public (exigence de nos équipes sécurité). Cette librairie présente deux dépendances qui semblent inexistantes dans le socle et que j’ai intégré pour l’instant comme ceci dans mon Dockerfile :

ADD --chown=simplicite:simplicite jose4j-0.7.9.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib
ADD --chown=simplicite:simplicite caffeine-3.0.5.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib

Est-ce la bonne manière de procéder ?
Est-il possible de les intégrer sous forme de librairie partagée Java ? (code serveur)
Est-il envisageable de les intégrer dans le socle ?

L’intégration de libs tierces doit toujours être vérifiée par nos soins car cela peut tirer des dépendances indirectes pas forcément compatibles avec les libs déjà embarquées dans la plateforme.

Je vais regarder ces deux là et je te dis (on parle bien d’une 5.2 ?)

edit : et si elles nous semblent pertinentes à intégrer (et que leur license le permet) dans le socle, on les ajoutera

Ensuite il y a 2 approches pour ajouter ces libs tierces:

  1. en construisant une image custom et en y copiant les libs dans /usr/local/tomcat/webapps/ROOT/WEB-INF/lib
  2. en les paramétrant comme shared code de type JAR
1 Like

C’est dispo en 5.1 ou uniquement à partir de la 5.2 ?

Ca existe depuis la 4.0

Ok, j’avais regardé suite à ta réponse et je n’ai vu que “Librairie Java” avec un champ qui semble prévu pour enregistrer la source (du coup j’ai eu un doute entre “fichier source au format .jar” ou “fichier source au format .java”…

Oui “Librairie Java” = JAR

On parle bien de ces 2 dépendances ? (j’ai mis les versions à jour car si on les intégre ce sera de toute façon les versions à jour)

oui c’est bien ça…
dans mes tests j’ai extrait les jar de notre repo interne (il n’est en effet pas à jour)

Elles n’ajoutent pas de nouvelles dépendances indirectes ou de conflits avec d’autres libs (ici en 5.2):

Elles peuvent donc potentiellement être ajoutées à la plateforme soit spécifiquement soit au niveau socle

Elles font clairement double emploi avec d’autres libs qu’on utilise déjà pour la validation des tokens JWT et la gestion de cache - e.g. le cache des grants API - mais bon, elles sont en license Apache 2.0 et on est plus à 2 libs près :wink:

En 5.2+ je peux les avoir intégrés d’ici demain

1 Like

C’est buildé et poussé sur votre SIM Renault

Je note au passage que sur ce serveur une des instances prend l’essentiel du CPU depuis des heures: prvsdev

A mon avis il y a quelque chose d’anormal ou un traitement lourd ? bench ? etc. qui se passe sur cette instance…

a priori elle ne me dit rien (je ne la gère pas).
je pense que tu peux la stopper (a fortiori si c’est du dev)

OK, je l’ai arrêté on verra si quelqu’un se manifeste.

Bonjour David,
notre upgrade en 5.2 approche et je cherche à lever une petite dette concernant l’intégration des JAR Renault. Actuellement (en 5.1), ils sont intégrés via le Dockerfile (les libs jose4j et caffeine ont été intégrées dans le socle 5.2 donc je les retirerai lors de l’upgrade) :

# Add Renault OpenID Connect access tokens (JWT) validator dependencies
ADD --chown=simplicite:simplicite jose4j-0.7.9.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib
ADD --chown=simplicite:simplicite caffeine-3.0.5.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib
ADD --chown=simplicite:simplicite token-validator-2.2.1.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib

Tout fonctionne bien hormis une alerte un peu crade au démarrage du container qui nous dit que la signature des JAR du système est altérée et que le comportement est imprévisible.

Afin de résoudre ça, j’essaye de passer en mode SharedCode ainsi :

Mais malgré mes tentatives je reste bloqué sur ce problème (via la fonction “Recompile all” de l’éditeur de code) :

2022-05-09 10:30:45,187|GLOBAL|INFO|2022-05-09 10:29:34,550|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.DynamicClassLoader|compile||Event: Deleting source and binary directories

2022-05-09 10:29:34,913|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.DynamicClassLoader|compile||Event: Compiling all classes from src:/usr/local/tomcat/webapps/ROOT/WEB-INF/src to bin:/usr/local/tomcat/webapps/ROOT/WEB-INF/jar

2022-05-09 10:29:35,572|SIMPLICITE|WARN||http://8b3bda49f2f3:8080||WARN|system|com.simplicite.util.engine.DynamicClassLoader|compile||Event: Unable to compile all classes

java.lang.Exception: Class compilation error (status 1)

/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/BCSIPublic_RCM/BCSIRCMPublicPortalToolbox.java:24: error: package com.renault.auth.config does not exist

import com.renault.auth.config.OIDCValidationParameters;

                              ^

/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/BCSIPublic_RCM/BCSIRCMPublicPortalToolbox.java:25: error: package com.renault.auth.token does not exist

import com.renault.auth.token.AccessToken;

                             ^

/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/BCSIPublic_RCM/BCSIRCMPublicPortalToolbox.java:26: error: package com.renault.auth.token does not exist

import com.renault.auth.token.TokenValidationRequest;

                             ^

/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/BCSIPublic_RCM/BCSIRCMPublicPortalToolbox.java:27: error: package com.renault.auth.token does not exist

import com.renault.auth.token.TokenValidationService;

                             ^

/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/BCSIPublic_RCM/BCSIRCMPublicPortalToolbox.java:28: error: package com.renault.auth.token.mapper does not exist

import com.renault.auth.token.mapper.IdentityProvider;

                                    ^

/usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/commons/BCSIPublic_RCM/BCSIRCMPublicPortalToolbox.java:29: error: package com.renault.auth.user does not exist

import com.renault.auth.user.UserProfile;

                            ^

6 errors


at com.simplicite.util.engine.DynamicClassLoader.compile(DynamicClassLoader.java:189)

at com.simplicite.util.engine.CoreCache.compileAll(CoreCache.java:5680)

at com.simplicite.objects.System.Script.compileAll(Script.java:466)

En inspectant le contenu du container, je ne retrouve aucune autre trace de la lib en question qu’ici :

[root@8b3bda49f2f3 tomcat]# find . -name \*token-validator\* -ls
342043   56 -rw-r-----   1 root     root        53383 May  9 08:25 ./webapps/ROOT/WEB-INF/recyclebin/Script/scr_file/0/37/token-validator-2.2.1.jar
[root@8b3bda49f2f3 tomcat]# find . -name \*Renault\* -ls
341729    4 drwxr-x---   2 root     root         4096 May  9 08:29 ./webapps/ROOT/WEB-INF/src/com/simplicite/adapters/RenaultAuth_INT
341469    4 drwxr-x---   2 root     root         4096 May  9 08:29 ./webapps/ROOT/WEB-INF/src/com/simplicite/commons/RenaultAPI
341513    4 drwxr-x---   2 root     root         4096 May  9 08:29 ./webapps/ROOT/WEB-INF/src/com/simplicite/objects/RenaultS3
341985    4 drwxr-x---   2 root     root         4096 May  9 08:30 ./webapps/ROOT/WEB-INF/jar/com/simplicite/adapters/RenaultAuth_INT
341752    4 drwxr-x---   2 root     root         4096 May  9 08:29 ./webapps/ROOT/WEB-INF/jar/com/simplicite/commons/RenaultAPI
341791    4 drwxr-x---   2 root     root         4096 May  9 08:29 ./webapps/ROOT/WEB-INF/jar/com/simplicite/objects/RenaultS3

J’ai l’impression que l’intégration SharedCode n’est pas faite de la bonne manière mais je peine à trouver comment faire…

Ca devrait pourtant à priori marcher avec un shared code de type lib (= JAR)

S’agissant de l’approche par recopie des JARs dans une image custom, le message nous sert à détecter qu’il y a effectivement des choses qui ont été modifiées en cas de demande de support. Ca date d’un pb qu’on a mis des lustres à comprendre car on ne nous avait pas dit qu’un JAR de version conflictuelle avait été ajouté…

Bonjour,

Les liens “shared code usage” ne servaient que pour le code Rhino partagé avec certains objets uniquement. Dans le cas de JAR additionnels, il ne faut rien mettre (c’est peut être ça qui bloque le chargement des JAR dans la JVM).

Ensuite dans l’onglet Classloader du Monitoring, vous pouvez voir les JAR chargés pour vérifier s’ils sont bien présents. Si oui, c’est un problème de code / compilation, sinon faudra tester de notre côté ce qui peut bloquer ces libs.

ok merci pour vos retours.

après suppression des relations d’usage et redéploiement du docker, j’ai ça :

2022-05-09 12:46:42,360|GLOBAL|INFO|SIMPLICITE: Platform on endpoint [http://8b3bda49f2f3:8080] is (re)starting...
2022-05-09 12:46:42,364|SIMPLICITE|INFO|Project dir: /usr/local/tomcat/webapps/ROOT/WEB-INF
2022-05-09 12:46:42,419|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.CoreCache|initObjectCache||OBJECT_CACHE_SIZE=10000
2022-05-09 12:46:42,423|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.CoreCache|initProcessCache||PROCESS_CACHE_SIZE=10000
2022-05-09 12:46:47,456|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.DynamicClassLoader|compile||Deleting source and binary directories
2022-05-09 12:46:47,773|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.DynamicClassLoader|compile||Compiling all classes from src:/usr/local/tomcat/webapps/ROOT/WEB-INF/src to bin:/usr/local/tomcat/webapps/ROOT/WEB-INF/jar
2022-05-09 12:46:47,777|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.CoreCache|getSharedLibs||Add shared lib token-validator-2.2.1.jar
2022-05-09 12:46:53,398|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.DynamicClassLoader|DynamicClassLoader||Instanciate DynamicClassLoader@71069be2
2022-05-09 12:46:53,399|SIMPLICITE|INFO||http://8b3bda49f2f3:8080||INFO|system|com.simplicite.util.engine.CoreCache|loadDynamicJar||Loaded dynamic JARs
2022-05-09 12:46:53,399|SIMPLICITE|INFO|Platform on endpoint [http://8b3bda49f2f3:8080] has (re)started
2022-05-09 12:46:53,399|GLOBAL|INFO|SIMPLICITE: Platform on endpoint [http://8b3bda49f2f3:8080] has (re)started

… et la compilation du code est OK :partying_face:

Ca cache sans doute quand même un pb. Car ni un rédéploiement Docker n’est pas sensé changer quelque chose et les relations d’usage ne devraient pas avoir d’effet (en mode Java elles sont juste ignorées).

On va essayer de reproduire.