Community
Participate
Working Groups
Raised by Peter Melnikov on the mailing list. Two problems: 1) the binding scope being used for annotation style aspects accumulates lots of duplicate import prefixes in the SimpleScope object. 2) SimpleScope.lookupType tries the prefixes even if the type is already fully qualified. The combination of these issues causes a terrible mess. Lots of class lookup failures. Since the type cannot be 'partially qualified' it is silly to use the prefixes if the type is fully qualified.
Created attachment 172545 [details] Classfiles patching this issue This jar includes two classes that replace those in an AspectJ 1.6.9 weaver. to apply it, save it alongside aspectjweaver.jar then jar -xvf pr317743.jar jar -uvf aspectjweaver.jar org this will patch BindingScope and SimpleScope in the jar.
I have applied the path and it works for me. Log file is now 2.5MB vs 22 MB before, and overall weaving speed has increased a lot. No more ClassNotFoundException error messages. Before, I got your patch, I changed slightly the SimpleScope.java: public UnresolvedType lookupType(String name, IHasPosition location) { ResolvedType resolvedType = world.resolve(UnresolvedType.forName(name), true); if(resolvedType.isMissing()) { for (int i = 0; i < importedNames.length; i++) { String importedName = importedNames[i]; // // make sure we're matching against the // // type name rather than part of it // if (importedName.endsWith("." + name)) { if (importedName.endsWith(name)) { return world.resolve(importedName); } } for (int i = 0; i < importedPrefixes.length; i++) { String importedPrefix = importedPrefixes[i]; ResolvedType tryType = world.resolve(UnresolvedType.forName(importedPrefix + name), true); if (!tryType.isMissing()) { return tryType; } } } return resolvedType; } This worked for me too. But it was just a quick fix.
Just found single exception: SEVERE: Unable to find class 'java.lang.void' in repository java.lang.ClassNotFoundException: java.lang.void not found - unable to determine URL at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292) at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:390) at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:373) at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:111) at org.aspectj.weaver.World.resolveToReferenceType(World.java:452) at org.aspectj.weaver.World.resolve(World.java:298) at org.aspectj.weaver.patterns.SimpleScope.lookupType(SimpleScope.java:64) at org.aspectj.weaver.BindingScope.lookupType(BindingScope.java:69) I'am pretty sure it is because I have following pointcut declaration (and it is the only which has void as return type parameter): " || execution(public void net.mansion.redirect.impl.engine.web.RedirectProcessorServlet.doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse))"
thanks for testing that so quickly. I'll probably refine it a bit and see if I can squeeze it into 1.6.9 final release. I just have to think through any cases that might be adversely affected. oh and i'll fix the void case too.
change should make it into 1.6.9.RC2, available this week
1.6.9.RC2 is now available for download if you want to try it out.
I am using aspectjweaver-1.6.11.jar. my aop.xml has <concrete-aspect name="auditInventory" extends="com.a.b.AbstractAuditAspect"> <pointcut name="methodToNotify" expression="execution(public * com.z.NotificationThread.run(..)) || execution(public * com.m.NotifyAuditFramework.notifyFw(..))"/> </concrete-aspect> I get error: Dec 20, 2013 12:51:19 PM org.aspectj.weaver.tools.Jdk14Trace error SEVERE: Unable to find class 'auditInventory' in repository java.lang.ClassNotFoundException: auditInventory not found - unable to determine URL at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292) at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:402) at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:376) at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:111) at org.aspectj.weaver.World.resolveToReferenceType(World.java:467) at org.aspectj.weaver.World.resolve(World.java:308) at org.aspectj.weaver.World.resolve(World.java:218) at org.aspectj.weaver.UnresolvedType.resolve(UnresolvedType.java:593) at org.aspectj.weaver.ResolvedMemberImpl.getSourceContext(ResolvedMemberImpl.java:608) at org.aspectj.weaver.bcel.BcelField.unpackAttributes(BcelField.java:80) at org.aspectj.weaver.bcel.BcelField.<init>(BcelField.java:73) at org.aspectj.weaver.bcel.LazyClassGen.addField(LazyClassGen.java:1439) at org.aspectj.weaver.bcel.LazyClassGen.addField(LazyClassGen.java:1484) at org.aspectj.weaver.bcel.BcelPerClauseAspectAdder.generatePerClauseMembers(BcelPerClauseAspectAdder.java:166) at org.aspectj.weaver.bcel.BcelPerClauseAspectAdder.doMunge(BcelPerClauseAspectAdder.java:96) at org.aspectj.weaver.bcel.BcelPerClauseAspectAdder.forceMunge(BcelPerClauseAspectAdder.java:68) at org.aspectj.weaver.loadtime.ConcreteAspectCodeGen.getBytes(ConcreteAspectCodeGen.java:467) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:495) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:290) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:176) at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:271) at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:276) at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:254) at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:90) at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54) at sun.instrument.TransformerManager.transform(Unknown Source) at sun.instrument.InstrumentationImpl.transform(Unknown Source) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.springframework.util.ClassUtils.forName(ClassUtils.java:257) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408) at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1256) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1227) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1304) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:315) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:394) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:594) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1654) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
My bad. I need to have concrete class in place of auditInventory. I have fixed that problem but I still getting Dec 20, 2013 1:23:12 PM org.aspectj.weaver.tools.Jdk14Trace error SEVERE: Unable to find class 'String' in repository java.lang.ClassNotFoundException: String not found - unable to determine URL at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292) at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:402) at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:376) at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:111) at org.aspectj.weaver.World.resolveToReferenceType(World.java:467) at org.aspectj.weaver.World.resolve(World.java:308) at org.aspectj.weaver.patterns.WildTypePattern.lookupTypeInWorld(WildTypePattern.java:794) at org.aspectj.weaver.patterns.WildTypePattern.lookupTypeInWorldIncludingPrefixes(WildTypePattern.java:776) at org.aspectj.weaver.patterns.WildTypePattern.resolveBindingsFromFullyQualifiedTypeName(WildTypePattern.java:741) at org.aspectj.weaver.patterns.WildTypePattern.resolveBindings(WildTypePattern.java:676) at org.aspectj.weaver.patterns.TypePatternList.resolveBindings(TypePatternList.java:439) at org.aspectj.weaver.patterns.SignaturePattern.resolveBindings(SignaturePattern.java:86) at org.aspectj.weaver.patterns.KindedPointcut.resolveBindings(KindedPointcut.java:353) at org.aspectj.weaver.patterns.Pointcut.resolve(Pointcut.java:189) at org.aspectj.weaver.bcel.AtAjAttributes$LazyResolvedPointcutDefinition.getPointcut(AtAjAttributes.java:1879) at org.aspectj.weaver.patterns.ReferencePointcut.concretize1(ReferencePointcut.java:359) at org.aspectj.weaver.patterns.Pointcut.concretize(Pointcut.java:229) at org.aspectj.weaver.patterns.Pointcut.concretize(Pointcut.java:211) at org.aspectj.weaver.Advice.concretize(Advice.java:396) at org.aspectj.weaver.bcel.BcelAdvice.concretize(BcelAdvice.java:110) at org.aspectj.weaver.CrosscuttingMembers.addShadowMunger(CrosscuttingMembers.java:98) at org.aspectj.weaver.CrosscuttingMembers.addShadowMungers(CrosscuttingMembers.java:90) at org.aspectj.weaver.ResolvedType.collectCrosscuttingMembers(ResolvedType.java:749) at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:85) at org.aspectj.weaver.CrosscuttingMembersSet.addOrReplaceAspect(CrosscuttingMembersSet.java:69) at org.aspectj.weaver.bcel.BcelWeaver.addLibraryAspect(BcelWeaver.java:202) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerAspects(ClassLoaderWeavingAdaptor.java:466) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.registerDefinitions(ClassLoaderWeavingAdaptor.java:290) at org.aspectj.weaver.loadtime.ClassLoaderWeavingAdaptor.initialize(ClassLoaderWeavingAdaptor.java:176) at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.initialize(Aj.java:271) at org.aspectj.weaver.loadtime.Aj$ExplicitlyInitializedClassLoaderWeavingAdaptor.getWeavingAdaptor(Aj.java:276) at org.aspectj.weaver.loadtime.Aj$WeaverContainer.getWeaver(Aj.java:254) at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:90) at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54) at sun.instrument.TransformerManager.transform(Unknown Source) at sun.instrument.InstrumentationImpl.transform(Unknown Source) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559) at org.springframework.util.ClassUtils.forName(ClassUtils.java:257) at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:408) at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1256) at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1227) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:576) at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1304) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:315) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:394) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:594) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407) at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4887) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5381) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:977) at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1654) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)