Posts tagged ‘GWT’

Tutoriel GWT : Création d’un service distant

Avec GWT, la construction d’interface graphique est très simple (on instancie un composant, puis on l’attache au conteneur…). Les évenements respectent le pattern Observateur (on déclare un listener, et une péthode est appelée dès que l’évènement en question est effectué sur l’objet écouté).

L’utilisation des requetes AJAX sont moins évidentes, il faut bien comprendre le mécanisme avant de pouvoir créer ses propres échanges clients / serveur. Ces échanges, désignés comme RPC (appels de fonctions distantes). je ne sais pas s’ils sont strictement équivalents à ceux du protocole RPC. Ce qui est sur, c’est que la contruction d’une méthode GWT-RPC sur le serveur qui sera appelée par le client est encadrée par quelques règles qui imposent les bonnes pratiques de programmation.

La création d’un service GWT distant se crée en trois étapes:
– Défintion des interfaces (une synhrone pour la servlet, une asynchrone pour le client AJAX)
– Implémentation du service
– Ecriture de l’appel au service

Définition des interfaces du service GWT

Une interface n’est ni plus ni moins qu’un gabarit pour une méthode, c’est-à-dire qu’aucun comportement n’est écrit, seul les paramètres d’entrée et de sortie sont définis. L’interface est à placer dans le package client. L’interface doit hériter de RemoteService :


public interface MonService extends RemoteService {
String maMethode();
}

L’interface asynchrone est similaire, à part que le retour de la fonction n’est pas direct, mais s’effectue par le biais d’une fonction de callback, via un objet AsyncCallback passé en paramètre de la méthode. Elle se place elle aussi dans le package client, et dispose du même nom suivi du suffixe Async.

public interface GetWordAsync {
void getWord(AsyncCallback callback);
}

L’implémentation

Les implémentations des services sont des servlets spéciales qui décrivent le comportement du service. La servlet hérite de RemoteServiceServlet et implémente l’interface de description du service MonService précédemment créé. Elle ne doit pasêtre placée dans le meme package que le client, mais das un package com.yourcompany.yourproduct.server !

public class MonServiceImpl extends RemoteServiceServlet implements GetWord {

public String[] maMethode() {
String response = new String("réponse de MaMethode");
return(response);
}

}

Il faut ensuite déclarer la servlet dans le fichier Web.xml du serveur afin qu’elle soit prise en compte.

Appel de la méthode

Maintenant que le service RPC est défini, l’appel d’une méthode RPC se fait en trois temps.

1. Instantiation d’un objet Proxy

Cet objet proxy, on peut le voir comme une brique interposée entre le client et le serveur. L’objet est créé à partir de l’interface synchrone.

MonServiceAsync monService = GWT.create(MonService.class);

2. Définition des méthodes de callback:

Deux méthodes doivent être écrites: le cas ou l’appel de méthoode réussit onSucces, et le cas ou l’appel échoue onFailure.Si vous avez bien suivi, ces deux méthodes définissent l’objet de Callback qui définit l’interface asynchrone.

AsyncCallback callback = new AsyncCallback() {
public void onFailure(Throwable caught) {
}
public void onSuccess(String result) {
}
};

3. L’appel de la méthode à proprement parler.

On peut désormais appeler la méthode sur le serveur depuis notre objet proxy:
MonService.maMethode(callback);

On peut regrouper le tout dans une méthode qui sera ppelée depuis la classe client du rojet:

public void initServerCalls(){
if (monService == null) {
monService = GWT.create(MonService.class);
}

AsyncCallback callback = new AsyncCallback() {
public void onFailure(Throwable caught) {
Window.alert("Echec à l'appel du service");
}
public void onSuccess(String result) {
Window.alert(result);
}
};

monService.maMethode(callback);
}

Publicités

11 octobre 2008 at 16 h 32 min Laisser un commentaire

GWT : javascript sans les maux de tête ?

Je suis un fan inconditionnel du framework jquery. Rapide, cross browser et surtout incroyablement pratique a utiliser grace à la magie du chaînage.

Toutefois, jquery n’est pas la librairie a utiliser si vous souhaitez déveloper des applications dites RIA, ou Rich Internet Applications.

Je vous propose aujourd’hui de découvrir avec moi un outil fourni par google appelé GWT.

Je pense qu’aujourd’hui cette librairie est mature : elle existe depuis plus de deux ans maintenant, et est utilisée sur des sites mis en production. Les avantages pour le programmeur Java EE (anciennement J2EE) sont inombrables: intégrations facile avec les serveurs applicatifs (Tomcat pour ne pas le citer – ca va être notre cas, mais aussi Jetty et Resin), intégration parfaite avec Netbeans (et probablement aussi avec Eclipse) grace a des plugins, rédaciton du code en Java, respects des règles de constructions propres (programmation par interfaces et non par implémentation, utilisation de RPC, implémentation des principaux design patterns: observer, MVS, Fabrique, etc…)

Voici donc l’heure de passer à son utilisation. Cette série d’articles se verra exclusivement rédigée en Français, car pour les anglophones, le site de référence est tout simplement digne de google.

——-

Après quatre jours d’utilisations intensive de GWT, je suis littérallement comblé. Il est difficile de dire du mal du Framework de développement RIA de Google tant il est facile à utiliser et bien pensé. Du point de vue du programmeur java, GWT est tout simplement puissant, limpide, et élégant.

8 octobre 2008 at 17 h 05 min Laisser un commentaire


Articles récents