I am using maven2 and AspectJ plugin. May be your scenario is better, you
mean I register them and then somewhere else at runtime process them to
create a map of events and related classes.
thanks

On 4/28/10, Andy Clement <[email protected]> wrote:
>
> no error - so did your advice actually apply? Were there any markers
> in eclipse or weavinfo messages (if you built on the command line, Ant
> or load time weaving)?
> I suggested registering by name so you could drive the load of the
> class outside of the bean in your registration handling mechanism.
>
>
> Andy
>
>
> On 28 April 2010 10:44, Mohammad Norouzi <[email protected]> wrote:
> > No Andy there is no error, actually the list of registered classes are
> > empty... it means no class has been registered itself. I need its Class
> > object because I want to read the @Observer(events = "SOME_EVENT") so I
> can
> > extract which events is binded to which classes (Session bean) and then I
> > can look them up when an event has been fired
> >
> > On 4/28/10, Andy Clement <[email protected]> wrote:
> >>
> >> Although AspectJ tries to create code that decompiles cleanly, there
> >> are some situations where it does not.  The code is fine (otherwise
> >> you'd get a verifyerror), it is just the decompiler that cannot cope -
> >> I don't use them, I just read the bytecode :)  Decompilers usually
> >> match on patterns and if you stray from a common pattern produced by
> >> javac, the decompiler will not understand.
> >>
> >> You still didn't mention how it fails....  do you get an error or is
> >> it just not running the advice?
> >>
> >> You could register the type by name rather than class reference if
> >> that makes any difference...
> >>
> >>
> >> Andy
> >>
> >>
> >> On 28 April 2010 10:14, Mohammad Norouzi <[email protected]> wrote:
> >> > Thank you Simone and Andy
> >> > Both pointcut and advice are exactly the same you suggested, at first
> I
> >> > thought there is a problem in advice which makes static block so, and
> >> > yes I
> >> > am using JD to decompile the code and as you found perhaps that
> >> > //ERROR// is
> >> > decompiler issue, if it is so, then my static block doesn't work...
> >> >
> >> > Well... As I understand you mean that if I load the class manually say
> >> > using
> >> > Class.forName() it will be ok however I will give it a try tomorrow
> but
> >> > I
> >> > think there are some issues.... first, this class is a EJB session
> bean
> >> > and
> >> > since it is a managed object by app server I am not sure if I can load
> >> > it
> >> > manually second... at deploy time, app server will load it, isn't that
> >> > enough?
> >> >
> >> > thank you for spending your time
> >> >
> >> > On 4/28/10, Simone Gianni <[email protected]> wrote:
> >> >>
> >> >> Hi Mohammad,
> >> >> I've found this page : http://java.decompiler.free.fr/?q=node/118 ,
> it
> >> >> seems that JD produces the raw bytecode commented when it is not able
> >> >> to
> >> >> decompile it properly, which means that it is JD giving the error,
> not
> >> >> the
> >> >> code itself in error. I haven't been using JD lately, so I can't
> >> >> remember
> >> >> how to configure it properly, but the bytecode seems correct, so the
> >> >> problem
> >> >> must be somewhere else.
> >> >> Simone
> >> >>
> >> >> 2010/4/28 Simone Gianni <[email protected]>
> >> >>>
> >> >>> Hi Mohammad,
> >> >>> mmm ... the decompiled bytecode seems correct : it creates a
> joinpoint
> >> >>> static part, then executes the previous static initializer (which is
> >> >>> empty),
> >> >>> and then calls the after advice both when an exception is raised and
> >> >>> when no
> >> >>> exception is raised.
> >> >>> Bytecode, AFAIK, cannot be commented out, is that the output of
> javap,
> >> >>> dj
> >> >>> or which other tool?
> >> >>> Obviously, static initializer is executed only when the class is
> >> >>> loaded
> >> >>> for the first time in the JVM, if it is not loaded it will not be
> >> >>> called and
> >> >>> the class not be registered. Java lacks a serious "service
> discovery"
> >> >>> system, cause for backward compatibility with applets classloaders
> >> >>> does not
> >> >>> have a method for "listing" the classpath, not to mention to list
> >> >>> which
> >> >>> classes are annotated with a specific annotations. Apt is the tool
> >> >>> that can
> >> >>> ease this pain, creating a text file from classes annotated with a
> >> >>> specific
> >> >>> annotation, but unfortunately it works at compile time, not at
> >> >>> runtime,
> >> >>> that's why there is still the need for files like persistence.xml in
> >> >>> JPA and
> >> >>> web.xml in jars.
> >> >>> To make a long story short, as Andy did in his code, somewhere you
> >> >>> must
> >> >>> still call "new ClassUnderObservation()" or at least
> >> >>> Class.forName("com.foo.ClassUnderObservation") or access a static
> >> >>> field or
> >> >>> method of that class to get it loaded by the jvm, otherwise no
> static
> >> >>> init,
> >> >>> no registration in the aspect.
> >> >>> Simone
> >> >>>
> >> >>> 2010/4/28 Andy Clement <[email protected]>
> >> >>>>
> >> >>>> You didn't mention how it fails??  Here is Simones code in a real
> >> >>>> program, appears to work.  What is different about your code or
> that
> >> >>>> particular type?  Perhaps narrow your pointcut to a specific type
> to
> >> >>>> test the registration logic is working before expanding it to cover
> >> >>>> more types?
> >> >>>>
> >> >>>> === A.aj ===
> >> >>>> package com.foo;
> >> >>>>
> >> >>>> import java.lang.annotation.Retention;
> >> >>>> import java.lang.annotation.RetentionPolicy;
> >> >>>> import java.util.*;
> >> >>>>
> >> >>>> import org.aspectj.lang.reflect.InitializerSignature;
> >> >>>>
> >> >>>> @Retention(RetentionPolicy.RUNTIME)
> >> >>>> @interface Observer {}
> >> >>>>
> >> >>>> aspect A {
> >> >>>>        public static void main(String[] args) {
> >> >>>>                new C();new D(); new E();
> >> >>>>        }
> >> >>>>
> >> >>>>   static List<Class> registry = new ArrayList<Class>();
> >> >>>>
> >> >>>>   pointcut observerKlasses(): staticinitialization(@Observer
> com..*);
> >> >>>>
> >> >>>>        after(): observerKlasses() {
> >> >>>>            InitializerSignature initsig =
> >> >>>> (InitializerSignature)thisJoinPointStaticPart.getSignature();
> >> >>>>            Class klass = initsig.getDeclaringType();
> >> >>>>            registry.add(klass);
> >> >>>>            System.out.println("Registering "+klass);
> >> >>>>        }
> >> >>>>
> >> >>>> }
> >> >>>>
> >> >>>> @Observer
> >> >>>> class C {}
> >> >>>>
> >> >>>> class D{}
> >> >>>>
> >> >>>> @Observer
> >> >>>> class E {}
> >> >>>> ===
> >> >>>> ajc A.aj
> >> >>>> java A
> >> >>>> Registering class com.foo.C
> >> >>>> Registering class com.foo.E
> >> >>>>
> >> >>>> cheers,
> >> >>>> Andy
> >> >>>>
> >> >>>> On 28 April 2010 00:30, Mohammad Norouzi <[email protected]> wrote:
> >> >>>> > Hi Simone,
> >> >>>> > Thanks... I did what you said but there is a problem. During the
> >> >>>> > compile
> >> >>>> > there is no error but it seems the static block doesn't work. I
> >> >>>> > tried
> >> >>>> > to
> >> >>>> > decompile the target class to see what changes AspectJ has
> applied
> >> >>>> > and
> >> >>>> > I can
> >> >>>> > see a static block has been created but it is commented as
> follow:
> >> >>>> >
> >> >>>> >
> >> >>>> >   // ERROR //
> >> >>>> >   static
> >> >>>> >   {
> >> >>>> >     // Byte code:
> >> >>>> >     //   0: new 87    org/aspectj/runtime/reflect/Factory
> >> >>>> >     //   3: dup
> >> >>>> >     //   4: ldc 88
> >> >>>> >     //   6: ldc 90
> >> >>>> >     //   8: invokestatic 96    java/lang/Class:forName
> >> >>>> > (Ljava/lang/String;)Ljava/lang/Class;
> >> >>>> >     //   11: invokespecial 99
> >> >>>> > org/aspectj/runtime/reflect/Factory:<init>
> >> >>>> > (Ljava/lang/String;Ljava/lang/Class;)V
> >> >>>> >     //   14: astore_0
> >> >>>> >     //   15: aload_0
> >> >>>> >     //   16: ldc 101
> >> >>>> >     //   18: aload_0
> >> >>>> >     //   19: ldc 103
> >> >>>> >     //   21: ldc 90
> >> >>>> >     //   23: invokevirtual 107
> >> >>>> > org/aspectj/runtime/reflect/Factory:makeInitializerSig
> >> >>>> >
> >> >>>> >
> >> >>>> >
> (Ljava/lang/String;Ljava/lang/String;)Lorg/aspectj/lang/reflect/InitializerSignature;
> >> >>>> >     //   26: iconst_0
> >> >>>> >     //   27: invokevirtual 111
> >> >>>> > org/aspectj/runtime/reflect/Factory:makeSJP
> >> >>>> >
> >> >>>> >
> >> >>>> >
> (Ljava/lang/String;Lorg/aspectj/lang/Signature;I)Lorg/aspectj/lang/JoinPoint$StaticPart;
> >> >>>> >     //   30: putstatic
> 79    com/foo/listener/MyListener1:ajc$tjp_0
> >> >>>> > Lorg/aspectj/lang/JoinPoint$StaticPart;
> >> >>>> >     //   33: goto +28 -> 61
> >> >>>> >     //   36: astore_0
> >> >>>> >     //   37: aload_0
> >> >>>> >     //   38: instanceof 71
> >> >>>> >     //   41: ifeq +8 -> 49
> >> >>>> >     //   44: aload_0
> >> >>>> >     //   45: checkcast
> 71    java/lang/ExceptionInInitializerError
> >> >>>> >     //   48: athrow
> >> >>>> >     //   49: nop
> >> >>>> >     //   50: invokestatic 77
> >> >>>> > com/foo/aspect/EventDispatcherAspect:aspectOf
> >> >>>> > ()Lcom/foo/aspect/EventDispatcherAspect;
> >> >>>> >     //   53: getstatic
> 79    com/foo/listener/MyListener1:ajc$tjp_0
> >> >>>> > Lorg/aspectj/lang/JoinPoint$StaticPart;
> >> >>>> >     //   56: invokevirtual 83
> >> >>>> >
> >> >>>> >
> >> >>>> >
> com/foo/aspect/EventDispatcherAspect:ajc$after$com_foo_aspect_EventDispatcherAspect$1$5b3bc9fd
> >> >>>> > (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
> >> >>>> >     //   59: aload_0
> >> >>>> >     //   60: athrow
> >> >>>> >     //   61: invokestatic 77
> >> >>>> > com/foo/aspect/EventDispatcherAspect:aspectOf
> >> >>>> > ()Lcom/foo/aspect/EventDispatcherAspect;
> >> >>>> >     //   64: getstatic
> 79    com/foo/listener/MyListener1:ajc$tjp_0
> >> >>>> > Lorg/aspectj/lang/JoinPoint$StaticPart;
> >> >>>> >     //   67: invokevirtual 83
> >> >>>> >
> >> >>>> >
> >> >>>> >
> com/foo/aspect/EventDispatcherAspect:ajc$after$com_foo_aspect_EventDispatcherAspect$1$5b3bc9fd
> >> >>>> > (Lorg/aspectj/lang/JoinPoint$StaticPart;)V
> >> >>>> >     //   70: return
> >> >>>> >     //
> >> >>>> >     // Exception table:
> >> >>>> >     //   from    to    target    type
> >> >>>> >     //   33    36    36    java/lang/Throwable
> >> >>>> >   }
> >> >>>> >
> >> >>>> > Regards,
> >> >>>> > Mohammad
> >> >>>> > --------------------------
> >> >>>> > Sun Certified Web Developer
> >> >>>> > ExpertsExchange Certified, Master:
> >> >>>> > http://www.experts-exchange.com/M_1938796.html
> >> >>>> > Have a look at some pictures @ http://pixelshot.wordpress.com/
> >> >>>> > Do you like to read, see http://brainable.blogspot.com/
> >> >>>> > For the Persians see http://fekre-motefavet.blogspot.com/
> >> >>>> > English
> >> >>>> >
> >> >>>> >
> >> >>>> > Forum:
> http://n2.nabble.com/English-Phrase-Finder-For-Persians-f3274251.html
> >> >>>> >
> >> >>>> >
> >> >>>> >
> >> >>>> >
> >> >>>> > On Tue, Apr 27, 2010 at 7:33 PM, Simone Gianni <
> [email protected]>
> >> >>>> > wrote:
> >> >>>> >>
> >> >>>> >> Hi Mohammad,
> >> >>>> >> staticinitialization has no target object because when a class
> is
> >> >>>> >> initialized there is no instance yet. Probably you can obtain
> the
> >> >>>> >> class and
> >> >>>> >> other informations using ThisJoinPointStaticPart inside your
> >> >>>> >> advice.
> >> >>>> >>
> >> >>>> >>     pointcut observerMethods():
> >> >>>> >>         staticinitialization(@Observer com..*);
> >> >>>> >>
> >> >>>> >>    after(): observerMethods() {
> >> >>>> >>         InitializerSignature initsig =
> >> >>>> >> (InitializerSignature)ThisJoinPointStaticPart.getSignature();
> >> >>>> >>         Class klass = initsig.getDeclaringType();
> >> >>>> >>         // adding 'klass' into Registry
> >> >>>> >>    }
> >> >>>> >>
> >> >>>> >> See
> >> >>>> >>
> http://www.eclipse.org/aspectj/doc/released/runtime-api/index.html
> >> >>>> >> for
> >> >>>> >> more info.
> >> >>>> >>
> >> >>>> >> Simone
> >> >>>> >>
> >> >>>> >> 2010/4/27 Mohammad Norouzi <[email protected]>
> >> >>>> >>>
> >> >>>> >>> Hello
> >> >>>> >>> I want to register those classes annotated with @Observer in a
> >> >>>> >>> Registry
> >> >>>> >>> class... I want this occurs in a static block of such classes:
> >> >>>> >>>
> >> >>>> >>>     pointcut observerMethods(Class klass):
> >> >>>> >>>         staticinitialization(@Observer com..*)
> >> >>>> >>>         && target(klass);
> >> >>>> >>>
> >> >>>> >>>    after(Class klass): observerMethods(klass) {
> >> >>>> >>>         // adding 'klass' into Registry
> >> >>>> >>>
> >> >>>> >>>    }
> >> >>>> >>>
> >> >>>> >>> but as I read in manual it is said staticinitialization has no
> >> >>>> >>> target
> >> >>>> >>> object... is this right? if yes, how can I obtain the Class of
> >> >>>> >>> those
> >> >>>> >>> classes. Can I declare a static-block for matching classes?
> >> >>>> >>>
> >> >>>> >>> thanks
> >> >>>> >>>
> >> >>>> >>> Regards,
> >> >>>> >>> Mohammad
> >> >>>> >>> --------------------------
> >> >>>> >>> Sun Certified Web Developer
> >> >>>> >>> Have a look at some pictures @ http://pixelshot.wordpress.com/
> >> >>>> >>>
> >> >>>> >>>
> >> >>>> >>>
> >> >>>> >>> _______________________________________________
> >> >>>> >>> aspectj-users mailing list
> >> >>>> >>> [email protected]
> >> >>>> >>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >> >>>> >>>
> >> >>>> >>
> >> >>>> >>
> >> >>>> >> _______________________________________________
> >> >>>> >> aspectj-users mailing list
> >> >>>> >> [email protected]
> >> >>>> >> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >> >>>> >>
> >> >>>> >
> >> >>>> >
> >> >>>> > _______________________________________________
> >> >>>> > aspectj-users mailing list
> >> >>>> > [email protected]
> >> >>>> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >> >>>> >
> >> >>>> >
> >> >>>> _______________________________________________
> >> >>>> aspectj-users mailing list
> >> >>>> [email protected]
> >> >>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >> >>>
> >> >>
> >> >>
> >> >> _______________________________________________
> >> >> aspectj-users mailing list
> >> >> [email protected]
> >> >> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >> >>
> >> >
> >> >
> >> >
> >> > --
> >> > Regards,
> >> > Mohammad
> >> > --------------------------
> >> > Sun Certified Web Developer
> >> > ExpertsExchange Certified, Master:
> >> > http://www.experts-exchange.com/M_1938796.html
> >> > Have a look at some pictures @ http://pixelshot.wordpress.com/
> >> > Do you like to read, see http://brainable.blogspot.com/
> >> > For the Persians see http://fekre-motefavet.blogspot.com/
> >> > English
> >> >
> >> > Forum:
> http://n2.nabble.com/English-Phrase-Finder-For-Persians-f3274251.html
> >> >
> >> >
> >> > _______________________________________________
> >> > aspectj-users mailing list
> >> > [email protected]
> >> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >> >
> >> >
> >> _______________________________________________
> >> aspectj-users mailing list
> >> [email protected]
> >> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> >
> >
> > --
> > Regards,
> > Mohammad
> > --------------------------
> > Sun Certified Web Developer
> > ExpertsExchange Certified, Master:
> > http://www.experts-exchange.com/M_1938796.html
> > Have a look at some pictures @ http://pixelshot.wordpress.com/
> > Do you like to read, see http://brainable.blogspot.com/
> > For the Persians see http://fekre-motefavet.blogspot.com/
> > English
> > Forum:
> http://n2.nabble.com/English-Phrase-Finder-For-Persians-f3274251.html
> >
> >
> > _______________________________________________
> > aspectj-users mailing list
> > [email protected]
> > https://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> >
> _______________________________________________
> aspectj-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>



-- 
Regards,
Mohammad
--------------------------
Sun Certified Web Developer
ExpertsExchange Certified, Master:
http://www.experts-exchange.com/M_1938796.html
Have a look at some pictures @ http://pixelshot.wordpress.com/
Do you like to read, see http://brainable.blogspot.com/
For the Persians see http://fekre-motefavet.blogspot.com/
English Forum:
http://n2.nabble.com/English-Phrase-Finder-For-Persians-f3274251.html
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to