Tutoriel GWT : Création d’un service distant

11 octobre 2008 at 16 h 32 min Laisser un commentaire

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);
}

Entry filed under: Javascript, tutorial. Tags: , , , .

Nintendo DSi, ou comment se tirer dans le pied … Synthèse sur les structures de données / collections de Java 1.6

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Trackback this post  |  Subscribe to the comments via RSS Feed


Articles récents


%d blogueurs aiment cette page :