IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

Utilisation du package shared


Sujet :

GWT et Vaadin Java

  1. #1
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut Utilisation du package shared
    Bonjour à tous,
    Je débute dans GWT, et j'avoue ne pas avoir saisi comment utilisé le package shared. Celui ci contient les classes visibles à la fois côté client et serveur si j'ai bien suivi. J'ai donc construit une classe fault que j'ai placé dans ce package, le serveur créer des objets fault puis les envois au client par un service, mais mon client throw une exception. Lorsqu'on suit la trace on arrive sur :
    Caused by: com.google.gwt.user.client.rpc.SerializationException: Type 'monprojettest.shared.Fault' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized.

    Est ce que quelqu'un pourrait me résumé comment utiliser ce package shared ?

  2. #2
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut
    Up, d'après un collègue, il faut diviser notre classe en deux, dans notre exemple Fault qui serait abstrait, et FaultImpl, qui implémente Fault. Il n'y aurait que la classe Fault qui serait utilisée côté client. J'ai essayé comme ça mais j'ai toujours des erreurs. Est-il en effet nécessaire de procéder en disant avec une classe abstraite ?

  3. #3
    Membre chevronné
    Profil pro
    Lead Tech Agile
    Inscrit en
    Septembre 2004
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Lead Tech Agile

    Informations forums :
    Inscription : Septembre 2004
    Messages : 316
    Par défaut
    Pour résoudre ton problème il te suffit d'implémenter Serializable, d'ajouter un constructeur par defaut et de vérifier qu'il n'a bien que des attributs serializable.

    Petite explication sur le repertoire Shared qui est apparu depuis GWT2.0 :
    Les classes qui se trouvent dans le répertoire client ne sont accessible QUE par la partie cliente de GWT. On peut y utiliser des classes qui te provoqueront une exception si tu essaies de les utiliser côté serveur, comme par exemple DateBox qui est un élément graphique.

    Côté serveur tu peux utiliser tous le JDK. Tu peux donc utiliser des classes côté serveur qui ne pourront pas être utilisées côté client car elle ne peuvent pas être transformées en Javascript. Par exemple toutes les classe d'entrées / sorties.

    Et puis on s'est rendu compte qu'un certain type de classes on besoin de traverser les couches. Par exemple les Pojo qui représentent le modèle du domaine de ton application qui est écrit en orientée Objet. Pour faciliter la compréhension de ce besoin, GWT2.0 fourni directement le répertoire shared qui est utilisé pour stocker ce type de classe.

    Technique --
    Tu remarqueras que le répertoire shared est déclaré dans le fichier Application.gwt.xml comme étant un répertoire source du code client. C'est grâce à cette déclaration que tu peux utiliser les classes qui se trouvent dans ce répertoire côté client. Cela fonctionne uniquement si les classes qui se trouvent dans ce répertoire n'utilise pas des composants externes incompatibles avec ces règles.

    Historique --
    Avant GWT2.0 le répertoire shared n'existait pas, mais il suffisait de déclarer un répertoire dans Applicaiton.gwt.xml afin de le créer. Tu peux également déclarer un répertoire qui appartient à un autre projet qui se trouve dans le classpath, à condition que les sources de ce projet soient disponible par le compilo GWT.

    Dernière explication pour éviter les amalgames --
    Le problème que tu rencontrais était lié à la serialisation de ton objet. Par contre tu peux l'utiliser directement côté client. tu peux essayer de l'instancier directement côté client, tu verras que tu pourras le faire.

  4. #4
    Modérateur
    Avatar de Flaburgan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2010
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 229
    Par défaut
    Effectivement, cela m'a permit de résoudre mon problème. Pourquoi n'est-il pas possible de faire un constructeur avec des arguments ?

  5. #5
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    Si tu n'écris pas explicitement de constructeur, le constructeur sans arguments existe implicitement par défaut.
    Dès que tu ajoutes ton propre constructeur, le constructeur par défaut n'existe plus.

    Autrement dit, si tu n'as pas de constructeur ou si tu as écrit un constructeur public sans argument, cela revient au même.

    Dès que tu ajoutes un constructeur avec arguments, si tu veux continuer d'avoir le constructeur sans arguments, il faut que tu l'écrives explicitement.
    Dans le processus de sérialisation de GWT ainsi que de nombreux autre framework, c'est obligatoire d'avoir un constructeur sans arguments.

    Donc, pour répondre à ta question, il est possible de faire un constructeur avec argument. Il faut juste un fournir un sans.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/07/2009, 17h25
  2. Pb d'utilisation de package !!
    Par Senia31 dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2005, 17h45
  3. [SAX] Utilisation du package contenant org.apache.xerces.par
    Par Sphost dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 17/01/2005, 11h07
  4. [CR] Utilisation des package Oracle ??
    Par sboober dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 06/12/2004, 07h37
  5. prob avec utilisation de package
    Par martijan dans le forum Modules
    Réponses: 13
    Dernier message: 11/07/2003, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo