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

API standards et tierces Java Discussion :

[Guice] MethodInterceptor et NoSuchMethodException


Sujet :

API standards et tierces Java

  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut [Guice] MethodInterceptor et NoSuchMethodException
    Étant nouveau dans le monde de l'injection de dépendance, je m'essaie à Guice.

    J'ai déclaré les interfaces et classes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public interface Model<PK> {
      public PK getId();
      public void setId (PK id);
    }
     
    @ImplementedBy(BookImpl.class)
    public interface Book extends Model<Integer> {
      public String getTitle();
      public void setTitle(String title);
    }
     
    public abstract class AbstractModel<PK> implements Model<PK> {
      private PK id;
      @Getter(property = "id") public PK getId () {
        return this.id;
      }
      @Setter(property = "id") public void setId (PK id) {
        this.id = id;
      }
      protected void firePropertyChange (String property, Object oldValue, Object newValue) {
        ...
      }
    }
     
    public class BookImpl extends AbstractModel<Integer> implements Book {
      private String title;
      @Getter(property = "title") public String getTitle () {
        return this.title;
      }
      @Setter(property = "title") public void setTitle (String title) {
        this.id = id;
      }
    }
    Pour chaque propriété de chaque objet Model, le setter doit en fait être une méthode assez volumineuse d'une quinzaine de lignes. Écrire cela 200 fois (c'est une approximation, mais l'ordre de grandeur est réel) est donc extrêmement pénible sans compter que je dois utiliser des méthodes spéciales en fonction du nom de la propriété. J'ai donc décidé de la réduire à une seule ligne et d'ajouter une annotation (simple, héritée, limitée aux méthodes) précisant la propriété modifiée, et d'ensuite traiter l'ensemble de mes setters dans un proxy, appelé Interceptor dans le langage de Guice.

    Jusque là, pas de souci. Mais le problème est qu'en fin de méthode setter, je voudrais appeler la méthode firePropertyChange de l'AbstractModel. Et elle n'est pas trouvée.

    En enquêtant un peu plus, j'ai vu que l'objet passé à l'intercepteur n'est pas l'implémentation, mais une sous-classe créée par Guice. Voici donc mes questions :
    • Donc, comment faire pour avoir cet objet BookImpl et pouvoir l'utiliser ?
    • Est-ce cela le bug reporté ici et ici ?
    • Si ce n'est pas le cas, je crée un nouveau ticket ?


    D'avance merci,

    Olivier

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Je me réponds à moi-même : il s'agit d'un bug et d'une erreur de ma part.

    Le bug est bel et bien celui que j'indique et est résolu dans les version snapshot.

    Tandis que mon erreur est d'utiliser le klass.getMethod(String, Object...) pour retrouver la méthode souhaitée. Mais n'étant pas publique, il faut passer par klass.getDeclaredMethod(String, Object...) de chaque klass.getSuperclass() pour trouver la méthode que je souhaitais.

    Suite à cela, j'ai trouvé un autre bug, qui ne semble lui pas résolu, mais est également reporté.

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

Discussions similaires

  1. [wicket-guice] scope des objets injecté
    Par j0hnmerrick dans le forum Wicket
    Réponses: 2
    Dernier message: 30/07/2009, 11h18
  2. MethodInterceptor avec JSF et Spring
    Par demanghonj dans le forum Spring
    Réponses: 2
    Dernier message: 26/03/2009, 09h48
  3. [Visual Editor] NoSuchMethodException init
    Par hugo123 dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 17/02/2009, 15h04
  4. XMLDecoder noSuchMethodException probleme avec les setters
    Par Maxiflo dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 21/01/2009, 15h03
  5. Réponses: 2
    Dernier message: 25/03/2008, 15h34

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