RE: [aspectwerkz-user] Weaving private methods

"Bygrave, Graham BGI UK" <[email protected]> Mon, 6 Jun 2005 18:04:42 +0100
Newsgroups gmane.comp.java.aspectwerkz.user
Message-ID <03D8E4DA4B752943B2F3F073ABDAE836304229@ldnnte2k032.insidelive.net>
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)
>