allows to use a custom xbean filter to filter classes + exposing the finder from the web lifecycle
git-svn-id: https://svn.apache.org/repos/asf/openwebbeans/trunk@1765968 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
index bde24ce..9e79551 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/AbstractMetaDataDiscovery.java
@@ -35,6 +35,7 @@
import org.apache.webbeans.util.WebBeansUtil;
import org.apache.xbean.finder.AnnotationFinder;
import org.apache.xbean.finder.ClassLoaders;
+import org.apache.xbean.finder.filter.Filter;
import java.io.IOException;
import java.lang.annotation.Annotation;
@@ -111,7 +112,8 @@
beanArchiveService = webBeansContext.getBeanArchiveService();
}
- archive = new CdiArchive(beanArchiveService, WebBeansUtil.getCurrentClassLoader(), getBeanDeploymentUrls());
+ final Filter userFilter = webBeansContext.getService(Filter.class);
+ archive = new CdiArchive(beanArchiveService, WebBeansUtil.getCurrentClassLoader(), getBeanDeploymentUrls(), userFilter);
finder = new OwbAnnotationFinder(archive);
return finder;
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java
index b679166..d0a13e4 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/BeanArchiveFilter.java
@@ -31,13 +31,15 @@
{
private final BeanArchiveInformation beanArchiveInfo;
private final boolean scanNone;
+ private final Filter userFilter;
private List<String> urlClasses;
- public BeanArchiveFilter(BeanArchiveInformation beanArchiveInfo, List<String> urlClasses)
+ public BeanArchiveFilter(BeanArchiveInformation beanArchiveInfo, List<String> urlClasses, Filter userFilter)
{
this.beanArchiveInfo = beanArchiveInfo;
this.urlClasses = urlClasses;
+ this.userFilter = userFilter;
BeanDiscoveryMode discoveryMode = beanArchiveInfo.getBeanDiscoveryMode();
scanNone = BeanDiscoveryMode.NONE.equals(discoveryMode);
@@ -51,13 +53,13 @@
return false;
}
- if (beanArchiveInfo.isClassExcluded(name))
+ if ((userFilter != null && !userFilter.accept(name)) || beanArchiveInfo.isClassExcluded(name))
{
return false;
}
- urlClasses.add(name);
- return true;
+ urlClasses.add(name);
+ return true;
}
}
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java
index f18b2df..b0d0fec 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/corespi/scanner/xbean/CdiArchive.java
@@ -24,6 +24,7 @@
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;
@@ -51,7 +52,8 @@
private final Archive delegate;
- public CdiArchive(BeanArchiveService beanArchiveService, final ClassLoader loader, final Map<String, URL> urls)
+ public CdiArchive(BeanArchiveService beanArchiveService, final ClassLoader loader, final Map<String, URL> urls,
+ final Filter userFilter)
{
final Collection<Archive> archives = new ArrayList<Archive>();
for (final URL url : urls.values())
@@ -60,7 +62,7 @@
BeanArchiveInformation beanArchiveInfo = beanArchiveService.getBeanArchiveInformation(url);
final Archive archive = new FilteredArchive(ClasspathArchive.archive(loader, url),
- new BeanArchiveFilter(beanArchiveInfo, urlClasses));
+ new BeanArchiveFilter(beanArchiveInfo, urlClasses, userFilter));
classesByUrl.put(url.toExternalForm(), new FoundClasses(url, urlClasses, beanArchiveInfo));
archives.add(archive);
diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java b/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
index ee93a3f..4e4a796 100644
--- a/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
+++ b/webbeans-web/src/main/java/org/apache/webbeans/web/lifecycle/WebContainerLifecycle.java
@@ -75,7 +75,6 @@
this.logger = WebBeansLoggerFacade.getLogger(WebContainerLifecycle.class);
}
-
/**
* {@inheritDoc}
*/
diff --git a/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java b/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java
index 9264090..44f96c9 100644
--- a/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java
+++ b/webbeans-web/src/main/java/org/apache/webbeans/web/scanner/WebScannerService.java
@@ -19,8 +19,8 @@
package org.apache.webbeans.web.scanner;
import org.apache.webbeans.corespi.scanner.AbstractMetaDataDiscovery;
+import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder;
import org.apache.webbeans.logger.WebBeansLoggerFacade;
-import org.apache.webbeans.spi.BeanArchiveService;
import org.apache.webbeans.util.ExceptionUtil;
import org.apache.webbeans.util.WebBeansUtil;
@@ -39,7 +39,6 @@
private static final Logger logger = WebBeansLoggerFacade.getLogger(WebScannerService.class);
protected ServletContext servletContext = null;
- private BeanArchiveService beanArchiveService;
public WebScannerService()
{
@@ -62,6 +61,11 @@
registerBeanArchives(loader);
}
+ public OwbAnnotationFinder getFinder()
+ {
+ return finder;
+ }
+
/**
* Returns the web application class path if it contains
* a beans.xml marker file.