wonder if we could merge somehow openejb and openwebbeans scanning filtering. OpenEJB/TomEE one is really nice and efficient (even if sometimes code can seem a bit rough).
Maybe something to finally put in XBean? Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau 2014-02-10 8:27 GMT+01:00 Mark Struberg <[email protected]>: > It's basically a complete re-implementation of our scanning mechanism. > We still provide and consume the same ScannerService SPI yet though. > > But I'm about to change this and try to introduce something more smart > probably. Still thinking about it. > > LieGrue, > strub > > > > > > On Monday, 10 February 2014, 8:24, Romain Manni-Bucau <[email protected]> > wrote: > > Great, got a doubt after months without touching it, thks :) >>Romain Manni-Bucau >>Twitter: @rmannibucau >>Blog: http://rmannibucau.wordpress.com/ >>LinkedIn: http://fr.linkedin.com/in/rmannibucau >>Github: https://github.com/rmannibucau >> >> >> >>2014-02-10 8:09 GMT+01:00 Mark Struberg <[email protected]>: >>> I also did test this on windows and it works. >>> Reason is that thi are URL.toExternalPath, which always use forward slashes >>> on all platforms to my knowledge. >>> >>> Now we have no single new URL(...) anymore in our code. >>> >>> LieGrue, >>> strub >>> >>> >>> >>> >>> >>> On Monday, 10 February 2014, 7:07, Romain Manni-Bucau >>> <[email protected]> wrote: >>> >>> Hi Mark >>>> >>>>Will it work on windows or /xxx will not match? >>>>---------- Message transféré ---------- >>>>De : <[email protected]> >>>>Date : 9 févr. 2014 23:23 >>>>Objet : svn commit: r1566452 - in /openwebbeans/trunk: >>>>webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/ >>>>webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/ >>>>webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/test/ webbe... >>>>À : <[email protected]> >>>> >>>>Author: struberg >>>>Date: Sun Feb 9 22:23:28 2014 >>>>New Revision: 1566452 >>>> >>>>URL: http://svn.apache.org/r1566452 >>>>Log: >>>>OWB-928 improve scanning performance >>>> >>>>We now take the annotation information from ASM and don't do a >>>>loadClass...getAnnotations anymore >>>> >>>>Added: >>>> >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/OwbAnnotationFinder.java >>>>Modified: >>>> >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java >>>> >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java >>>> >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java >>>> >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/test/OpenWebBeansTestMetaDataDiscoveryService.java >>>> >>>>openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java >>>> >>>>Modified: >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java >>>>URL: >>>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java?rev=1566452&r1=1566451&r2=1566452&view=diff >>>>============================================================================== >>>>--- >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java >>>>(original) >>>>+++ >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java >>>>Sun Feb 9 22:23:28 2014 >>>>@@ -23,10 +23,12 @@ import org.apache.webbeans.config.OWBLog >>>>import org.apache.webbeans.config.OpenWebBeansConfiguration; >>>>import org.apache.webbeans.config.WebBeansContext; >>>>import org.apache.webbeans.corespi.scanner.xbean.CdiArchive; >>>>+import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder; >>>>import org.apache.webbeans.exception.WebBeansDeploymentException; >>>>import org.apache.webbeans.logger.WebBeansLoggerFacade; >>>>import org.apache.webbeans.spi.BDABeansXmlScanner; >>>>import org.apache.webbeans.spi.BeanArchiveService; >>>>+import org.apache.webbeans.spi.BeanArchiveService.BeanDiscoveryMode; >>>>import org.apache.webbeans.spi.ScannerService; >>>>import org.apache.webbeans.util.ClassUtil; >>>>import org.apache.webbeans.util.UrlSet; >>>>@@ -35,6 +37,7 @@ import org.apache.xbean.finder.Annotatio >>>>import org.apache.xbean.finder.ClassLoaders; >>>> >>>>import java.io.IOException; >>>>+import java.lang.annotation.Annotation; >>>>import java.net.URL; >>>>import java.util.Collections; >>>>import java.util.Enumeration; >>>>@@ -75,11 +78,16 @@ public abstract class AbstractMetaDataDi >>>> >>>> protected ClassLoader loader; >>>> protected CdiArchive archive; >>>>- protected AnnotationFinder finder; >>>>+ protected OwbAnnotationFinder finder; >>>> protected boolean isBDAScannerEnabled = false; >>>> protected BDABeansXmlScanner bdaBeansXmlScanner; >>>>+ protected final WebBeansContext webBeansContext; >>>> >>>> >>>>+ protected AbstractMetaDataDiscovery() >>>>+ { >>>>+ webBeansContext = WebBeansContext.getInstance(); >>>>+ } >>>> >>>> protected AnnotationFinder initFinder() >>>> { >>>>@@ -88,14 +96,13 @@ public abstract class AbstractMetaDataDi >>>> return finder; >>>> } >>>> >>>>- WebBeansContext webBeansContext = WebBeansContext.getInstance(); >>>> if (beanArchiveService == null) >>>> { >>>> beanArchiveService = webBeansContext.getBeanArchiveService(); >>>> } >>>> >>>>- archive = new CdiArchive(webBeansContext.getBeanManagerImpl(), >>>>beanArchiveService, WebBeansUtil.getCurrentClassLoader(), >>>>getBeanDeploymentUrls()); >>>>- finder = new AnnotationFinder(archive); >>>>+ archive = new CdiArchive(beanArchiveService, >>>>WebBeansUtil.getCurrentClassLoader(), getBeanDeploymentUrls()); >>>>+ finder = new OwbAnnotationFinder(archive); >>>> >>>> return finder; >>>> } >>>>@@ -250,6 +257,16 @@ public abstract class AbstractMetaDataDi >>>> path.contains("/idea_rt") || >>>> path.contains("/eclipse") || >>>> path.contains("/jcommander") || >>>>+ path.contains("/tomcat") || >>>>+ path.contains("/catalina") || >>>>+ path.contains("/jasper") || >>>>+ path.contains("/jsp-api") || >>>>+ path.contains("/myfaces-") || >>>>+ path.contains("/servlet-api") || >>>>+ path.contains("/javax") || >>>>+ path.contains("/annotation-api") || >>>>+ path.contains("/el-api") || >>>>+ path.contains("/mojarra") || >>>> path.contains("/openwebbeans-")) >>>> { >>>> //X TODO this should be much more actually >>>>@@ -316,7 +333,7 @@ public abstract class AbstractMetaDataDi >>>> // and also scan the bean archive! >>>> if (beanArchiveService == null) >>>> { >>>>- WebBeansContext webBeansContext = >>>>WebBeansContext.getInstance(); >>>>+ >>>> beanArchiveService = webBeansContext.getBeanArchiveService(); >>>> } >>>> >>>>@@ -330,36 +347,94 @@ public abstract class AbstractMetaDataDi >>>> public Set<Class<?>> getBeanClasses() >>>> { >>>> final Set<Class<?>> classSet = new HashSet<Class<?>>(); >>>>- for(String str : archive.getClasses()) >>>>+ for (CdiArchive.FoundClasses foundClasses : >>>>archive.classesByUrl().values()) >>>> { >>>>- try >>>>+ boolean scanModeAnnotated = >>>>BeanDiscoveryMode.ANNOTATED.equals(foundClasses.getBeanArchiveInfo().getBeanDiscoveryMode()); >>>>+ for(String className : foundClasses.getClassNames()) >>>> { >>>>- Class<?> clazz = ClassUtil.getClassFromName(str); >>>>- if (clazz != null) >>>>+ try >>>> { >>>>+ if (scanModeAnnotated) >>>>+ { >>>>+ // in this case we need to find out whether we >>>>should keep this class in the Archive >>>>+ AnnotationFinder.ClassInfo classInfo = >>>>finder.getClassInfo(className); >>>>+ if (classInfo == null || >>>>!isBeanAnnotatedClass(classInfo)) >>>>+ { >>>>+ continue; >>>>+ } >>>>+ } >>>> >>>>- // try to provoke a NoClassDefFoundError exception >>>>which is thrown >>>>- // if some dependencies of the class are missing >>>>- clazz.getDeclaredFields(); >>>>- clazz.getDeclaredMethods(); >>>>+ Class<?> clazz = ClassUtil.getClassFromName(className); >>>>+ if (clazz != null) >>>>+ { >>>>+ >>>>+ // try to provoke a NoClassDefFoundError exception >>>>which is thrown >>>>+ // if some dependencies of the class are missing >>>>+ clazz.getDeclaredFields(); >>>>+ clazz.getDeclaredMethods(); >>>> >>>>- // we can add this class cause it has been loaded >>>>completely >>>>- classSet.add(clazz); >>>>+ // we can add this class cause it has been loaded >>>>completely >>>>+ classSet.add(clazz); >>>> >>>>+ } >>>> } >>>>- } >>>>- catch (NoClassDefFoundError e) >>>>- { >>>>- if (logger.isLoggable(Level.WARNING)) >>>>+ catch (NoClassDefFoundError e) >>>> { >>>>- logger.log(Level.WARNING, OWBLogConst.WARN_0018, new >>>>Object[] { str, e.toString() }); >>>>+ if (logger.isLoggable(Level.WARNING)) >>>>+ { >>>>+ logger.log(Level.WARNING, OWBLogConst.WARN_0018, >>>>new Object[] { className, e.toString() }); >>>>+ } >>>> } >>>> } >>>>+ >>>> } >>>> >>>> return classSet; >>>> } >>>> >>>>+ /** >>>>+ * This method is called for classes from bean archives with >>>>+ * bean-discovery-mode 'annotated'. >>>>+ * >>>>+ * This method is intended to be overwritten in integration scenarios >>>>and e.g. >>>>+ * allows to add other criterias for keeping the class. >>>>+ * >>>>+ * @param classInfo >>>>+ * @return true if this class should be kept and further get picked up >>>>as CDI Bean >>>>+ */ >>>>+ protected boolean isBeanAnnotatedClass(AnnotationFinder.ClassInfo >>>>classInfo) >>>>+ { >>>>+ // check whether this class has 'scope' annotations or a stereotype >>>>+ for (AnnotationFinder.AnnotationInfo annotationInfo : >>>>classInfo.getAnnotations()) >>>>+ { >>>>+ if (isBeanAnnotation(annotationInfo)) >>>>+ { >>>>+ return true; >>>>+ } >>>>+ } >>>>+ return false; >>>>+ } >>>>+ >>>>+ protected boolean isBeanAnnotation(AnnotationFinder.AnnotationInfo >>>>annotationInfo) >>>>+ { >>>>+ String annotationName = annotationInfo.getName(); >>>>+ >>>>+ // TODO add caches >>>>+ >>>>+ try >>>>+ { >>>>+ Class<? extends Annotation> annotationType = (Class<? extends >>>>Annotation>) WebBeansUtil.getCurrentClassLoader().loadClass(annotationName); >>>>+ boolean isBeanAnnotation = >>>>webBeansContext.getBeanManagerImpl().isScope(annotationType); >>>>+ isBeanAnnotation = isBeanAnnotation || >>>>webBeansContext.getBeanManagerImpl().isStereotype(annotationType); >>>>+ >>>>+ return isBeanAnnotation; >>>>+ } >>>>+ catch (ClassNotFoundException e) >>>>+ { >>>>+ return false; >>>>+ } >>>>+ } >>>>+ >>>> >>>> @Override >>>> public Set<URL> getBeanXmls() >>>> >>>>Modified: >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java >>>>URL: >>>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java?rev=1566452&r1=1566451&r2=1566452&view=diff >>>>============================================================================== >>>>--- >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java >>>>(original) >>>>+++ >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java >>>>Sun Feb 9 22:23:28 2014 >>>>@@ -18,11 +18,8 @@ >>>> */ >>>>package org.apache.webbeans.corespi.scanner.xbean; >>>> >>>>-import java.lang.annotation.Annotation; >>>>import java.util.List; >>>>-import java.util.Set; >>>> >>>>-import org.apache.webbeans.container.BeanManagerImpl; >>>>import org.apache.webbeans.spi.BeanArchiveService.BeanArchiveInformation; >>>>import org.apache.webbeans.spi.BeanArchiveService.BeanDiscoveryMode; >>>>import org.apache.xbean.finder.filter.Filter; >>>>@@ -32,28 +29,18 @@ import org.apache.xbean.finder.filter.Fi >>>> */ >>>>public class BeanArchiveFilter implements Filter >>>>{ >>>>- private final ClassLoader loader; >>>>- private final BeanManagerImpl beanManager; >>>> private final BeanArchiveInformation beanArchiveInfo; >>>>- private final boolean scanAll; >>>> private final boolean scanNone; >>>>- private final boolean scanAnnotated; >>>> >>>> private List<String> urlClasses; >>>>- private Set<String> allClasses; >>>> >>>>- public BeanArchiveFilter(ClassLoader loader, BeanManagerImpl >>>>beanManager, BeanArchiveInformation beanArchiveInfo, List<String> >>>>urlClasses, Set<String> allClasses) >>>>+ public BeanArchiveFilter(BeanArchiveInformation beanArchiveInfo, >>>>List<String> urlClasses) >>>> { >>>>- this.loader = loader; >>>>- this.beanManager = beanManager; >>>> this.beanArchiveInfo = beanArchiveInfo; >>>> this.urlClasses = urlClasses; >>>>- this.allClasses = allClasses; >>>> BeanDiscoveryMode discoveryMode = >>>>beanArchiveInfo.getBeanDiscoveryMode(); >>>> >>>>- scanAll = BeanDiscoveryMode.ALL.equals(discoveryMode); >>>> scanNone = BeanDiscoveryMode.NONE.equals(discoveryMode); >>>>- scanAnnotated = BeanDiscoveryMode.ANNOTATED.equals(discoveryMode); >>>> } >>>> >>>> @Override >>>>@@ -69,51 +56,8 @@ public class BeanArchiveFilter implement >>>> return false; >>>> } >>>> >>>>- if (scanAll) >>>>- { >>>>- urlClasses.add(name); >>>>- allClasses.add(name); >>>>- return true; >>>>- } >>>>- >>>>- if (scanAnnotated) >>>>- { >>>>- try >>>>- { >>>>- Class clazz = Class.forName(name, false, loader); >>>>- if (!hasScopeAnnotation(clazz.getAnnotations())) >>>>- { >>>>- return false; >>>>- } >>>>- } >>>>- catch (ClassNotFoundException cnfe) >>>>- { >>>>- // not a problem, just ignore this class >>>>- return false; >>>>- } >>>>- catch (NoClassDefFoundError ncdf) >>>>- { >>>>- // not a problem, just ignore this class >>>>- return false; >>>>- } >>>>- >>>> urlClasses.add(name); >>>>- allClasses.add(name); >>>> return true; >>>>- } >>>>- >>>>- return false; >>>> } >>>> >>>>- private boolean hasScopeAnnotation(Annotation[] annotations) >>>>- { >>>>- for (Annotation annotation : annotations) >>>>- { >>>>- if (beanManager.isScope(annotation.annotationType())) >>>>- { >>>>- return true; >>>>- } >>>>- } >>>>- return false; >>>>- } >>>>} >>>> >>>>Modified: >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java >>>>URL: >>>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java?rev=1566452&r1=1566451&r2=1566452&view=diff >>>>============================================================================== >>>>--- >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java >>>>(original) >>>>+++ >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java >>>>Sun Feb 9 22:23:28 2014 >>>>@@ -18,14 +18,12 @@ >>>> */ >>>>package org.apache.webbeans.corespi.scanner.xbean; >>>> >>>>-import org.apache.webbeans.container.BeanManagerImpl; >>>>import org.apache.webbeans.spi.BeanArchiveService; >>>>+import org.apache.webbeans.spi.BeanArchiveService.BeanArchiveInformation; >>>>import org.apache.xbean.finder.archive.Archive; >>>>-import org.apache.xbean.finder.archive.ClassesArchive; >>>>import org.apache.xbean.finder.archive.ClasspathArchive; >>>>import org.apache.xbean.finder.archive.CompositeArchive; >>>>import org.apache.xbean.finder.archive.FilteredArchive; >>>>-import org.apache.xbean.finder.filter.Filter; >>>> >>>>import java.io.IOException; >>>>import java.io.InputStream; >>>>@@ -33,11 +31,9 @@ import java.net.URL; >>>>import java.util.ArrayList; >>>>import java.util.Collection; >>>>import java.util.HashMap; >>>>-import java.util.HashSet; >>>>import java.util.Iterator; >>>>import java.util.List; >>>>import java.util.Map; >>>>-import java.util.Set; >>>> >>>>/** >>>> * this delegate pattern is interesting >>>>@@ -53,45 +49,26 @@ public class CdiArchive implements Archi >>>> */ >>>> private final Map<String, FoundClasses> classesByUrl = new >>>>HashMap<String, FoundClasses>(); >>>> >>>>- private final Set<String> allClasses = new HashSet<String>(); >>>> private final Archive delegate; >>>> >>>>- public CdiArchive(BeanManagerImpl beanManager, BeanArchiveService >>>>beanArchiveService, final ClassLoader loader, final Map<String, URL> urls) >>>>+ public CdiArchive(BeanArchiveService beanArchiveService, final >>>>ClassLoader loader, final Map<String, URL> urls) >>>> { >>>> final Collection<Archive> archives = new ArrayList<Archive>(); >>>> for (final URL url : urls.values()) >>>> { >>>> final List<String> urlClasses = new ArrayList<String>(); >>>> >>>>- BeanArchiveService.BeanArchiveInformation beanArchiveInfo = >>>>beanArchiveService.getBeanArchiveInformation(url); >>>>+ BeanArchiveInformation beanArchiveInfo = >>>>beanArchiveService.getBeanArchiveInformation(url); >>>> final Archive archive = new >>>>FilteredArchive(ClasspathArchive.archive(loader, url), >>>>- new BeanArchiveFilter(loader, beanManager, >>>>beanArchiveInfo, urlClasses, allClasses)); >>>>+ new BeanArchiveFilter(beanArchiveInfo, urlClasses)); >>>> >>>>- classesByUrl.put(url.toExternalForm(), new FoundClasses(url, >>>>urlClasses)); >>>>+ classesByUrl.put(url.toExternalForm(), new FoundClasses(url, >>>>urlClasses, beanArchiveInfo)); >>>> archives.add(archive); >>>> } >>>> >>>> delegate = new CompositeArchive(archives); >>>> } >>>> >>>>- public CdiArchive(final Collection<Class<?>> classList) >>>>- { >>>>- delegate = new FilteredArchive(new ClassesArchive(classList), new >>>>Filter() >>>>- { >>>>- @Override >>>>- public boolean accept(final String name) >>>>- { >>>>- allClasses.add(name); >>>>- return true; >>>>- } >>>>- }); >>>>- } >>>>- >>>>- public Set<String> getClasses() >>>>- { >>>>- return allClasses; >>>>- } >>>>- >>>> public Map<String, FoundClasses> classesByUrl() >>>> { >>>> return classesByUrl; >>>>@@ -119,11 +96,13 @@ public class CdiArchive implements Archi >>>> { >>>> private URL url; >>>> private Collection<String> classNames; >>>>+ private BeanArchiveInformation beanArchiveInfo; >>>> >>>>- public FoundClasses(URL url, Collection<String> classNames) >>>>+ public FoundClasses(URL url, Collection<String> classNames, >>>>BeanArchiveInformation beanArchiveInfo) >>>> { >>>> this.url = url; >>>> this.classNames = classNames; >>>>+ this.beanArchiveInfo = beanArchiveInfo; >>>> } >>>> >>>> public URL getUrl() >>>>@@ -131,6 +110,11 @@ public class CdiArchive implements Archi >>>> return url; >>>> } >>>> >>>>+ public BeanArchiveInformation getBeanArchiveInfo() >>>>+ { >>>>+ return beanArchiveInfo; >>>>+ } >>>>+ >>>> public Collection<String> getClassNames() >>>> { >>>> return classNames; >>>> >>>>Added: >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/OwbAnnotationFinder.java >>>>URL: >>>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/OwbAnnotationFinder.java?rev=1566452&view=auto >>>>============================================================================== >>>>--- >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/OwbAnnotationFinder.java >>>>(added) >>>>+++ >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/OwbAnnotationFinder.java >>>>Sun Feb 9 22:23:28 2014 >>>>@@ -0,0 +1,45 @@ >>>>+/* >>>>+ * Licensed to the Apache Software Foundation (ASF) under one >>>>+ * or more contributor license agreements. See the NOTICE file >>>>+ * distributed with this work for additional information >>>>+ * regarding copyright ownership. The ASF licenses this file >>>>+ * to you under the Apache License, Version 2.0 (the >>>>+ * "License"); you may not use this file except in compliance >>>>+ * with the License. You may obtain a copy of the License at >>>>+ * >>>>+ * http://www.apache.org/licenses/LICENSE-2.0 >>>>+ * >>>>+ * Unless required by applicable law or agreed to in writing, >>>>+ * software distributed under the License is distributed on an >>>>+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >>>>+ * KIND, either express or implied. See the License for the >>>>+ * specific language governing permissions and limitations >>>>+ * under the License. >>>>+ */ >>>>+package org.apache.webbeans.corespi.scanner.xbean; >>>>+ >>>>+import org.apache.xbean.finder.AnnotationFinder; >>>>+import org.apache.xbean.finder.archive.Archive; >>>>+ >>>>+/** >>>>+ * We just extend the default AnnotationFinder to get Access to the >>>>original ClassInfo >>>>+ * for not having to call loadClass so often... >>>>+ */ >>>>+public class OwbAnnotationFinder extends AnnotationFinder >>>>+{ >>>>+ public OwbAnnotationFinder(Archive archive, boolean >>>>checkRuntimeAnnotation) >>>>+ { >>>>+ super(archive, checkRuntimeAnnotation); >>>>+ } >>>>+ >>>>+ public OwbAnnotationFinder(Archive archive) >>>>+ { >>>>+ super(archive); >>>>+ } >>>>+ >>>>+ public ClassInfo getClassInfo(String className) >>>>+ { >>>>+ return classInfos.get(className); >>>>+ } >>>>+ >>>>+} >>>> >>>>Modified: >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/test/OpenWebBeansTestMetaDataDiscoveryService.java >>>>URL: >>>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/test/OpenWebBeansTestMetaDataDiscoveryService.java?rev=1566452&r1=1566451&r2=1566452&view=diff >>>>============================================================================== >>>>--- >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/test/OpenWebBeansTestMetaDataDiscoveryService.java >>>>(original) >>>>+++ >>>>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/lifecycle/test/OpenWebBeansTestMetaDataDiscoveryService.java >>>>Sun Feb 9 22:23:28 2014 >>>>@@ -19,14 +19,14 @@ >>>>package org.apache.webbeans.lifecycle.test; >>>> >>>>import org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery; >>>>-import org.apache.webbeans.corespi.scanner.xbean.CdiArchive; >>>>import org.apache.webbeans.exception.WebBeansDeploymentException; >>>>import org.apache.webbeans.util.Asserts; >>>>-import org.apache.xbean.finder.AnnotationFinder; >>>> >>>>import java.net.MalformedURLException; >>>>import java.net.URL; >>>>import java.util.Collection; >>>>+import java.util.HashSet; >>>>+import java.util.Set; >>>> >>>>/** >>>> * Used by each test. >>>>@@ -35,15 +35,18 @@ import java.util.Collection; >>>> */ >>>>public class OpenWebBeansTestMetaDataDiscoveryService extends >>>>AbstractMetaDataDiscovery >>>>{ >>>>+ >>>>+ private Collection<Class<?>> classes; >>>>+ >>>> public OpenWebBeansTestMetaDataDiscoveryService() >>>> { >>>>- >>>>+ super(); >>>> } >>>> >>>> @Override >>>> protected void configure() >>>> { >>>>- //Nothing we scan >>>>+ // Nothing to scan, we add all our stuff manually... >>>> } >>>> >>>> /** >>>>@@ -52,13 +55,15 @@ public class OpenWebBeansTestMetaDataDis >>>> */ >>>> public void deployClasses(Collection<Class<?>> classes) >>>> { >>>>- if(classes != null) >>>>- { >>>>- archive = new CdiArchive(classes); >>>>- finder = new AnnotationFinder(archive); >>>>- } >>>>+ this.classes = classes; >>>> } >>>>- >>>>+ >>>>+ @Override >>>>+ public Set<Class<?>> getBeanClasses() >>>>+ { >>>>+ return new HashSet<Class<?>>(classes); >>>>+ } >>>>+ >>>> /** >>>> * Those xmls will be scanned by container. >>>> * @param xmls beans xmls >>>>@@ -91,6 +96,5 @@ public class OpenWebBeansTestMetaDataDis >>>> >>>> addWebBeansXmlLocation(url); >>>> } >>>>- >>>> >>>>} >>>> >>>>Modified: >>>>openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java >>>>URL: >>>>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java?rev=1566452&r1=1566451&r2=1566452&view=diff >>>>============================================================================== >>>>--- >>>>openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java >>>>(original) >>>>+++ >>>>openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java >>>>Sun Feb 9 22:23:28 2014 >>>>@@ -18,14 +18,11 @@ >>>> */ >>>>package org.apache.webbeans.web.scanner; >>>> >>>>-import org.apache.webbeans.config.WebBeansContext; >>>>import org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery; >>>>-import org.apache.webbeans.corespi.scanner.xbean.CdiArchive; >>>>import org.apache.webbeans.logger.WebBeansLoggerFacade; >>>>import org.apache.webbeans.spi.BeanArchiveService; >>>>import org.apache.webbeans.util.ExceptionUtil; >>>>import org.apache.webbeans.util.WebBeansUtil; >>>>-import org.apache.xbean.finder.AnnotationFinder; >>>> >>>>import javax.servlet.ServletContext; >>>>import java.net.MalformedURLException; >>>>@@ -50,17 +47,6 @@ public class WebScannerService extends A >>>> } >>>> >>>> @Override >>>>- protected AnnotationFinder initFinder() >>>>- { >>>>- WebBeansContext webbeansContext = WebBeansContext.getInstance(); >>>>- beanArchiveService = webbeansContext.getBeanArchiveService(); >>>>- archive = new CdiArchive(webbeansContext.getBeanManagerImpl(), >>>>beanArchiveService, WebBeansUtil.getCurrentClassLoader(), >>>>getBeanDeploymentUrls()); >>>>- finder = new AnnotationFinder(archive); >>>>- >>>>- return finder; >>>>- } >>>>- >>>>- @Override >>>> public void init(Object context) >>>> { >>>> super.init(context); >>>> >>>> >> >>
