2010-04-30 7 views
1

Je vais réutiliser la bibliothèque OGNL hors de portée Struts2. J'ai ensemble de formules assez grande, c'est la raison pour laquelle je voudrais précompiler tous:Sécurité de threads OGNL

Ognl.parseExpression(expressionString); 

Mais je ne sais pas si l'expression précompilés peut être utilisé dans un environnement multi-thread. Est-ce que quelqu'un sait si cela peut être utilisé?

Répondre

1

Ce code PropertyUtils de OGNL est écrit pour être thread-safe, et donc je suppose que les expressions compilées sont destinées à être thread-safe. Une preuve supplémentaire est que la plupart de l'API d'accès fournit l'état mutable en tant que paramètre de contexte (par exemple, voir PropertyAccessor), de sorte que les classes elles-mêmes ont un état peu mutable. Les classes immuables sont intrinsèquement thread-safe. Le guide du développeur invite les extensions à être thread-safe, et finalement regardant à travers le code, où il y a un état mutable, il est gardé dans un bloc synchronisé, par exemple voir EvaluationPool. En résumé, il semble OGNL a été conçu pour être thread-safe. Que ce soit effectivement ou non est une autre question! Vous pouvez écrire un test rapide pour voir à coup sûr, en utilisant par exemple Concutest. Alternativement, si le nombre de threads est raisonnable, le stockage de toutes les expressions dans un ThreadLocal élimine complètement le problème, au prix d'un peu de mémoire supplémentaire (ou peut-être pas, puisque OGNL fait la mise en cache des expressions.)

Questions connexes