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 :

EJB stateful ne se comporte pas comme tel


Sujet :

Java EE

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut EJB stateful ne se comporte pas comme tel
    Bonjour
    Je me decide a poster car rien ne marche apres maintes recherches.
    J'essaie de mettre en oeuvre un EJB stateful qui sera par la suite expose en WEB service.

    Mon interface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    @Remote
    @WebService
    // @SOAPBinding(style = Style.RPC)
    public interface IBillingEjbService
    {
     
        public int synchronize(String partnerName);
        public int endService();
     
    }
    Mon EJB
    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
     
    @Stateful
    @WebService(endpointInterface = "IBillingEjbService")
    // @Interceptors(SpringBeanAutowiringInterceptor.class)
    public class BillingEjbService implements IBillingEjbService
    {
     
        private final Logger            logger = Logger.getLogger(this.getClass());
        // @Autowired
        private Integer                 test   = 0;
     
        public BillingEjbService()
        {
            this.logger.debug("Constructed");
            this.test = 0;
        }
     
        @Override
        @WebMethod(operationName = "Synchronize")
        public int synchronize(@WebParam(name = "partnerName") String partnerName)
        {
            // TODO Auto-generated method stub
            this.test++;
            return test;
        }
     
     
     
        @Override
        @Remove
        @WebMethod
        public int endService()
        {
            // TODO Auto-generated method stub
            this.logger.debug("destroy");
            return 0;
        }
    }
    Ainsi mon EJB doit donc compter.
    Je lance le tout avec Jboss sans souci.
    J'accede au WSDL et l'importe dans SOAP UI.
    J'appelle la fonction initialize et a chaque appel il incremente la valeur de test.

    Selon ma comprehension, si j appelle la fonction endService l'ejb est detruit et un nouvel appel de inialize creerait un nouvel EJB pour recmmencer a compter.
    Mias rien de tel. Lorsque j'appelle initialize apres avoir appelle endService, le comptage continue comme si l'ejb etait toujours present.

    J'ai aussi essayer d'y accedeer avec deux instances de Soap UI sur des machines separees. et le resultat est le meme. une seule instance de l'ejb semble servir les deux clients.
    Y a til d'autres choses a ajouter a ma configuration?

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Honnêtement je ne vois pas comment cela pourrait fonctionner.
    De base aucune info de session n'est envoyée dans les messages SOAP, que cela soit avec SOAPUI ou autre.
    Du coup, je ne vois pas comment JBoss pourrait détecter une session HTTP existante sans info en entrée comme un JSESSIONID ou autre.
    Est-ce que tu n'aurais pas plus intérêt soit à utiliser l'annotation @Stateful de JAX-RI soit à faire ton propre mécanisme de gestion de session ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci pour la réponse.
    C'est vrai que je me suis posé la question a savoir comment l'EJB stateful maintenait la session par rapport au client.
    Si tu as une petite explication sur ce point je suis preneur.

    Cette notion de maintien de session par client concerne t'il certains clients spécifiques?
    Dans ce cas , faut il obligatoirement que mon client s'execute dans un contexte WEB pour que ca marche?

    Je suis justement en train de reflechir a mettre en place mon propre mecanisme de gestions de sessions.
    Mais je pensais que les EJBs me donneraient un mecanisme plus elegant pour le faire.(A la base je viens du monde C, mais depuis quelque temps je fais de temps a autre du java).

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Dans un contexte web la session de l'utilisateur est maintenue par la présence d'un cookie de session dans le navigateur (JSESSIONID dans le cas de JBoss).
    Côté client SOAP, cela pourrait éventuellement fonctionner si le cookie de session était posté dans le header de la requête SOAP.

    "A la base je viens du monde C, mais depuis quelque temps je fais de temps a autre du java"

    Bienvenu dans le monde merveilleux de java avec ses frameworks, sa gestion mémoire particulière, cela va te changer radicalement du C.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2009
    Messages : 16
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    vous avez des infos sur remove ici:
    http://www.developpez.net/forums/d52...tation-remove/

    il n'est pas sûr dans votre cas que @remove fonctionne correctement avec un appel en tant que web service. Je suis d'ailleurs étonné que l'état soit gardé, @Stateful est une annotation pour créer un EJB... et normalement les Web services sont sans états.
    Mais c'est possible:
    http://weblogs.java.net/blog/ramapul...ining_ses.html

    bon courage

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2008
    Messages : 26
    Points : 16
    Points
    16
    Par défaut
    Merci NoClassDefFound
    En effet ca ca change beaucoup du C.
    L'idee etait de rendre ce service completement independant du client final. Il pourait etre appele de n'importe ou! Client riche, navigateur etc...
    Je crois que cela va etre definitivement impossible.

    alexandre.granier
    Je pense que l'exposition en ServiceWeb n'est pas compatible avec @stateful bien que cela ne soit indique nul part.
    Je referais le test d'ici la en utilisant pas de web service et en appelant depuis un contexte web pour voir ce que ca donne.
    Je vais developper un mecanisme de gestion de sessions en interne.

    thx a lot!

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/09/2014, 16h18
  2. [EJB3] Un Ejb Stateless qui se comporte comme unEjb Stateful
    Par clem_alain dans le forum Java EE
    Réponses: 5
    Dernier message: 04/02/2011, 12h00
  3. [Référencement] Google ne référence pas comme je le souhaite
    Par inferno66667 dans le forum Référencement
    Réponses: 4
    Dernier message: 12/12/2005, 14h24
  4. time.sleep() ne fonctionne pas comme souhaité
    Par Olivier_ dans le forum Général Python
    Réponses: 3
    Dernier message: 19/11/2005, 01h46

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