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 :

[Stratégie] Mise en oeuvre du pattern observer


Sujet :

Java EE

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 61
    Points
    61
    Par défaut [Stratégie] Mise en oeuvre du pattern observer
    Bonjour à tous,

    J’aimerai implémenter le pattern observer avec les EJB3. Mon application cliente comporte une IHM en SWT et doit écouter une EJB session stateful qui effectue un calcul numérique plus ou moins long côté serveur. L’IHM doit tenir l’utilisateur informé de l’état du calcul : barre de progression, affichage de texte.

    Dans un premier temps j’ai imaginé le pattern observer de façon classique : l’IHM implémente l’interface d’un écouteur et s’inscrit auprès de l’EJB session comme obervateur de celle-ci.

    Or, les containers SWT ne sont pas sérialisables (Shell, Display, Composite, ProgressBar, ProgressMonitor, …) et quand bien même, la sérialisation ne fait qu’une copie de l’objet et il n’y a pas d’intérêt à utiliser une copie de l’objet côté serveur : aucun impact sur l’application cliente.

    Il existe toujours la solution où l’IHM crée un thread pour demander périodiquement l’état de l’EJB session mais cette solution n’est pas le pattern observer. D’ailleurs, les EJB sessions stateful acceptent elles l’accès concurrent (accès du même client) sans problème ?

    En faisant quelques recherches, j’ai découvert Java Message Service qui rend le même service qu’un pattern observer et apparemment sans que l’IHM doit être sérialisable. Mais je me demande s’il n’existe pas un moyen moins lourd.

    Merci de votre aide.

    Environnement : application cliente implémentée avec Eclipse RCP, EJB3 sous JBoss 4.2.1 , Java 1.6

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 10
    Points
    10
    Par défaut injection de dependance
    Peut être faudrait il faire une injection de dependance pour acceder et ecouter ta session Bean a partir de ton application Cliente.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    salut,

    Je connais les injections de dépendance mais je ne vois pas comment ça résout mon problème : mon application cliente n'est pas un objet distribué ! A moins bien sur de créer un objet distribué côté client et de l'injecter dans la session bean ... Est ce un comportement normal que le client soit aussi une application distribuée ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 8
    Points : 10
    Points
    10
    Par défaut un Bon Tuto
    je t envoie sur cette page , je pense que t auras toutes tes reponses,

    http://pagesperso-orange.fr/emmanuel...anSession.html


    bonne chance

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 191
    Points
    191
    Par défaut
    C'est un peu usine à gaz mais la solution la plus propre serait d'utiliser JMS.
    Ton EJB postera périodiquement des informations dans un "Topic" sur lequel écoutera ton appli cliente.
    Une fois que coté client tu recevras un message, tu parseras ton message et mettra à jour l'affichage de ton IHM.
    D'ailleurs vu que le calcul est long, coté client tu devras poster un message JMS pour lancer le calcul coté serveur, et donc remplacer ton statefull bean par un MDB.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 71
    Points : 61
    Points
    61
    Par défaut
    Je me suis bien renseigné sur JMS et effectivement c'est la solution la plus propre.

    J'ai expérimenté la solution d'interroger l'EJB session au sujet de l'état des calculs par un thread côté client mais j'y ai gagné un beau javax.ejb.ConcurrentAccessException. En effet on ne peut pas faire des invocations sur une EJB session qui est en cours d'invocation.

    Alors j'ai essayé de mettre mes calculs numériques dans un thread managé par l'EJB session stateful. Je sais que c'est mal mais ça marche et tant que le client interroge l'EJB session, je ne risque pas la passivation de celle-ci.


    Restrictions sur les EJB :
    http://java.sun.com/blueprints/qanda...trictions.html

    Merci de vos réponses.

Discussions similaires

  1. Mise en oeuvre de pattern MVC
    Par mandzokich dans le forum Général Java
    Réponses: 4
    Dernier message: 25/01/2015, 18h11
  2. Mise en oeuvre d'un pattern, pb de conception
    Par OscarUmbergio dans le forum Langage
    Réponses: 10
    Dernier message: 30/11/2011, 18h35
  3. [MVC | WPF] Mise en oeuvre du MVC Pattern
    Par Nadd dans le forum C#
    Réponses: 2
    Dernier message: 09/02/2008, 00h38
  4. Interfaces, Pattern Observer
    Par IProg dans le forum Langage
    Réponses: 8
    Dernier message: 18/12/2003, 14h11

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