Intégrer GWT & Spring

De base le toolkit GWT vient avec son framework d’échange : GWT-RPC. Aucun problème particulier dans son fonctionnement mais quelques limitations à la fois dans la configuration que l’on pourra qualifier d’un « peu lourde », ainsi que dans l’intégration avec un existant (typiquement un existant Spring).

Le framework gwtrpc-spring répond à ces limitations, il faut bien l’avouer, de façon trés élégante.

Configuration de la partie Serveur : une simple exposition de beans Spring
Exposer un service GWT-RPC nécessite deux choses :

  • L’implémentation du service doit hériter de RemoteServiceServlet
  • La servlet associée à chaque service doit être configurée dans le web.xml

Peu de choses a priori mais autant de défauts potentiels qui ne seront détectés qu’au déploiement et qui, au final, freinent la productivité.

gwtrpc-spring propose un fonctionnement un peu plus générique (une documentation plus complète est disponible sur le site) :

  • une servlet de type « Dispatcher » unique à configurer dans le fichier web.xml.
    1
    2
    3
    4
    5
    
    ...
    <servlet -mapping>
    	</servlet><servlet -name>dispatcher</servlet>
    	<url -pattern>*.rpc</url>
    ...
  • tout bean Spring peut être alors exposé via l’annotation @Service. Vous noterez que l’implémentation du service n’hérite pas de RemoteServiceServlet. Il est possible d’avoir les mêmes API via la classe statique RemoteServiceUtil.
    1
    2
    
    @Service
    public class GreetingServiceImpl implements GreetingService {
  • la configuration Spring associée peut être générique
    1
    2
    3
    4
    
    ...
    <context :annotation-config />
    <context :component-scan base-package="org.octo.myapp.server" />
    ...

Ainsi configurés, toutes les appels sur des urls se terminant par *.rpc seront « dispatchés » vers le « bon » bean Spring ie. l’implémentation du contrat de service.

Configuration de la partie Cliente : du GWT, simplement
L’élégance de ce framework tient en partie dans son intégration transparente dans la partie cliente. En effet:

  • l’interface de service utilise toujours et uniquement les annotations GWT.
    1
    2
    
    @RemoteServiceRelativePath("greet.rpc")
    public interface GreetingService extends RemoteService {
  • la création du service via l’API GWT.create() est identique
    1
    
    greetingService = GWT.create(GreetingService.class);

En bref, un framework simple et élégant…

Mots-clés: , ,

3 commentaires pour “Intégrer GWT & Spring”

  1. à noter que l’intégration avec gilead est plutôt simple, ce qui permet de retourner les entités hibernate à la couche graphique gwt.

  2. @Cyril : ;) tu touches un autre grand sujet à débat : DTO ou pas, mes entités peuvent-elles remonter jusqu’à l’IHM…

    j’ai l’impression que sur ce sujet, on est pas loin des convictions religieuses alors ;)…mais merci pour le lien :o)

  3. [...] Intégrer GWT & Spring [...]

Laissez un commentaire