Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] around advice not matching with finalize method

Hi Frederico,

I just tried it and it worked for me:

--- A.java ---
public class A {

  public static void main(String[]argv) {
    new A().create();
    System.gc();
  }

  private void create() {
    for (int i=0;i<1000;i++) { new A();
    }
}

  protected void finalize() throws Throwable {

    System.err.println("Finalized");
  }
}
aspect X {
  before(Object o): execution(!static * finalize(..)) && this(o) {
    System.out.println("("+o+")");
  }
}
--- End of A.java ---

> java A
(A@9ed927)
Finalized
(A@c2a132)
Finalized
(A@1e51060)
Finalized
(A@19616c7)
Finalized
(A@b166b5)
Finalized
(A@cdfc9c)
Finalized
(A@1837697)
Finalized
(A@1decdec)
Finalized
(A@a1807c)
Finalized
(A@fa7e74)
Finalized
(A@183f74d)
Finalized
(A@e102dc)
Finalized

Have you tried enabling -showWeaveInfo to see if the method is woven?

Andy

2009/5/29 pilux <federico@xxxxxxxxxxxx>:
>
> Hi all,
>
>    I'm trying to write an aspect for controlling every custom classes
> loaded. So, i've written a pointcut to exclude th system classes:
>
>    public pointcut SystemExclusions() : !within(weblogic..*) &&
> !within(sun..*) && !within(org.apache..*) && !within(com.ibm..*) &&
> !within(*..*ogger*..*)
>    && !within(AbstractMonitor+) && !within(glassbox..*) &&
> !within(org.aspectj..*) && !within(net.sf.hibernate..*)
>    && !within(com.rsa..*) && !within(org.jboss..*) &&
> !within(org.eclipse..*) && !within(org.osgi..*) &&
> !within(com.bea.console..*)
>    && !within(edu.emory.mathcs.util..*) && !within(uk.ltd.getahead.dwr..*)
> && !within(org.hsqldb..*) && !within(org.spring*..*);
>
>    And another one for capturing the classes load:
>
>    /* Clases */
>    after() returning(Object o): call(!static Object+.new(..)) && this(*) &&
> SystemExclusions()
>    {
>        //String key = findClassName(thisJoinPointStaticPart.toString());
>        String key = o.getClass().getName();
>        if(LocalDebug && false) System.err.println("[Pilux-Lucierna***] Se
> ha cargado una instancia de la clase: " + key);
>        registerInstanceLoad(key, false);
>        iterationsOcurred.increment();
>        if (iterationsOcurred.getValue() >= dumpFrequency)
>            reportConsoleOperations();
>    }
>
>    This is working fine, but for decrease the loaded classes counter, i'm
> trying to capture the finalize() execution method, with this advice:
>
>    void around(Object o) : execution(!static * finalize(..)) && this(o)
>    {
>        String key = o.getClass().getName();
>        if(LocalDebug) System.err.println("[Pilux-Lucierna***] Se ha
> descargado una instancia de la clase: " + key);
>        registerInstanceLoad(key, true);
>        iterationsOcurred.increment();
>        if (iterationsOcurred.getValue() >= dumpFrequency)
>            reportConsoleOperations();
>        proceed(o);
>    }
>
>    I've overloaded a finalize() method from a custom class to force a
> message console when the gc() calls it, and the method is currently running,
> but for any reason is not matching my pointcut. I'm running in an evironment
> with several aspects running, I don't know if this matter. Somebody can help
> me, please? I'll be very grateful!!!
>
> Thanks!
> Regards, Federico.
> --
> View this message in context: http://www.nabble.com/around-advice-not-matching-with-finalize-method-tp23775987p23775987.html
> Sent from the AspectJ - users mailing list archive at Nabble.com.
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>


Back to the top