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

Java Discussion :

[AspectJ] adviceDidNotMatch sur un prog simplissime


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Par défaut [AspectJ] adviceDidNotMatch sur un prog simplissime
    Bonjour à tous,
    je re-commence l'AspectJ après 1 an de pause. J'ai repris mes petits progs simples pour me faire la main et j'ai un warning lors de la compil:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: advice defined in asp3.AspAj3 has not been applied [Xlint:adviceDidNotMatch]
    Mon code se divise en 3 parties:
    1/ un jar appelant (le main)
    2/ un jar appelé par le main
    3/ mon jar d'aspect qui vient s'intercaler entre les 2 avec un around sur la méthode du 2e jar.
    Voici le 1er jar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public static void main(String[] args) {
     
    	Acii2 acii = new Acii2();
    	acii.credit(4);
    }
    Voici la méthode du 2e jar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package aci2;
     
    public class Acii2 {
     
    	public Acii2(){
    	}
     
    	public void credit(float amount){
    		System.out.println("OK");
    	}
    Et voici le around:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    import aci2.Acii2;
     
    public aspect AspAj3 {
     
    	void around() : call(* Acii2.credit(..)){
        	      System.out.println("OK aspectj");
    	      proceed();
            }
    Sauriez-vous me dire pourquoi j'ai un warning adviceDidNotMatch sur la ligne du void around()... ???

    C'est pourtant assez simple comme code mais je ne vois pas mon erreur...

    Merci d'avance pour vos observations.
    Cyril

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    la méthode credit est bien dans la classe Ascii2 ?
    Tu appelles bien la méthode quelque part ?
    Ton pointcut sélectionne un joinpoint de type call, donc le code sera inséré au lieu d'appel de la methode. Si tu veux le mettre dans la méthode il te faudra sélectionner le joinpoint execution plutôt que call

    A plus

    EDIT: ah ben si tu changes ton codes pendant que je réponds aussi Oublie ma première question alors maintenant

  3. #3
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Par défaut
    Salut George7,
    oui à tes premières questions. J'ai editer mon post pour ajouter le code manquant. Et j'ai vu ton EDIT aussi ;-)

    Je ne comprend pas trop la diff entre call et execution puisqu'on est dans le cadre d'un around...
    Mais j'ai essayé les 2, et ça ne résoud pas le warning.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par taillooo Voir le message
    Salut George7,
    oui à tes premières questions. J'ai editer mon post pour ajouter le code manquant. Et j'ai vu ton EDIT aussi ;-)

    Je ne comprend pas trop la diff entre call et execution puisqu'on est dans le cadre d'un around...
    Mais j'ai essayé les 2, et ça ne résoud pas le warning.
    En fait lors d'un call, le code du around sera ajouté à tous les endroits appelant la méthode. Dans le cas d'un execution, le code sera ajouté une fois dans la méthode credit, en englobant le code de la méthode. C'est étonnant que tu aies toujours le warning. Tu utilises le ajdt ? essaie un clean du projet dans ce cas. Je tente chez moi si tu as toujours le problème

  5. #5
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Par défaut
    Bon je viens d'essayer sur un autre poste et je n'ai pas le warning, donc ca vient de ma conf. C'est déjà une bonne nouvelle.

    Tu as l'air de confirmer que la syntaxe est exacte. Néanmoins j'ai ce warning sur le projet sur lequel je bosse et sur une plateforme propre. Pour tester bourrin j'ai tenté le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void around() : call(* *.*(..)){
    et ca compile sans warning.
    => je pense donc que ca doit venir de la syntaxe de mon appel.
    Vois-tu qq chose de plus à regarder de près? Mettre le chemin total de la méthode dans l'appel plutôt que dans l'import du haut?

    Merci de ton aide.
    Cyril

  6. #6
    Invité
    Invité(e)
    Par défaut
    j'ai copié ton code à la ligne près et j'avais le warning. J'ai fait un clean du projet, plus de warning. Tu as tenté ça ? Parfois le plugin ajdt a du mal à du mal avec les dépendances et la compilation incrémentelle

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par taillooo Voir le message
    Mon code se divise en 3 parties:
    1/ un jar appelant (le main)
    2/ un jar appelé par le main
    3/ mon jar d'aspect qui vient s'intercaler entre les 2 avec un around sur la méthode du 2e jar.
    AspectJ ne va pas modifier les .jar : il "weave" des .class …

    Si vous devez appliquer des aspects à des JAR :
    - load time weaving
    ou
    - extraire les .class du JAR et les inclure dans le projet, vous aurez les .class modifiés dans le build et pourrez reconstruire le JAR à partir du résultat.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    AspectJ ne va pas modifier les .jar : il "weave" des .class …

    Si vous devez appliquer des aspects à des JAR :
    - load time weaving
    ou
    - extraire les .class du JAR et les inclure dans le projet, vous aurez les .class modifiés dans le build et pourrez reconstruire le JAR à partir du résultat.
    Ah ouais mince, j'avais loupé ça
    Y#a pas une option kivabien ? genre -inpath ?

  9. #9
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Par défaut
    Ne pouvant pas modifier mes jar 1 et 2, je fais du Load Time Weaving en compilant mon jar Aspect avec la ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ajc -source 1.5 src\asp3\AspAj3.aj -injars jar2.jar -outjar aspect.jar
    avec les META-INF qui vont bien dans le jar 1 (jar appelant), i.e.:
    - création d'un fichier aop-ajc.xml,
    - ajout du aspect.jar dans le Class-Path du MANIFEST

    ai-je oublié une étape?

    Merci!

  10. #10
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 51
    Par défaut Certaines méthodes visibles par l'Aspect, d'autres non...
    Bonjour,
    je reviens encore vers vous sur un point bien précis:
    Dans mon projet, certaines méthodes sont visibles par l'Aspect, d'autres non (pourtant de la même classe)...

    Je m'explique: sous Eclipse, l'advice que je crée ne voit pas toutes les méthodes de la classe tissée. En l'occurence, il ne voit pas la principale que je veut remplacer par un around et me sort un
    mais voit bien les autres (celle dont je n'ai pas l'utilité bien sûr, ce serait trop facile...).

    J'ai bien regardé les interfaces de ces méthodes, et je ne vois aucune caracteristique spécifique entre l'une et les autres.

    Sauriez-vous s'il faut définir certains attributs qq part dans le projet pour les méthodes qu'on veut surcharger??

    Merci d'avance!

    Cyril

Discussions similaires

  1. Je débute -> Conseils sur mon prog (code, lisibilité etc.)
    Par asxasx dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 22/03/2007, 08h31
  2. Musique sur un prog en OpenGL
    Par Gonath dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 18/04/2006, 08h45
  3. Modif html sur mon prog
    Par vins25 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/02/2006, 06h15
  4. Réponses: 15
    Dernier message: 25/09/2005, 23h31

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