Bonjour

J'ai un petit problème avec l'utilisation de Groovy en Java dans un contexte multi-threading.

Voilà, pour simplifier, j'ai un script Groovy sous forme de chaîne de caractères et j'utilise GroovyShell pour le transformer en Script groovy. Enfin, j'exécute ce script avec la méthode run après avoir fais un setBinding.

Jusque ici, tout va bien. Là où cela se complique c'est que je dois appeler ce script dans un environnement multi-thread avec des bindings différents et je ne peux pas utiliser de synchronized sur ma méthode exécutant le script.

Je suis donc obligé de retransformer à chaque fois ma chaîne de caractères en Script groovy. Ceci a pour effet d'augmenter le nombre de classe chargé dans la machine virtuelle car la classe Script est une classe inline dans GroovyShell et donc de ralentir le tout.

De plus, si jamais je veux instancier un seul GroovyShell (pour améliorer tout ce traitement), mes fameuses classe inline Script ne sont jamais libérées par le Garbage Collector et j'obtiens un Perm Gen.

Ma méthode est-elle la bonne pour ce genre de problème ?
Y-a-t-il une autre solution ?

J'utilise la version 1.7.1 (je sais elle n'est pas récente) et je voulais passer à la version 2.0.2.

Peut-on procéder différemment avec cette version ?

Merci d'avance pour votre aide

Stéphane