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

Reply via email to