yep, as soon as 1.2.2 is released I commit my fixes to get it integrated with tomee (tcks are not broken :)) a,d then we see how to share the common part 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 10:45 GMT+01:00 Mark Struberg <[email protected]>: > I thought about that as well. I need to dig a bit into the tomee codebase. I > used quite a few tricks to get a good performance. > What to do next? > I'd say we focus on the owb-1.2.2 release for tomee 1.6.1 and then continue > with integrating owb-2.0.0 in tomee. > > LieGrue, > strub > > > > > > On Monday, 10 February 2014, 8:35, Romain Manni-Bucau <[email protected]> > wrote: > > 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); >>>>>> >>>>>> >>>> >>>> >> >>
