Re: [aspectwerkz-user] Weaving private methods

Alexandre Vasseur <[email protected]> Mon, 6 Jun 2005 19:18:04 +0200
Newsgroups gmane.comp.java.aspectwerkz.user
Message-ID <[email protected]>
Can you see my last post on how private member advising works ? We
basically add wrapper method as the javac compiler does when you have
f.e. inner classes.

Using the -D...dump=* (see FAQ for exact option name) you 'll be able
to look at the weaved code and see if there is an accessor.

Why everything is in your bootclasspath/p in your startup line ?
Can you reproduce the error in some simple app (no app server) ?

Alex

On 6/6/05, Bygrave, Graham BGI UK <[email protected]> wrote:
> Hi,
> 
> Thought maybe not using JRockit was the source of my problem, but it turns out not to be so.
> 
> I've reduced my aspect down to just empty stub methods.  The aspect does nothing and imports nothing except org.codehaus.aspectwerkz.joinpoint.StaticJoinPoint.
> 
> And yet when I start weblogic, I get the following:
> The WebLogic Server did not start up properly.
> Exception raised:
> java.lang.IllegalAccessError: <init>
>         at weblogic.security.providers.authorization.DefaultAuthorizationUtils_4_1187989080_369379917__92347188___AW_JoinPoint.invoke(Ljava.lang.String;Ljava.lang.String;Lweblogic.security.providers.authorization.DefaultAuthorizationUtils;)Lweblogic.security.providers.authorization.DefaultAuthorizationUtils;(Unknown Source)
> <snip>
> 
> I wonder if there's a problem with my startup line?
> C:/jrockit-j2sdk1.4.2_05/bin/java -Xmanagement:class=org.codehaus.aspectwerkz.extension.jrockit.JRockitPreProcessor -Xbootclasspath/p:"C:\jrockit-j2sdk1.4.2_05\lib\tools.jar;C:\bea\weblogic700\server;C:\bea\weblogic700\server\lib\weblogic_sp.jar;C:\bea\weblogic700\server\lib\weblogic.jar;C:\bea\user_projects\server_local;C:\projects\aspectwerkz-2.0\lib\aspectwerkz-jdk14-2.0.jar;C:\projects\aspectwerkz-2.0\lib\asm-1.5.4-snapshot.jar;C:\projects\aspectwerkz-2.0\lib\asm-attrs-1.5.4-snapshot.jar;C:\projects\aspectwerkz-2.0\lib\asm-util-1.5.4-snapshot.jar;C:\projects\aspectwerkz-2.0\lib\aspectwerkz-2.0.jar;C:\projects\aspectwerkz-2.0\lib\aspectwerkz-core-2.0.jar;C:\projects\aspectwerkz-2.0\lib\aspectwerkz-extensions-2.0.jar;C:\projects\aspectwerkz-2.0\lib\concurrent-1.3.1.jar;C:\projects\aspectwerkz-2.0\lib\dom4j-1.4.jar;C:\projects\aspectwerkz-2.0\lib\jarjar-0.3.jar;C:\projects\aspectwerkz-2.0\lib\jrexx-1.1.1.jar;C:\projects\aspectwerkz-2.0\lib\junit-3.8.1.jar;C:\projects\aspectwerkz-2.0\lib\manifest-core.mf;C:\projects\aspectwerkz-2.0\lib\manifest.mf;C:\projects\aspectwerkz-2.0\lib\qdox-1.4.jar;C:\projects\aspectwerkz-2.0\lib\trove-1.0.2.jar" -Daspectwerkz.home=C:/projects/aspectwerkz-2.0 -Xms128m -Xmx512m -Daspectwerkz.definition.file=c:\projects-src\conf\aspects\aop.xml -Dlog4j.configuration=c:\projects-src\conf\layer\dev\classes\log4j.xml -Dlog4j.configDebug -Dweblogic.security.SSL.trustedCAKeyStore=C:/bea/weblogic700/server/lib/cacerts -Xnoclassgc -Xverify:none -Djava.compiler=NONE -cp "C:/jrockit-j2sdk1.4.2_05/lib/tools.jar;C:/bea/weblogic700/server;C:/bea/weblogic700/server/lib/weblogic_sp.jar;C:/bea/weblogic700/server/lib/weblogic.jar;C:/projects/3rdParty/jakarta-log4j-1.2.8/dist/lib/log4j-1.2.8.jar;C:/projects/3rdParty/commons-el-1.0/jsp2-el.jar;C:/projects/3rdParty/commons-el-1.0/commons-el.jar;./common;C:/projects/aspectwerkz-2.0/lib/aspectwerkz-2.0.jar;C:/projects/aspectwerkz-2.0/lib/aspectwerkz-core-2.0.jar;C:/projects/aspectwerkz-2.0/lib/aspectwerkz-extensions-2.0.jar;C:/projects/aspectwerkz-2.0/lib/dom4j-1.4.jar;C:/projects/aspectwerkz-2.0/lib/qdox-1.4.jar;C:/projects/aspectwerkz-2.0/lib/trove-1.0.2.jar;C:/projects/aspectwerkz-2.0/lib/asm-1.5.4-snapshot.jar;C:/projects/aspectwerkz-2.0/lib/asm-attrs-1.5.4-snapshot.jar;C:/projects/aspectwerkz-2.0/lib/asm-util-1.5.4-snapshot.jar;C:/projects/aspectwerkz-2.0/lib/jrexx-1.1.1.jar" -Dweblogic.Name=local_server -Dbea.home=c:/bea -Dweblogic.management.server=http://localhost:17676/console -Dweblogic.ProductionModeEnabled= weblogic.Server
> 
> My aop.xml script looks like this:
> <aspectwerkz>
>     <system id="MyAspects">
>         <package name="com.utils.debug">
>             <aspect class="ObjectLifecycleTracker">
>                 <pointcut name="construction" expression="call(java.lang.Object+.new(..)) and !within(com.utils.debug.ObjectLifecycleTracker*)"/>
>                 <advice name="beforeConstruction" type="before" bind-to="construction"/>
> 
>                 <pointcut name="deletion" expression="call(* java.lang.Object+.finalize()) and !within(com.utils.debug.ObjectLifecycleTracker*)"/>
>                 <advice name="afterDeletion" type="after" bind-to="deletion"/>
>             </aspect>
>         </package>
>     </system>
> </aspectwerkz>
> 
> Sorry for the verbose post.
> 
> Do you spot anything glaring?  How does access to private methods work in aspectwerkz?
> Best wishes,
> Graham Bygrave.
> 
> 
> -----Original Message-----
> From: Alexandre Vasseur [mailto:[email protected]]
> Sent: 02 June 2005 15:21
> To: [email protected]
> Subject: Re: [aspectwerkz-user] Weaving private methods
> 
> 
> private member interception is supported
> 
> From what you post here, I can imagine you have an advice on a
> constructor call, for a class that would instantiate an instance of
> himself in the static initialiezer ie like below and I don't have the
> problem you have.
> 
> Are you using 2.0 final ? Can you reproduce it ?
> Alex
> 
> 
> package test.priv.sub;
> public class PrivateTarget {
>     public static PrivateTarget s_singleton = new PrivateTarget(1);
> 
>     private PrivateTarget(int i) {
>         int j = i;
>     }
> 
> }
> 
> I could weave that with:
> 
> package test.priv;
> public class PrivateCtorTest extends TestCase {
> 
>     public void testPrivateCtorCall() {
>         PrivateTarget i = PrivateTarget.s_singleton;
>         assertTrue(i!=null);
>     }
> 
>     public static class TestAspect {
> 
>         @Before("within(test.priv.sub.PrivateTarget) && call(*.new(..))")
>         public void before() {
>             int i = 0;
>         }
>     }
> 
>     public static void main(String[] args) {
>         junit.textui.TestRunner.run(suite());
>     }
> 
>     public static junit.framework.Test suite() {
>         return new junit.framework.TestSuite(PrivateCtorTest.class);
>     }
> }
> 
> 
> On 6/2/05, Bygrave, Graham BGI UK <[email protected]> wrote:
> > I'm trying to weave private methods and yet I get a an IllegalAccessError when aspectwerkz generated classes try to call them - not surprising given that the call seems to be direct (i.e. not using reflection).  Is there any way around this?
> >
> > Thanks,
> > Graham.
> >
> > java.lang.IllegalAccessError: tried to access method weblogic.security.acl.internal.AuthenticatedSubject.<init>(Z)V from class weblogic.security.acl.internal.AuthenticatedSubject_4__86728660__1385029237__253649152___AW_JoinPoint
> >         at weblogic.security.acl.internal.AuthenticatedSubject_4__86728660__1385029237__253649152___AW_JoinPoint.invoke(Unknown Source)
> >         at weblogic.security.acl.internal.AuthenticatedSubject.<clinit>(AuthenticatedSubject.java:29)
> >         at java.lang.Class.forName0(Native Method)
> >         at java.lang.Class.forName(Class.java:141)
> >         at weblogic.security.service.SecurityServiceManager_4_834538669_1818100967__253649152___AW_JoinPoint.aw$staticinitialization(Unknown Source)
> >         at weblogic.security.service.SecurityServiceManager_4_834538669_1818100967__253649152___AW_JoinPoint.<clinit>(Unknown Source)
> >         at weblogic.security.service.SecurityServiceManager.initializeKernelID(SecurityServiceManager.java:1071)
> >         at weblogic.security.service.SecurityServiceManager.<clinit>(SecurityServiceManager.java:82)
> >         at weblogic.security.service.PrivilegedActions$GetKernelIdentityAction.run(PrivilegedActions.java:45)
> >         at java.security.AccessController.doPrivileged(Native Method)
> >         at weblogic.t3.srvr.T3Srvr.<clinit>(T3Srvr.java:161)
> >         at weblogic.Server.main(Server.java:32)
> >
>