Sunday, 17 September 2006

Astuce DWR -- encapsulez getSession()

DWR

Un des avantages de DWR, c'est que côté Java, son utilisation est invisible. Invisible mis à part l'emploi des méthodes statiques d'une classe glorieuse, uk.ltd.getahead.dwr.WebContextFactory, qui permet aux Listeners DWR de communiquer avec la session et ServletContext de l'application web. Sans cette classe, la gestion de l'état de l'application serait impossible (ou très difficile en tout cas). Il en resulte que nous retrouvions WebContextFactory.get().getSession() dans pratiquement toutes les méthodes de toutes les classes Listener (comme nous appelions les Creator déclarés dans dwr.xml).

L'expérience a pourtant montré que d'appeler directement WebContextFactory.get().getSession() dans les Listener n'est pas une bonne pratique. Du moins, dans notre projet on a découvert que ça nous enlevait de la flexibilité : en l'occurance, on voulait effectuer un contrôle supplementaire sur la session avant d'y accéder (genre AOP), pour gérer plus proprement l'expiration des sessions, par exemple.

Au lieu donc de vérifier dans chaque methode de chaque Listener qui utilise la session, que la session n'est pas invalidée (!!), on a centralisé la récuperation de la session dans un seul endroit, AJAXListener.getSession() (AJAXListener est la classe mère des listeners dans notre application, réunissant les fonctions d'utilité globale). Là on peut mettre le code pour gérer les sessions expirées (dans notre cas, en levant une fille de RuntimeException maison pour laquelle on a créé une gestion particulière avec DWREngine.setErrorHandler()).

Cette encapsulation a en plus le bénéfice que le code Java ne fait référence à dwr.jar que dans une seule méthode, au lieu de plusieurs douzaines, ce qui rend l'application moins dépendante de la couche technique sur laquelle elle répose.

Posted by jon at 10:21 PM in Java 
 
« September »
SunMonTueWedThuFriSat
     12
3456789
10111213141516
17181920212223
24252627282930
       
 
Non enim id agimus ut exerceatur vox, sed ut exerceat.