Bonjour,
J'aimerai savoir comment stocker des variables dans la couche application
Je pensais à un truc du genre ApplicationContext.setAttribute(), comme pour les sessions, mais çà n'a pas l'air d'exister
merci d'avance
Bonjour,
J'aimerai savoir comment stocker des variables dans la couche application
Je pensais à un truc du genre ApplicationContext.setAttribute(), comme pour les sessions, mais çà n'a pas l'air d'exister
merci d'avance
Qu'appelles-tu la "couche application" ?
Et pour quel genre d'application ? web ? swing ?...
Dans les deux cas, si tu veux des variables accessibles de toute ton application, ce ne sont pas les solutions qui manquent :
- une classe statique
- un singleton de propriétés
- etc.
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
non c'est plus compliqué que çà , je parlais du scope application
c'est à dire que je veux que ma variable reste stockée tant que le serveur n'est pas redémarrer.
Ca n'est pas beaucoup plus compliqué sur un serveur...
Une classe statique ne se comporte pas différemment sur un serveur que sur une application "client lourd". Une fois tes variables définies dans cette classe statique, elles seront accessibles tant que ton serveur n'a pas redémarré.
Si tu veux vraiment prendre en compte l'aspect "serveur", tu peux créer une servlet (une classe étendant la classe javax.servlet.HttpServlet), qui maintient tes variables et offre des accesseurs dessus.
Tant que ton serveur ne redémarre pas (et que ta servlet ne "crashe" pas), tes variables seront conservées et accessibles.
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
merci en faites il fallait utiliser le getServletContext().setAttribute pour arriver à fixer ces variables
le code suivant va incrémenter un compteur à chaque fois qu'une servlet est appelé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 if (getServletContext().getAttribute("test")!=null){ Integer test =((Integer)getServletContext().getAttribute("test")) +1; getServletContext().setAttribute("test", test); }else { getServletContext().setAttribute("test", 1); }
Méfie-toi des accès concurrents, imagine que deux clients de ton application accèdent à ta servlet en même temps: alors ta méthode s'éxécutera deux fois en parallèle, et il est possible qu'ils récupèrent la même variable et que du coup l'incrémentation se fasse mal:
=> les deux clients récupèrent la même valeur de "test": mettons 42 pour l'exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Integer test =((Integer)getServletContext().getAttribute("test")) +1; //Ligne du client 1 Integer test =((Integer)getServletContext().getAttribute("test")) +1; //Ligne du client 2 getServletContext().setAttribute("test", test);// ligne du client 2 getServletContext().setAttribute("test", test);// ligne du client 1
=> chacun l'incrémente: => test=43 pour les deux clients
=> chacun le remet en mémoire: test=43 alors que la méthode a été appellée deux fois.
Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager