54 votes

Le thread HttpSession est-il sûr, les opérations set / get relatives aux threads d'attributs sont-elles sécurisées?

En outre, l'objet en cours de définition doit-il être thread-safe pour garantir que nous savons quel est l'état de l'objet stocké dans la session?

En outre, je lisais sur le Web que certains suggèrent d'utiliser:

 synchronized(session) {
  session.setAttribute("abc", "abc");
}
 

Est-ce une suggestion valable?

38voto

duffymo Points 188155

Non, elles ne sont pas thread-safe, selon la théorie et la pratique d'IBM- Java: toutes les applications Web avec état sont-elles en panne? . Vous devez vous synchroniser.

La manière dont HttpSession n'est pas thread-safe de Java Ranch pourrait également être utile.

4voto

cherouvim Points 18550

Et puisque vous ne voulez pas que le même client (avec session) effectue des requêtes simultanées, vous devez sérialiser ces requêtes comme le fait AbstractController dans Spring MVC.

2voto

OscarRyz Points 82553

Ils ne le sont pas, mais la plupart du temps, vos clients n’y accéderont qu’avec un seul thread.

Différents clients auront différents threads et chacun aura sa propre session.

Comme Eddie le fait remarquer, deux threads accédant à la même session peuvent faire face à deux appels ajax tentant de modifier le même attribut de session. Sinon, vous n'aurez pas de problèmes.

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