2 votes

Rendu initié par le serveur : EJB -> FacesContext ?

J'ai déjà posé cette question sur le forum Icefaces, mais entre-temps je me suis rendu compte qu'il s'agit d'un problème plus générique.

J'aimerais mettre à jour certaines parties d'une page JSF lorsque je reçois un message dans ma MDB.

Le problème est le suivant : comment puis-je obtenir le FacesContext du conteneur EJB ?

Dans la fonction de traitement des messages, FacesContext.getCurrentInstance() renvoie null.

J'ai également essayé de faire en sorte qu'un bean géré JSF soit une MDB, mais je n'y suis pas parvenu (il semble que l'on ne puisse pas avoir les deux dans la même classe ?)

Comme je suis un débutant dans le monde de JSF, je suis un peu coincé maintenant. Existe-t-il un moyen de le faire fonctionner ?

(Glassfish v3 + Netbeans 6.8, JSF2 + Icefaces 2.0 alpha2)

1voto

Jakub Holý Points 941

Je ne suis pas un expert mais je pense que le FacesContext n'est disponible que pendant le traitement d'une requête JSF. Je crains que vous ne puissiez pas faire exactement ce que vous voulez, mais vous pouvez certainement le contourner. Il y a en fait deux problèmes :

  1. Comment obtenir la mise à jour via MDB vers une page JSF ?
  2. Comment rafraîchir la page sur le client lorsque l'événement se produit ? Vous normalement pas envoyer de données d'un serveur à un client, le client doit les les demander (bien qu'il existe des solutions de contournement telles que la mise à jour de la page). http://en.wikipedia.org/wiki/Comet_(programmation) ))

J'ai quelque chose comme ce qui suit :

  1. Dans la MDB, stockez les données mises à jour quelque part, par exemple dans un cache global (bean de session sans état avec @Singleton et une collection ou une carte pour les mises à jour).
  2. Modifiez la page JSF de façon à ce qu'elle interroge le serveur pour des mises à jour à intervalles réguliers (de préférence en arrière-plan en utilisant Ajax via un composant JSF compatible avec Ajax) - si une mise à jour est reçue via la MDB, le serveur la renverra et la page se présentera à nouveau.

0voto

Gabor Kulcsar Points 1851

J'ai également obtenu une réponse sur le forum Icefaces :

org.icefaces.application.PortableRenderer fournit un objet qui peut être utilisé sur des threads non-JSF pour invoquer le push. (Ceci est disponible dans le trunk svn et sera fourni dans la prochaine version alpha (= Icefaces 2.0 alpha 3)).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X