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) > > >