This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openwebbeans-meecrowave.git
commit ed56bb6e03d0d7bb015b7fc24f1a08299093f8d8 Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Wed Mar 17 11:06:10 2021 +0100 [MEECROWAVE-280] enable to run without default scanner disabling features we can't support --- .../meecrowave/tomcat/MeecrowaveContextConfig.java | 42 ++++++++++++---------- .../apache/meecrowave/tomcat/OWBJarScanner.java | 7 +++- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java index ccbb43b..3b13595 100644 --- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java +++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java @@ -58,6 +58,7 @@ import org.apache.tomcat.util.descriptor.web.WebXml; 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.spi.ScannerService; import org.xml.sax.InputSource; public class MeecrowaveContextConfig extends ContextConfig { @@ -103,26 +104,29 @@ public class MeecrowaveContextConfig extends ContextConfig { final ClassLoader old = thread.getContextClassLoader(); thread.setContextClassLoader(loader); try { - final OWBTomcatWebScannerService scannerService = OWBTomcatWebScannerService.class.cast(WebBeansContext.getInstance().getScannerService()); - scannerService.setFilter(ofNullable(context.getJarScanner()).map(JarScanner::getJarScanFilter).orElse(null), context.getServletContext()); - scannerService.setDocBase(context.getDocBase()); - scannerService.setShared(configuration.getSharedLibraries()); - if (configuration.getWatcherBouncing() > 0) { // note that caching should be disabled with this config in most of the times - watcher = new ReloadOnChangeController(context, configuration.getWatcherBouncing()); - scannerService.setFileVisitor(f -> watcher.register(f)); + final ScannerService service = WebBeansContext.getInstance().getScannerService(); + if (OWBTomcatWebScannerService.class.isInstance(service)) { + final OWBTomcatWebScannerService scannerService = OWBTomcatWebScannerService.class.cast(service); + scannerService.setFilter(ofNullable(context.getJarScanner()).map(JarScanner::getJarScanFilter).orElse(null), context.getServletContext()); + scannerService.setDocBase(context.getDocBase()); + scannerService.setShared(configuration.getSharedLibraries()); + if (configuration.getWatcherBouncing() > 0) { // note that caching should be disabled with this config in most of the times + watcher = new ReloadOnChangeController(context, configuration.getWatcherBouncing()); + scannerService.setFileVisitor(f -> watcher.register(f)); + } + scannerService.scan(); + finder = scannerService.getFinder(); + finder.link(); + final CdiArchive archive = CdiArchive.class.cast(finder.getArchive()); + Stream.of(WebServlet.class, WebFilter.class, WebListener.class) + .forEach(marker -> finder.findAnnotatedClasses(marker).stream() + .filter(c -> !Modifier.isAbstract(c.getModifiers()) && Modifier.isPublic(c.getModifiers())) + .forEach(webComponent -> webClasses.computeIfAbsent( + archive.classesByUrl().entrySet().stream() + .filter(e -> e.getValue().getClassNames().contains(webComponent.getName())) + .findFirst().get().getKey(), k -> new HashSet<>()) + .add(webComponent))); } - scannerService.scan(); - finder = scannerService.getFinder(); - finder.link(); - final CdiArchive archive = CdiArchive.class.cast(finder.getArchive()); - Stream.of(WebServlet.class, WebFilter.class, WebListener.class) - .forEach(marker -> finder.findAnnotatedClasses(marker).stream() - .filter(c -> !Modifier.isAbstract(c.getModifiers()) && Modifier.isPublic(c.getModifiers())) - .forEach(webComponent -> webClasses.computeIfAbsent( - archive.classesByUrl().entrySet().stream() - .filter(e -> e.getValue().getClassNames().contains(webComponent.getName())) - .findFirst().get().getKey(), k -> new HashSet<>()) - .add(webComponent))); } finally { thread.setContextClassLoader(old); } diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java index 3afcb8a..3263951 100644 --- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java +++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java @@ -28,6 +28,7 @@ import org.apache.tomcat.util.scan.JarFactory; 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.spi.ScannerService; import org.apache.webbeans.web.scanner.WebScannerService; import org.apache.xbean.finder.util.Files; @@ -45,7 +46,11 @@ public class OWBJarScanner implements JarScanner { switch (jarScanType) { case PLUGGABILITY: final WebBeansContext owb = WebBeansContext.getInstance(); - final OwbAnnotationFinder finder = WebScannerService.class.cast(owb.getScannerService()).getFinder(); + final ScannerService scannerService = owb.getScannerService(); + if (!WebScannerService.class.isInstance(scannerService)) { + return; + } + final OwbAnnotationFinder finder = WebScannerService.class.cast(scannerService).getFinder(); if (finder == null) { return; }