Problème de lib manquantes au démarrage

,

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

De quelle lib(s) tierces parle-t-on ?

Il s’agit de la librairie Gson de google en version 2.8.6

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:

> sudo docker run -it --rm simplicite/platform:5-latest bash
[root@c739c5ad6726 tomcat]# find . -name gson\* -print
./webapps/ROOT/WEB-INF/lib/gson-2.8.6.jar

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):

$ unzip -l google-http-client-gson-1.34.0.jar
Archive:  google-http-client-gson-1.34.0.jar
  Length     Date   Time    Name
 --------    ----   ----    ----
      138  17/12/19 18:05   META-INF/MANIFEST.MF
        0  17/12/19 18:05   META-INF/
        0  17/12/19 18:05   com/
        0  17/12/19 18:05   com/google/
        0  17/12/19 18:05   com/google/api/
        0  17/12/19 18:05   com/google/api/client/
        0  17/12/19 18:05   com/google/api/client/json/
        0  17/12/19 18:05   com/google/api/client/json/gson/
        0  17/12/19 18:05   META-INF/maven/
        0  17/12/19 18:05   META-INF/maven/com.google.http-client/
        0  17/12/19 18:05   META-INF/maven/com.google.http-client/google-http-client-gson/
     3436  17/12/19 18:05   com/google/api/client/json/gson/GsonGenerator.class
     5496  17/12/19 18:05   com/google/api/client/json/gson/GsonParser.class
     1017  17/12/19 18:05   com/google/api/client/json/gson/GsonGenerator$StringNumber.class
     1419  17/12/19 18:05   com/google/api/client/json/gson/GsonParser$1.class
      669  17/12/19 18:05   com/google/api/client/json/gson/GsonFactory$InstanceHolder.class
     2657  17/12/19 18:05   com/google/api/client/json/gson/GsonFactory.class
     3088  17/12/19 18:02   META-INF/maven/com.google.http-client/google-http-client-gson/pom.xml
       81  17/12/19 18:05   META-INF/maven/com.google.http-client/google-http-client-gson/pom.properties
 --------                   -------
    18001                   19 files

et

$ unzip -l google-api-client-gson-1.30.7.jar
Archive:  google-api-client-gson-1.30.7.jar
  Length     Date   Time    Name
 --------    ----   ----    ----
     1331  18/12/19 16:06   META-INF/MANIFEST.MF
        0  18/12/19 16:06   META-INF/
        0  18/12/19 16:06   com/
        0  18/12/19 16:06   com/google/
        0  18/12/19 16:06   com/google/api/
        0  18/12/19 16:06   com/google/api/client/
        0  18/12/19 16:06   com/google/api/client/googleapis/
        0  18/12/19 16:06   com/google/api/client/googleapis/notifications/
        0  18/12/19 16:06   com/google/api/client/googleapis/notifications/json/
        0  18/12/19 16:06   com/google/api/client/googleapis/notifications/json/gson/
        0  18/12/19 16:06   META-INF/maven/
        0  18/12/19 16:06   META-INF/maven/com.google.api-client/
        0  18/12/19 16:06   META-INF/maven/com.google.api-client/google-api-client-gson/
      240  18/12/19 16:06   com/google/api/client/googleapis/notifications/json/gson/package-info.class
     1145  18/12/19 16:06   com/google/api/client/googleapis/notifications/json/gson/GsonNotificationCallback.class
     3169  18/12/19 16:03   META-INF/maven/com.google.api-client/google-api-client-gson/pom.xml
       79  18/12/19 16:06   META-INF/maven/com.google.api-client/google-api-client-gson/pom.properties
 --------                   -------
     5964                   17 files

Mais peut être sont elles en doublon dans une autre lib. Je regarde…

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…

Oui je travaille jamais sur les vielles versions :wink:

mais remplacer le code

JsonArray jsonArray = (JsonArray) JsonParser.parseString(json);

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 !

OK j’ai trouvé la lib où il y a des classes com.google.gson.* en double: c’est jclouds-gson-2.2.0.jar:

Archive:  jclouds-gson-2.2.0.jar
  Length     Date   Time    Name
 --------    ----   ----    ----
     1977  13/10/19 12:28   META-INF/MANIFEST.MF
        0  13/10/19 12:28   META-INF/
      865  13/10/19 12:28   META-INF/DEPENDENCIES
    11358  13/10/19 12:28   META-INF/LICENSE
      181  13/10/19 12:28   META-INF/NOTICE
        0  13/10/19 12:28   META-INF/maven/
        0  13/10/19 12:28   META-INF/maven/org.apache.jclouds/
        0  13/10/19 12:28   META-INF/maven/org.apache.jclouds/jclouds-gson/
      140  13/10/19 12:28   META-INF/maven/org.apache.jclouds/jclouds-gson/pom.properties
     2030  13/10/19 11:00   META-INF/maven/org.apache.jclouds/jclouds-gson/pom.xml
        0  13/10/19 12:28   com/
        0  13/10/19 12:28   com/google/
        0  13/10/19 12:28   com/google/gson/
     6554  13/10/19 12:28   com/google/gson/DefaultDateTypeAdapter.class
      291  13/10/19 12:28   com/google/gson/ExclusionStrategy.class
     2191  13/10/19 12:28   com/google/gson/FieldAttributes.class
      711  13/10/19 12:28   com/google/gson/FieldNamingPolicy$1.class
      837  13/10/19 12:28   com/google/gson/FieldNamingPolicy$2.class
      938  13/10/19 12:28   com/google/gson/FieldNamingPolicy$3.class
     1017  13/10/19 12:28   com/google/gson/FieldNamingPolicy$4.class
     1017  13/10/19 12:28   com/google/gson/FieldNamingPolicy$5.class
     1017  13/10/19 12:28   com/google/gson/FieldNamingPolicy$6.class
     3447  13/10/19 12:28   com/google/gson/FieldNamingPolicy.class
      207  13/10/19 12:28   com/google/gson/FieldNamingStrategy.class
     2020  13/10/19 12:28   com/google/gson/Gson$1.class
     2023  13/10/19 12:28   com/google/gson/Gson$2.class
     1928  13/10/19 12:28   com/google/gson/Gson$3.class
     1746  13/10/19 12:28   com/google/gson/Gson$4.class
     2602  13/10/19 12:28   com/google/gson/Gson$5.class
     1719  13/10/19 12:28   com/google/gson/Gson$FutureTypeAdapter.class

(...)

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).

L’upgrade des libs JClouds a été livré hier soir avec la révision 5.0.36

Merci, et pour info a part les librairies fullcalendar nous n’avons pas de lib tierces.

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.

1 Like

This topic was automatically closed 60 minutes after the last reply. New replies are no longer allowed.