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

JSF Java Discussion :

Notification (push ?) avec RichFaces


Sujet :

JSF Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut Notification (push ?) avec RichFaces
    Bonjour à tous,

    J'ai besoin de votre aide pour essayer de trouver une solution à mon problème que voici :

    J'utilises RichFaces pour représenter dans une rich:dataTable les éléments issus d'une base de donnée. Nous avons déjà une application qui s'occupe de la couche EntityBean et des EJB pour récupérer ces données via des finders. Jusque là pas de problèmes.

    Notre application dispose également de clients dit "lourd" (en Java Swing) qui permettent aux utilisateurs de créer/modifier/supprimer ces données.

    Je n'arrive pas à trouver une solution qui permette de notifier le browser qu'une (ou plusieurs) lignes de la table ont changée et qu'il doit redemander au serveur les nouvelles valeurs et réactualiser ces lignes... Sans rechargement de la page donc...

    J'ai trouvé cet exemple qui paraissait pas mal mais la classe PushEventListener n'existe plus depuis RichFaces 4.X et je ne trouve pas d'équivalent...

    Il y a toujours le solution de polling me direz-vous mais cette solution me semble être la solution de la dernière chance (mon appli web peut être extrêmement fournie en terme de UI)

    Si vous avez des idées, solutions, je suis preneur.

    Merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Pas d'idée ? Snif...

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 120
    Points
    120
    Par défaut
    Regarde du côté de icepush

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par simplicity2k Voir le message
    Regarde du côté de icepush
    Merci pour ta réponse (j'attendais désespérément...). L'idée semble répondre à mon besoin mais l'intégration avec RichFaces semble... comment dire... compromise ?...

    En tout cas merci pour ta piste.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 120
    Points
    120
    Par défaut
    Pourquoi partir si défaitiste ?

    Richfaces intègre jQuery et tu as la possibilité d'utiliser Icepush et jQuery (http://wiki.icefaces.org/display/PUS...ry+Integration).

    Et si tu veux pas intégrer avec jQuery (ou si incompatibilité), tu peux l'intégrer comme dans les JSP (http://wiki.icefaces.org/display/PUSH/JSP+Integration).

    J'ai testé la seconde solution, pas compliqué du tout. Bon courage.

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Je ne pars pas si défaitiste que ça...

    Ton expérience sur le sujet m'intéresse, si tu as des liens ou tutos à me passer qui t'ont aidé je les veux bien.

    De ce que j'ai compris, icepush sait t'envoyer des notifs pour te prévenir d'un changement, à ta charge d'aller interroger le serveur pour recuperer les nouvelles data.

    Merci pour ton post.

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 120
    Points
    120
    Par défaut
    Ajout de la config icepush dans le web.xml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <servlet>
        <servlet-name>icepush</servlet-name>
        <servlet-class>org.icepush.servlet.ICEpushServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
     
    <servlet-mapping>
        <servlet-name>icepush</servlet-name>
        <url-pattern>*.icepush</url-pattern>
    </servlet-mapping>
    Stockage dans un bean scope application (dans ce cas là) de la liste des objets utilisateurs

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    package org.simplicity.application.push;
     
    import java.io.Serializable;
    import java.util.LinkedHashMap;
    import java.util.Map;
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.faces.bean.ApplicationScoped;
    import javax.faces.bean.ManagedBean;
    import org.simplicity.application.entity.User;
     
    /**
     *
     * @author simplicity2k
     * @version 1.0-SNAPSHOT
     */
    @ManagedBean
    @ApplicationScoped
    public class UserNotificationBean implements Serializable {
     
        private static final long serialVersionUID = -1L;
        private Map<Integer, User> userConnectedMap;
     
        /** Creates a new instance of UserNotificationBean */
        public UserNotificationBean() {
            userConnectedMap = new LinkedHashMap<Integer, User>();
        }
     
        /**
         * Method called after constructor method.
         */
        @PostConstruct
        public void load() {
        }
     
        /**
         * Method called at the end of the bean lifecycle.
         */
        @PreDestroy
        public void unload() {
        }
     
        public void addUserConnectedToMap(User user) {
            userConnectedMap.put(user.getUserId(), user);
        }
     
        public void updateUserConnectedInMap(User user) {
            if(userConnectedMap.containsKey(user.getUserId())) {
                userConnectedMap.put(user.getUserId(), user);
            }
        }
     
        public void removeUserConnectedFromMap(User user) {
            userConnectedMap.remove(user.getUserId());
        }
     
        public Map<Integer, User> getUserConnectedMap() {
            return userConnectedMap;
        }
     
        public void setUserConnectedMap(Map<Integer, User> userConnectedMap) {
            this.userConnectedMap = userConnectedMap;
        }
    }
    Dans ton bean qui gère ta page, HomeBean par exemple, tu injectes le bean de notification, avec les getter/setter qui vont bien, et du déclares le canal de communication pour le push :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /** Injection of userNotificationBean object */
    @ManagedProperty(value = "#{userNotificationBean}")
    private UserNotificationBean userNotificationBean;
    /** Push channel */
    public static final String PUSH_GROUP = "UserNotification";
    Et dans le constructeur (ou dans la méthode @PostConstruct) de ton HomeBean tu ajoutes le canal de communication à utiliser pour le push.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PushRenderer.addCurrentSession(HomeBean.PUSH_GROUP);
    Sur ce même bean, lorsqu'un utilisateur se connecte par exemple, tu fais ajoutes l'objet utilisateur dans le bean de notification et tu diffuses le message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    userNotificationBean.addUserConnectedToMap(user);
    PushRenderer.render(HomeBean.PUSH_GROUP);
    Lorsque l'utilisateur se déconnecte, tu le supprimes de la hashmap, et tu diffuses à nouveau le message.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    userNotificationBean.removeUserConnectedFromMap(userBean.getUser());
    PushRenderer.render(HomeBean.PUSH_GROUP);
    PushRenderer.removeCurrentSession(UserBean.PUSH_GROUP);
    Bien évidemment tes pages devront afficher la liste des utilisateurs présents dans la hashmap donc appeler ton bean UserNotificationBean.

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 61
    Points
    61
    Par défaut
    Wah, merci pour cet exemple détaillé. Je vais le mettre en oeuvre dès je j'aurais du temps de dispo

Discussions similaires

  1. Notification Push avec GCM
    Par cruoor dans le forum Android
    Réponses: 1
    Dernier message: 07/07/2013, 23h56
  2. Notification Push avec wp7
    Par moezBH dans le forum Windows Phone
    Réponses: 9
    Dernier message: 01/05/2011, 21h15
  3. Problème avec RichFaces
    Par Jexou dans le forum JSF
    Réponses: 8
    Dernier message: 11/04/2008, 14h14
  4. problème avec richFaces sous tomcat6
    Par info_plus dans le forum JSF
    Réponses: 4
    Dernier message: 03/04/2008, 17h08
  5. Erreur avec Richfaces
    Par cocoyot dans le forum Maven
    Réponses: 1
    Dernier message: 31/03/2008, 13h51

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