IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Réutilisation aprés avoir appelé @Remove ? [EJB Stateful]


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut Réutilisation aprés avoir appelé @Remove ?
    Bonjour,
    je developpe une application de gestion Shopping cart,
    mon Shopping Cart est un EJB stateful definit comme suit :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package com.esi.business;
     
    import java.util.LinkedList;
    import java.util.List;
     
    import javax.ejb.Remove;
    import javax.ejb.Stateful;
     
    import com.esi.model.Article;
     
    /**
     * Session Bean implementation class Panier
     */
    @Stateful
    public class Panier implements PanierLocal {
     
    	private List<Article> contenu;
        /**
         * Default constructor. 
         */
        public Panier() {
            // TODO Auto-generated constructor stub
        	contenu = new LinkedList<Article>();
     
        }
     
    	@Override
    	public void ajouterAuPanier(Article a) {
    		// TODO Auto-generated method stub
    		contenu.add(a);
     
    	}
     
    	@Override
    	public List<Article> contenuDuPanier() {
    		return contenu;
    	}
     
    	@Remove
    	@Override
    	public void passerLaCommande() {
     
    	}
     
    	@Override
    	public void retirerDuPanier(Article a) {
    		contenu.remove(a);
    	}
     
     
    }
    donc, vous remarquer que la méthode passer la commande détruit l'EJB,

    Le servlet que j'ai appelé controlleur, qui s'occupe de l'ajout des items dans le panier est definit brievement comme suit :
    donc j'ai une servlet definit par le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Controller extends HttpServlet {
     
    	@EJB
    	private PanierLocal panier;
    ...
    	private void doAjouterAuPanier(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		panier.addItem(i);\\ajouter un item au panier
     
    	}
     
    	private void doPasserCommande(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		panier.passerLaCommande(); \\valider la commande
    mon probleme est quand j'appelle la méthode passerLaCommande, je détruit mon EJB statefull alors que je dois le réutiliser au cours de la prochaine commande et j'ai l'exception suivante :

    INFO: EJB5018 : Une exception a été renvoyée lors d'un appel ejb sur [Panier].
    INFO: javax.ejb.NoSuchObjectLocalException: The EJB does not exist. session-key: 90bf9400a81f-5dd5db88-0
    Merci d'avance de votre aide

  2. #2
    Rédacteur
    Avatar de longbeach
    Profil pro
    Architecte de système d’information
    Inscrit en
    Avril 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Avril 2003
    Messages : 943
    Par défaut
    ça peut pas être un stateless session bean ?

    parce qu'effectivement remove supprime ton SFSB dès que la méthode passerLaCommande()
    est appelée.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Par défaut
    Bonjour,
    C'est sûr que si ta méthode est annotée avec @Remove, ton ejb stateful est détruit après l'exécution de cette méthode; ce qui visiblement n'est pas ce que tu souhaites.
    La solution c'est juste d'enlever l'annotation sur la méthode passerLaCommande. Ajoutes une autre méthode annotée @Remove que tu évoqueras pour supprimer le stateful session bean une fois que tu n'en as plus besoin.

  4. #4
    Membre émérite
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Par défaut
    c bon, j'ai reglé le probleme avec les sessions http, mais si vous avez un exemple concret illustrant le cycle de vie et l'utilisation d'un EJB statefull dans une application web, je serais ravi de le voir.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 16/06/2015, 11h08
  2. Réponses: 1
    Dernier message: 11/05/2009, 20h33
  3. Réponses: 2
    Dernier message: 23/10/2005, 18h05
  4. TStringlist.SaveToFile apres avoir oté l'attribut Read-only
    Par Alex Laforest dans le forum Langage
    Réponses: 1
    Dernier message: 23/10/2005, 00h05
  5. [NAV 2004] Bug après avoir renommé la corbeille
    Par Halleck dans le forum Windows
    Réponses: 2
    Dernier message: 29/02/2004, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo