Symptome : Le contenu des menus ne se chargent pas Cause : Problème de compilation des classes engendré par un problème de chargement de classe. Se produit dès le démarrage de manière aléatoire. Workarround : Redémarrage de l’instance Version simplicité : 5.0.30
2021-04-07T10:29:03.366+02:00 /usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/objects/name/NamImportBsn.java:183: error: cannot find symbol
2021-04-07T10:29:03.366+02:00 JsonArray jsonArray = (JsonArray) JsonParser.parseString(json);
2021-04-07T10:29:03.366+02:00 ^
2021-04-07T10:29:03.366+02:00 symbol: method parseString(String)
2021-04-07T10:29:03.366+02:00
location: class JsonParser
location: class JsonParser
2021-04-07T10:29:03.366+02:00 Note: /usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/objects/Demo/DemoContact.java uses or overrides a deprecated API.
2021-04-07T10:29:03.366+02:00 Note: Recompile with -Xlint:deprecation for details.
2021-04-07T10:29:03.366+02:00 Note: /usr/local/tomcat/webapps/ROOT/WEB-INF/src/com/simplicite/extobjects/name/NamDocumentExternalWebService.java uses unchecked or unsafe operations.
2021-04-07T10:29:03.366+02:00 Note: Recompile with -Xlint:unchecked for details.
2021-04-07T10:29:03.366+02:00 1 error
On parle bien de la lib livrée par défaut dans les libs Simplicité et pas d’une lib ajoutée par vos soins d’une manière ou d’une autre (i.e. par customisation de l’image Docker ou par paramétrage d’un shared code de type “JAR”) ?
Voici cette lib telle que livrée dans l’image 5-latest:
Oui, il s’agit de celle livrée par défaut dans simplicité. Il n’y a pas eu de modification du code récente qui ait pu engendrer ça car cela s’est produit sur la plateforme de formation qui est figée. Elle se coupe tous les soir et redémarre le matin.
Je n’ai pas d’expérience d’utilisation de cette lib en particulier mais je n’ai pas souvenir d’avoir eu de pb de compilation lié à des classes de libs tierces embarquées dans Simplicité utilisées dans du code specifique… Bref ça ne me dit rien du tout.
C’est pour cela que je posais la question sur d’éventuelles libs ajoutées qui induiraient des conflits avec celles embarquées par défaut. En avez vous ajoutées d’une manière ou d’une autre ?
Sinon @Francois vois tu une subtilité de classloading qui pourrait induire un symptôme de ce type ?
Dans l’onglet Operation / Monitoring / Classloaders / Dynamic cache vous avez toutes les libs montées dans la JVM. Si gson est présent il faut vérifier la version, ou voir s’il y en a plusieurs.
car visiblement vous appelez un verbe d’une autre version. JsonParser.parseString n’existe pas ou JsonParser est mal casté.
Et suivant l’ordre de montée en mémoire des jar dans tomcat (ça diffère d’un serveur à l’autre), il doit y avoir inversion entre des libs gson.
gson-2.8.6.jar
mais j’en vois aussi dans google :
google-http-client-gson-1.39.1.jar
google-api-client-gson-1.31.3.jar
Je ne sais pas si ça peut être lié, si Google ré-implemente le gson de base.
Sinon pourquoi ne pas utiliser la lib de json.org ?
On n’a jamais eu de problème avec cette lib.
Les libs google-http-client-gson-1.34.0.jar et google-api-client-gson-1.30.7.jar ne contiennent pas les classes com.google.gson.* en surabondance (@Francois les No de version que tu indique pour ces 2 libs sont celles de la 5.2, pas de la 5.0 où ce sont celles-ci):
PS: Ma question sur les éventuelles libs tierces que vous auriez ajoutées d’une manière ou d’une autre reste d’actualité. Quand il y a des conflits de version de composants tiers c’est en général à cause de ce genre d’ajouts…
par du json.org résoudra le pb. il faut éviter les libs Google en général, c’est un sac de noeuds.
JSONArray jsonArray = new JSONArray(json);
Les APIs sont toutes aussi simples pour parcourir des objets ou des tableaux, et cette lib est en meilleur compatibilité ascendante, car c’est celle qu’utilise Simplicité et donc on est sûr qu’elle marche !
Du coup, en attendant de voir comment on peut résoudre ce pb de doublons cachés, je vous conseille comme @Francois de refactorer votre code pour utiliser la lib org.json. C’est celle qu’on utilise dans le code Simplicité et qu’on utilise abondamment dans nos modules de demo/POC/…
Bon, la bonne nouvelle c’est qu’il n’y a plus ce pb de doublons cachés de classes Gson avec les libs JClouds à jour (2.3.0) embarquées dans la version 5.2 de Simplicité.
On va voir donc s’il est possible d’upgrader exceptionnellement les libs JClouds en 2.3.0 sur les versions Simplicité 5.1 (qui embarque les libs JClouds 2.2.1) et 5.0 (qui embarque les libs JClouds 2.2.0). Normalement ce sont des libs assez standalone, ça devrait le faire.
Pour mémoire on n’upgrade plus les libs tierces une fois qu’une version Simplicité passe en beta (prerelease).
Ce post n’ayant rien de spécifique/privé je l’ai mis dans la catégorie “Defect” publique car la cause et la résolution peut intéresser d’autres clients.