Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] problem with declare annotation


Hi,

Being fairly new to aop, I'm still finding my feet but I'm increasingly becoming a fan of using annotations as markers rather than
complicated pointcut expressions. Actually there would still be pointcut expressions, but to me they are more readable if all
they are doing is deciding where self descriptive annotations should go.

The ability then to specify annotations in a deployment situation in an aop.xml file would be amazing for us because at the
moment the dev team have to sweat over how much tracing to include and which logging levels at build time.

Cheers
- Ashley

aspectj-users-bounces@xxxxxxxxxxx wrote on 27/11/2007 11:54:28:

> The error would appear to be a real bug, I put everything into one file:
>
> aspect ConfigureTracing {
>         declare @type : MyPojo : @Tracing(level = LoggingLevel.DEBUG);
> // compile error!!!
>         declare @method : * MyPojo.calculate() : @TestAnnotation;
> }
> @interface Tracing { LoggingLevel level(); }
> @interface TestAnnotation {}
> class Level {
>   Level(int i) {}
>   public final static Level ALL = new Level(1);
>   public final static Level DEBUG = new Level(2);
>   public final static Level ERROR = new Level(3);
>   public final static Level FATAL = new Level(4);
>   public final static Level INFO = new Level(5);
>   public final static Level OFF = new Level(6);
>   public final static Level WARN = new Level(7);
> }
> enum LoggingLevel {
>         ALL(Level.ALL), DEBUG(Level.DEBUG), ERROR(Level.ERROR),
> FATAL(Level.FATAL), INFO(
>                         Level.INFO), OFF(Level.OFF), WARN(Level.WARN);
>         private final Level level;
>         private LoggingLevel(Level level) {
>                 this.level = level;
>         }
>         public Level getLevel() {
>                 return level;
>         }
> }
> class MyPojo {
>   public static void calculate() {
>   }
> }
>
> and it still fails with the error you describe.  I have raised it on
> bugzilla: https://bugs.eclipse.org/bugs/show_bug.cgi?id=211052
>
> On the second situation, I don't think you can do what you want.  You
> can raise an enhancement request and we can look at implementing
> something.
>
> Andy.
>
> On 26/11/2007, Ashley Williams <ashley.williams@xxxxxx> wrote:
> >
> > Hi,
> >
> > I'm trying to write a simple tracing annotation but have problems declaring
> > it against a type due to compile errors. Basically I get the errordepending
> > on which combination of @Target annotation attributes I specify. For example
> > TYPE and CONSTRUCTOR work together but not TYPE and METHOD as shown below. I
> > would eventually like to apply the Tracing annotation to all ElementTypes.
> >
> > 1. The pojo I would like to declare the annotations against
> >
> > public class MyPojo {
> >         public static void calculate() {
> >         }
> > }
> >
> >
> > 2. The annotation I would like to apply is as follows:
> >
> > @Retention(RetentionPolicy.RUNTIME)
> > @Target( { ElementType.TYPE, ElementType.METHOD})
> > public @interface Tracing {
> >         LoggingLevel level() default LoggingLevel.DEBUG;
> > }
> >
> >
> > 3. The aspect that applies the annotation to MyPojo and MyPojo.calculate()
> >
> > public aspect ConfigureTracing {
> >         declare @type : MyPojo : @Tracing(level = LoggingLevel.DEBUG); //
> > compile error!!!
> >         declare @method : * MyPojo.calculate() : @TestAnnotation;
> > }
> >
> >
> > 4. Here is the LoggingLevel enumeration I wrote, since I couldn't find one
> > in log4j:
> >
> > public enum LoggingLevel {
> >         ALL(Level.ALL), DEBUG(Level.DEBUG), ERROR(Level.ERROR),
> > FATAL(Level.FATAL), INFO(
> >                         Level.INFO), OFF(Level.OFF), WARN(Level.WARN);
> >         private final Level level;
> >         private LoggingLevel(Level level) {
> >                 this.level = level;
> >         }
> >         public Level getLevel() {
> >                 return level;
> >         }
> > }
> >
> > However when I compile it using aspectj tools 1.5.3 I get the following
> > error message: "[ERROR] DEBUG cannot be resolved", which refers to my
> > LoggingLevel.DEBUG enum constant. Could it be some sort of class loader
> > issue where only some of my enumeration constants aren't yet available?
> >
> > As a bonus question, I would like to specify something like the
> > ConfigureTracing aspect above in an aop.xml file for runtime weaving, this
> > way I don't have to hard code the annotations at build time. However in the
> > docs for aop.xml I couldn't find any way to declare annotations, so is there
> > some other strategy I can use to achive this?
> >
> > Thanks for any help
> > - Ashley
> >  ---
> >
> >  This e-mail may contain confidential and/or privileged information. If you
> > are not the intended recipient (or have received this e-mail in error)
> > please notify the sender immediately and delete this e-mail. Any
> > unauthorized copying, disclosure or distribution of the material in this
> > e-mail is strictly forbidden.
> >
> >  Please refer to
> > http://www.db.com/en/content/eu_disclosures.htm for
> > additional EU corporate and regulatory disclosures.
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> >
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users

---

This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden.

Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.


Back to the top