Bonjour,
Doit-on synchroniser une méthode d'un bean (jsp:useBean) qui modifie une variable de classe privée
merci de votre aideCode:
1
2
3
4
5
6
7 private int code = 0; public synchronized int getCode() { try { ... return code
Version imprimable
Bonjour,
Doit-on synchroniser une méthode d'un bean (jsp:useBean) qui modifie une variable de classe privée
merci de votre aideCode:
1
2
3
4
5
6
7 private int code = 0; public synchronized int getCode() { try { ... return code
A priori non, à moins que l'instance soit de scope "application".
Bonjour et merci OButterlin
Peux tu s'il te plait m'apporter une précision.:oops:
D'après ce que je sais...une jsp devient une servlet après compilation.
Or même si le scope est request, plusieurs threads (requete http simultanées...)ne pourraient-il pas accèder à la même variable contenue dans le useBean intégéré à la JSP?
Ton "a priori non" signifie -t-il qu'il est peu probable que cela se produise ?
Merci de ton aide
Tout va dépendre de la manière de faire mais généralement, il n'y a pas de risque.
Chaque thread va créer une instance de l'objet et l'envoyer via request.setAttribute(...).
Dans le cas du scope session, on est bien lié à un utilisateur (en théorie), donc pas plus de problème.
Mais si pour une raison quelconque tu as codé un truc du genre
là, oui, il y a problème ! :aie:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 class MaServlet extends HttpServlet { private MonBean monBean = new MonBean(); public void service(HttpServletRequest request, HttpServletResponse response) { ... request.setAttribute("MonBean", monBean); OU request.getSession().setAttribute("MonBean", monBean); } }
Il faut faire
ouCode:
1
2
3
4
5
6
7
8
9
10 class MaServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) { MonBean monBean = new MonBean(); ... request.setAttribute("MonBean", monBean); } }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class MaServlet extends HttpServlet { public void service(HttpServletRequest request, HttpServletResponse response) { MonBean monBean = (MonBean)request.getSession().getAttribute("MonBean"); if (monBean == null) { monBean = new MonBean(); request.getSession().setAttribute("MonBean", monBean); } ... } }