GWT 1.5 est sorti !

le 15/09/2008 par Olivier Mallassi
Tags: Évènements

GWT 1.5 utilise le Java5...et alors? tout le monde est déjà au courant...

Et alors voilà : le principal axe d'amélioration pour les équipes de développement touche à la productivité des développements:

  • Les annotations javadoc @typeArgs qui visaient à spécifier les types des objets (notamment dans les listes) pour les échanges GWT-RPC sont favorablement remplacées par l'utilisation des Generics

  • Des appels de services simplifiés ; une annotation

    @RemoteServiceRelativePath("sample")
    public interface SampleService extends RemoteService {

    et un appel de service sont maintenant suffisants

    SampleServiceAsync service = (SampleServiceAsync) GWT
    .create(SampleService.class);

    Le mapping entre l'uri " sample " et la classe d'implémentation de la servlet reste nécessaire dans le fichier *.gwt.xml

  • L'utilisation des Generics lors de l'instanciation de la callback qui offre un code plus error-proof : c'est juste génial lors des refactorings des signatures de services

    AsyncCallback callback = new AsyncCallback() {
    public void onSuccess(MyDto result) {

    Vous aurez noté la signature de la méthode onSuccess...

  • Le compilateur GWT émule plus de classes du JRE et notamment des Map. C'est pour le mieux mais reste qu'il n'est toujours pas possible d'utiliser l'intégralité du JDK5 et qu'il est encore nécessaire de compiler pour se rendre compte de l'utilisation de classe non supportées.
    On peut de plus regretter (était-ce seulement possible au niveau du compilateur) que le compilateur GWT n'émule pas les méthodes de réflexion permettant d'utiliser les annotations sur les objets Java. Des premiers essais rapides montrent que l'objet suivant est parfaitement serializable (au sens GWT-RPC) et cela même avec l'annotation spécifique MyAnnotation.

    @MyAnnotation("theValue")
    public class MyDto implements IsSerializable {

    Reste que cette annotation ne sera pas utilisable côté client...

  • Le compilateur s'applique encore plus qu'avant et les performances s'en trouveraient améliorées. L'histoire ne dit pas de combien...Je suis d'ailleurs preneur de l'information ;-)

Pour des utilisations plus expertes, on note d'autres ajouts trés intéressant du point de vue architecture :

  • L'accès aux codes erreur http dans les callback.

public void onFailure(Throwable caught) {
if(caught instanceof StatusCodeException)
{
if(((StatusCodeException)caught).getStatusCode() == 500 )
{

  • La possibilité " out of the box " de ne pas utiliser GWT-RPC mais de pouvoir utiliser de simples connecteurs http. Cela facilite donc l'intégration avec un backend REST.

  • JavaScript overlay types qui facilite l'intégration du monde JavaScript et du monde Java ; et typiquement qui facilite les développements dans les cas d'interfaçage avec un backends REST. GWT propose la classe JavaScriptObject qui permet de " mapper " le monde Java sur le monde JavaScript ; typiquement un tableau json peut être mapper sur un objet Java; les propriétés json sur des attributs java...Par exemple, la classe Java suivante

    class JsArray extends JavaScriptObject {
    protected JsArray() { }
    public final native int length() /*-{ return this.length; }-*/;

    permet de parser un flux JSON de ce type

    var jsonData = [{ "length" : "10"},...

    Vous noterez que l'implémentation repose sur JSNI