14 votes

Utilisation de ThreadLocal dans une application d'entreprise

Si mon application web et mon application ejb sont sur la même machine (sur la même JVM) et que tous les appels ejb sont des appels locaux, est-ce que l'utilisation de ThreadLocal Y a-t-il un problème lors du passage des informations du web à l'ejb ?

Y a-t-il une solution si les appels ejb sont distants ? La volonté ThreadLocal Les informations sont-elles disponibles entre l'application web et l'application ejb ? L'utilisation de ThreadLocal est-il conseillé dans un tel scénario ?

0voto

nwinkler Points 5889

Pour les appels locaux, le ThreadLocal devrait fonctionner correctement, à condition que tout soit fait dans le même fil de discussion.

Pour les appels à distance, qui peuvent potentiellement être exécutés sur un autre serveur, vous devrez trouver une autre solution. Soit vous passez toutes les valeurs en tant que paramètres (ce qui fonctionnera, mais introduira de la complexité dans le code), soit vous utilisez quelque chose comme un cache distribué, par exemple Hazelcast qui fonctionnera comme un HashMap à laquelle tous les nœuds de la grappe ont accès.

0voto

lyuboe Points 145

ThreadLocal ne peut pas être utilisé avec une certitude totale dans les applications web. Vous n'avez tout simplement pas la garantie qu'un seul thread sera utilisé pour une seule session. De mon point de vue, cela peut devenir une faille de sécurité très difficile à trouver !

ctx.getContextData() ne fonctionne pas pour moi, il renvoie toujours null !

J'ai également essayé TransactionSynchronizationRegistry mais j'obtiens null également.

La seule chose qui a fonctionné est l'utilisation de JAAS comme solution de contournement, mais ce n'est pas une bonne solution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X