Bonjour tout le monde,

je suis actuellement sur un projet de site intranet, pour ceux qui veulent savoir de quoi je parle, il y a une petite explication ici

le site devra évidemment se connecter à une base de données mais pour l'instant, je n'y ai pas accès alors en attendant, j'ai instancié quelques demandes en dur, dans le code, et je les ai regroupées dans une liste

j'instancie ma liste avec un pattern singleton et j'aimerais ne pas récupérer la liste tel quelle a été créée au départ, c'est pourquoi je voudrais bien la récupérer depuis le contexte et c'est là que j'ai un problème

quand je veux récupérer la liste depuis le contexte, je récupère une liste vide
si j'instancie la liste à partir du singleton sans passer par le contexte, ça marche

bon, un peu de code pour vous compreniez mieux tout cela

premièrement, ma servlet ListDemandeServlet.java dans laquelle j'aimerais récupérer la liste depuis le contexte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package sysgisi.servlets;
 
import java.io.IOException;
 
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import sysgisi.biz.ListDemande;
import sysgisi.servlets.util.Utilities;
 
 
public class ListDemandeServlet extends HttpServlet {
 
	@Override 
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 
		RequestDispatcher rd;
 
		//Avec cette ligne, ça ne marche pas
		ListDemande listDemande = Utilities.getListDemande(this.getServletContext());
 
		//Avec cette ligne, ça marche
        //ListDemande listDemande = ListDemande.getInstance();
 
		if(listDemande == null) {
			String message = "PAS DE LISTE DE DEMANDE";
        	req.setAttribute("message", message);
        	rd = req.getRequestDispatcher("/WEB-INF/jsps/error.jsp");
		}
		else {
			req.setAttribute("liste", listDemande.getDemandes());
			rd = req.getRequestDispatcher("/WEB-INF/jsps/listDemande.jsp");
		}
		rd.forward(req, resp);
	}
}
ma classe ListDemande.java dans laquelle il y a mon singleton pour instancier la liste :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package sysgisi.biz;
 
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
 
public class ListDemande {
 
	private static ListDemande listDemande;
 
	private Map<String,Demande> demandes = new LinkedHashMap<String,Demande>();
 
	public static ListDemande getInstance() {
		if(listDemande == null) {
			System.out.println("ListDemande getInstance null");
			listDemande = new ListDemande();
		}
		System.out.println("ListDemande getInstance out");
		return listDemande;
	}
 
	private ListDemande() {
		addDemande(new Demande("12","poste de travail","description","Michel XXX",3456,20070225,"xxx.m@fsagx.ac.be","en attente","note du RP sur la demande",ListUtilisateur.getInstance().getUtilisateurById("dupond.m")));
		addDemande(new Demande("13","appareillage réseau","description","André YYY",3457,20070226,"yyy.a@fsagx.ac.be","en cours","note du RP sur la demande",ListUtilisateur.getInstance().getUtilisateurById("richir.a"),ListUtilisateur.getInstance().getUtilisateurById("segers.b")));
		addDemande(new Demande("14","poste de travail","description","Francis ZZZ",3426,20070228,"zzz.f@fsagx.ac.be","en cours","note du RP sur la demande",ListUtilisateur.getInstance().getUtilisateurById("marin.d"),ListUtilisateur.getInstance().getUtilisateurById("vansteen.l")));
		addDemande(new Demande("15","logiciel","description","Lionel XYZ",7180,20070303,"xyz.l@fsagx.ac.be","cloturee","note du RP sur la demande",ListUtilisateur.getInstance().getUtilisateurById("dardenne.g"),ListUtilisateur.getInstance().getUtilisateurById("vandevandel.jp")));
	}
 
	public void addDemande(Demande uneDemande) {
		demandes.put(uneDemande.getIdDemande(), uneDemande);
	}
 
	public Demande getDemandeById(String idDemande) {
		return demandes.get(idDemande);
	}
 
	public List<Demande> getDemandes() {
		System.out.println("getValues");
		return new ArrayList<Demande>(demandes.values());
	}	
}
ma classe Utilities.java qui devrait me permettre de récupérer la liste depuis le contexte :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
package sysgisi.servlets.util;
 
import javax.servlet.ServletContext;
 
import sysgisi.biz.ListDemande;
 
public class Utilities {
 
	public static ListDemande getListDemande(ServletContext cont){
		System.out.println("getListDemande in");
		return (ListDemande) cont.getAttribute(SysgisiListener.BL_KEY);
	}
}
et ma classe SysgisiListener.java qui est en fait mon ServletContextListener :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package sysgisi.servlets.util;
 
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
import sysgisi.biz.ListDemande;
 
public class SysgisiListener implements ServletContextListener {
 
	public static final String BL_KEY = "___BLL_KEYY";
 
	public void contextDestroyed(ServletContextEvent arg0) {
	}
 
	public void contextInitialized(ServletContextEvent arg0) {
		ListDemande listDemande = ListDemande.getInstance();
		System.out.println("contextInitialized");
		arg0.getServletContext().setAttribute(BL_KEY, listDemande);
	}
}
c'est une méthode que j'avais appris lors d'une formation, je me suis basé de très près sur l'exemple qu'on avait reçu et qui tourne, c'est pourquoi ça me laisse perplexe ...

un grand merci d'avance