I have a "fragile" legacy app that is running on JBoss 4.  That is to say,
that any changes to the app require a full manual regression test which are
long and expensive.  I'm trying to add some specific logging to the app, so
I figured that using AOP to intercept method executions would be the
simplest way without altering the binaries.

But here is where I am running into classloading problems when I am trying
to advise classes that are already loaded by the classloader by the time my
ear gets loaded.

My EAR is structured as the follows:

EAR
 - webapp.war
    \ WEB-INF/lib
        - webstuff.jar
        - WebClasses.jar
        - struts.jar
 - EJB.jar
 - utils.jar


JBoss is set to load as parent-first, and modifying the sequence isn't an
option.

So I have a few problems here:
1) If I drop my aspect.jar in my EAR/lib folder, and enable LTW on the
command line, it is able to successfully advise all my classes in EJB.jar,
utils.jar and webstuff.jar.  I am even able to advise methods in
struts.jar, but unable to use any struts classes as the classloader for the
aspect doesn't "see" anything in struts.jar (I get
ClassDefNotFoundException).

2) If I move my aspect.jar into my WEB-INF/lib folder, it doesn't
successfully advise anything in EJB.jar or utils.jar, I suspect b/c they
are loaded prior to the aspect being loaded by the classloader.

My pointcuts are all "execution" pointcuts.

Similarly if I try to advise container classes with "execution" pointcuts,
they never seem to trigger.

Is there a simple solution for this?  Does one need to take the
class-loading sequence into account when using LTW?  Thinking outloud,
would changing all my "execution" pointcuts to "call" make a difference?

My aop.xml is fairly basic:

   <aspectj>
            <aspects>
              <aspect name="com.security.logger.LoginLogger"/>
              <aspect name="com.security.logger.EJBAccessErrorLogger"/>
            </aspects>

            <weaver options="-verbose">
            </weaver>
   </aspectj>

Do I need to specify <includes> to the aspectj compiler?  I thought all
classes were "included" by default.

Thanks!

Eric
_______________________________________________
aspectj-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to