samedi 18 avril 2009

Jboss Richfaces introduit la gestion des files d’attente pour améliorer les performances du mode Ajax dans le monde JSF

L'un des points forts de RichFaces 3.x (des composants JSF de Jboss ) est le mode Ajax présent sur tous les composants JSF de la collection.

C'est grâce à l'alliance avec Excadel et à l'usage du framework Ajax4jsf que RichFaces est capable d'ajouter les fonctionnalités Ajax dans des pages existantes sans avoir l'obligation d'écrire du code JavaScript (ou du moins très rarement).

Mais

Le problème:

Lorsqu'on utilise Ajax4jsf pour faire des actions Ajax :

<h:inputText value="#{userBean.name}">

<a4j:support event="onkeyup" reRender="bar" />

</h:inputText>

Il se peut que l'utilisateur écrive tellement vite que le serveur s'inonde de requêtes à traiter.

Le risque est de se lancer vers le serveur des dizaines de requêtes http, au fur et à mesure que la saisie du champ est effectuée.

Si des événements sont envoyés en même temps, ils viendront au serveur simultanément : Aucune ne garantit que la demande soit servie sous forme FIFO.

Les résultats peuvent être imprévisibles.

Par défaut, RichFaces n'utilise pas de la file d'attente pour les demandes Ajax.

La solution

Ajouter une fille d'attente et définir sa stratégie d'envoi de commande Ajax vers le serveur

<h:inputText value="#{userBean.name}">

<a4j:support event="onkeyup" eventsQueue="fileAttente" requestDelay="100" reRender="comp002"/>

</h:inputText>

L'Usage de l'attribut eventsQueue permet d'éviter les points négatifs d'Ajax.

Explication:

L'attribut "eventsQueue" définit le nom de la file d'attente qui sera utilisé pour commander à venir

La nouvelle demande sera mise en attente dans la même file d'attente jusqu'à ce que l'on n'est pas traitées la précédente et que la Réponse Ajax est retourné.

RichFaces commence à retirer de la file d'attente les demandes « similaires » (les requêtes ajax produites par les mêmes événements) en fonction de leurs arrivées.

L'attribut "requestDelay" définit le temps (en ms) durant lequel la demande restera dans la file d'attente avant qu'il ne soit prêt à envoyer.

Lorsque le temps de retard est plus grand, la requête sera envoyée vers le serveur. Elle sera supprimée si une nouvelle demande "similaire" est déjà dans la file d'attente.

L'attribut "ignoreDupResponses" permet d'ignorer les anciennes requêtes Ajax si une requête "similaire" plus récente est déjà dans la file d'attente.

ignoreDupResponses "=" true "n'annule pas la demande si elle est traitée sur le serveur, mais permet d'éviter les mises à jour coté client si la réponse n'est plus d'actualité.

L'utilisation de "eventsQueue" avec "requestDelay" permet de protéger contre le trafic superflu les synchronisations inutiles d'Ajax.

La définition d'une file d'attente :

Il est possible de définir des files d'attente au niveau globale (dans web.xml) ou au niveau d'une page avec la balise

<a4j:queue name="fileAttente" disabled="true"... />

Les files d'attente présentent un ensemble de caractéristiques communes qui régissent leurs comportements.

Tous ces attributs peuvent être définis par des valeurs spécifiques ou de l'utilisation de EL.

  • Disabled : la file d'attente n'aura aucune influence sur les requêtes. (Le seul cas où les files d'attente avec le même nom peuvent être utilisées - cas où seul l'un d'eux est activé)
  • Size : Le nombre d'objets autorisés dans la file d'attente à un moment (-1 = illimité, un certain nombre x =)
  • requestDelay : Définir requestDelay = "1000" sur la file d'attente qui signifie que toutes les demandes dans cette file d'attente auront une seconde de retard.
  • Timeout : Le temps durant lequel un élément non traité dans la file d'attente sera annulé.
  • timeout: si la demande est envoyée et que la réponse n'est pas encore parvenue dans les délais définis par timeout, la demande est alors, abandonnée, et la prochaine est envoyée.
  • status : définit le statut qui sera activé sur toute demande de cette file d'attente.
  • Et les événements : onsubmit, oncomplete, onbeforedomupdate, onsizeexceeded, onerror


0 commentaires :

Enregistrer un commentaire

Architecte SOA & Professionnel Open Source Headline Animator

 
Khaled BEN DRISS
Cloud Computing, SOA et Web 2.0 : Des sujets techniques sur SOA et l'Open Source : de Java & .Net, PHP5, Symfony, à SaaS / PaaS en passant par Azure, google appengine, le BPM, la Modélisation et d'autres sujets du coté du serveur et cloud computing.