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

Autres Java Discussion :

[AspecJ] Un aspect très simple, mais qui ne s'applique à rien. Problème d'écriture ou de configuration?


Sujet :

Autres Java

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut [AspecJ] Un aspect très simple, mais qui ne s'applique à rien. Problème d'écriture ou de configuration?
    Bonjour,

    Les aspects, je les utilise pour la première fois avec AspectJ 1.6.8 et Eclipse mis à jour avec AJDT 2.0.2.

    J'ai créé un project de type AspectJ, et créé un premier aspect avec cet objectif:
    Faire que tous les appels de méthodes get, is et has faits dans un objet implémentant l'interface CheckableObject (que j'ai définie pour mes besoins propres) débutent par un appel d'une méthode check() qu'elle déclare.

    pour cela, j'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
     * Checkable objects verify their invariants before giving access to their getters, has or is functions.
     */
    public aspect CheckableObjects
    {
       /** Each public get, has or is method is targeted. */
       pointcut verify(CheckableObject c): this(c) && within(CheckableObject+) && (call(public * *.get*()) || call(public boolean *.is*()) || call(public boolean *.has*()));
     
       before(CheckableObject c) : verify(c) 
       {
          c.check();
       };
    }
    Cela,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public aspect CheckableObjects
    {
       /** Each public get, has or is method is targeted. */
       pointcut verify(): within(CheckableObject+) && (execution(public * *.get*()) || execution(public boolean *.is*()) || execution(public boolean *.has*()));
     
       before(CheckableObject c) : verify() && target(c) 
       {
          c.check();
       };
    }
    Et même de dépit, pour en avoir le coeur net:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    pointcut verify(): call(* *.*());
     
       before() : verify() 
       {
       };
    Mais le résultat est toujours le même: un avertissement m'apparaît sous Eclipse: "advice defined in CheckableObjects has not been applied [Xlint:adviceDidNotMatch]".

    Pourtant, dans mes autres projets java, du même workspace, les classes ne semblent pas manquer où cet aspect devrait s'appliquer. Alors, que se passe t-il?

    L'ai-je mal écrit?

    Sous Eclipse, le projet qui contient l'aspect est un projet AspectJ. Mais les autres, cibles des aspects, restent des projets Java normaux. Dois-je les convertir?
    J'ai mis en dépendance de mes projets Java le projet AspectJ, mais sans succès.

    Quelques idées vous viennent-elles à l'esprit pour m'aider? Je dois faire une faute de néophyte quelque-part. Mais bien sûr à mes premières heures, je tourne en rond.

    En vous remerciant,

    Grunt.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    605
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 605
    Points : 670
    Points
    670
    Par défaut
    Je viens d'y parvenir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public aspect CheckableObjects
    {
       /** Each public get, has or is method is targeted. */
       pointcut verify(): within(CheckableObject+) && (execution(public * *.get*(..)) || execution(public boolean *.is*(..)) || execution(public boolean *.has*(..)));
     
       before(CheckableObject c) : this(c) && verify() 
       {
          c.check();
       };
    }
    Il m'a fallu déclarer les projets cibles en projets AspectJ eux mêmes pour qu'ils soient concernés, et mentionner le projet Aspects dans leur Aspect Path.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/11/2013, 06h37
  2. Problème a priori simple mais qui rend fou
    Par Fav' da Boy dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 21/09/2009, 18h41
  3. Problème simple mais qui me prend la tete
    Par bucheron007 dans le forum Visio
    Réponses: 1
    Dernier message: 08/05/2009, 21h11
  4. Requête SQL qui a l'air simple mais qui est musclée !
    Par tamiii dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/07/2008, 16h51
  5. c'est très simple mais je n'arrive pas
    Par info007 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 14/03/2008, 09h12

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