Obtenir un Stateful bean par client
Bonjour,
Je dois réaliser un panier/caddie qui sera utilisé par des clients pour stocker leurs articles et valider leurs achats, sur le même modèle que le tutorial J2EE5 Sun: http://java.sun.com/javaee/5/docs/tu.../Session2.html
Mon problème est que tous les clients du site partagent actuellement le même caddie... Pour fonctionner, ma servlet du type "AjouterArticle" récupère ce caddie en utilisant l'annotation @EJB RemoteCart cart.
Comment faire pour pouvoir créer autant de caddies que des clients et récupérer le bon caddie lors de l'ajout de l'article par un client lambda ?
Dans les sources du tutorial Sun, seul un client est utilisé, ce qui évite le prolème... Je n'arrive pas à trouver un exemple similaire à mon problème!
Panier virtuelle - EJB 3 Stateful
Je ne vois pas pourquoi vous voulez que vos clients partagent le même panier, normalement chaque client doit disposer de son propre panier virtuelle (instance d'un EJB 3 Stateful pour gérer l'état de chaque panier - client).
Les instances de votre EJB sont stockés que vous pouvez manipuler en accèdant au SessionContext de vos EJB.
4 méthodes existent pour récupérer le contexte des EJB :
1- Utilisation de l'injection de la ressource (méthode la plus simple)
Code:
1 2
| @Resource
private SessionContext sctx; |
2- Utilisation d'un setter pour l'injection de la ressource
private SessionContext sctx;
Code:
1 2 3 4
| @Resource
private void setSessionContext(SessionContext sctx) {
this.sctx = sctx;
} |
3- Recherche de la ressource injecté en utilisant son nom :
Code:
1 2 3 4 5 6 7 8 9 10 11
| @Resource(name="sessionContext")
private SessionContext sctx;
try {
InitialContext ic = new InitialContext();
SessionContext sctxLookup =
(SessionContext) ic.lookup("java:comp/env/sessionContext");
System.out.println("look up injected sctx: " + sctxLookup);
} catch (NamingException ex) {
throw new IllegalStateException(ex);
} |
4- Recherche par le nom standardd java:comp/EJBContext
Code:
1 2 3 4 5 6 7 8
| try {
InitialContext ic = new InitialContext();
SessionContext sctxLookup =
(SessionContext) ic.lookup("java:comp/EJBContext");
System.out.println("look up EJBContext by standard name: " + sctxLookup);
} catch (NamingException ex) {
throw new IllegalStateException(ex);
} |