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

Spring Java Discussion :

Spring AOP et AspectJ : Pointcut expression contains unsupported pointcut primitive 'call'


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Par défaut Spring AOP et AspectJ : Pointcut expression contains unsupported pointcut primitive 'call'
    Salut a tous!

    voila c'est simple et pour faire court:
    j'utilise Spring AOP ( version 3.0.5.RELEASE) avec Aspectj 1.6.10.

    j'ai un poincut dont l'expression est la suivante :
    expression 'call(@MyAnnotation * *(..))' ( dont MyAnnotation est une annotation que j'ai créee), le but est que le poincut tout simple couvre toutes les méthodes annotées oar MyAnnotation ( simple!)

    Malheuersement je vois l'esception suivante partout et je comprends pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException: Pointcut expression contains unsupported pointcut primitive 'call'
    Eest ce que Spring AOP ne supporte pas la primitives Aspectj?? Si oui comment résoudre le probleme? moi je ne veux pas lister toutes methodes sous une autre formes d'expression !


    Merci

  2. #2
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    salut,

    spring aop ne support que l'execution des méthodes.
    "execute(...)"
    si tu veux utiliser un pointcut call tu doit utiliser un aspect avec la synthaxe aspectJ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public aspect MyAspect{
    .....
    }

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Par défaut
    Peux tu developper stp! je t'avoue que je suis vraiment bloqué !

    merci

  4. #4
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    si tu utilise spring AOP c'est que tu déclare tes pointcuts dans les fichiers xml de spring!! correct? malheurement les pointcuts de type call ne sont pas supporté par spring AOP en effet, il ne support que les pointcut de type execute.
    tu veux utiliser le point cat call tu doit écrire l'aspect toi meme en utilisant la synthaxe aspectJ. sur le net il y beaucoup tutorial sur comment le faire.

    à plus

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Par défaut
    Bon je ne sais pas comment ecrire mon propre aspect mais je vais voir ( un lien ou un tuto serait plus qu'apprécie ) ..par contre une fois cet aspect ecrit comment dois-je procéder ?

    merci

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Par défaut
    Bon voila ce que j'ai pu faire ( mais ça marche toujours pas:

    Voiçi mon annotation:!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Retention(RetentionPolicy.RUNTIME)
    @Target(ElementType.METHOD)
    public @interface MyAnnotation {
        String name();
    }
    çi-joint mon aspect

    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
     
     
    @Aspect
    public class MyAspect {
     
    @Pointcut(value = "execution (@MyAnnotation  * *.*(..))")
        public void anyTaskToPerform() {
    	/*  do domething */
    }
     
     
    @Around("anyTaskToPerform()")
        public Object myMethod(ProceedingJoinPoint joinPoint) throws Throwable {
    	/* do something here too */
    }}
    Maintenanat une classe qui met en ouvre les méthodes annotées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class SomeJob {
     
      @MyAnnotation
      public letsdoit(){
      /* business */
      }
     
    }
    dans mon Spring j'ai bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <aop:aspectj-autoproxy/>
       <bean id="myAspect" class=" com.business.aop.MyAspect " >
    finalement , dans mon pom j'ai ajoutée les dependances 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
    34
    35
    36
     
     
    <!-- spring -->
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>3.0.5.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>3.0.5.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>3.0.5.RELEASE</version>
          </dependency>
          <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>3.0.5.RELEASE</version>
            <exclusions>
     
    ---
    <!-- aop -->
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.6.10</version>
          </dependency>
          <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.10</version>
          </dependency>
    j'ai un test unitaire qui se contente d'invoquer cette méthode invoquée mais je em rends compte que rien ne se passe !! le poincut est ignorée , ai-je loupée un truc?

    Je ne comprends pas ou est le soucis! est ce mon expression est correcte? sinon comment la corriger?

    Merci

Discussions similaires

  1. [Framework] Spring AOP et AspectJ
    Par gh_rachid dans le forum Spring
    Réponses: 3
    Dernier message: 30/05/2014, 10h59
  2. [Framework] Spring AOP et AspectJ
    Par Fandyz dans le forum Spring
    Réponses: 14
    Dernier message: 02/11/2012, 08h37
  3. [Framework] Spring AOP avec @AspectJ
    Par zooba dans le forum Spring
    Réponses: 1
    Dernier message: 27/03/2008, 17h06
  4. [Framework] Spring AOP et AspectJ
    Par Ganymede dans le forum Spring
    Réponses: 2
    Dernier message: 10/03/2008, 21h09
  5. Réponses: 2
    Dernier message: 09/01/2008, 11h18

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