You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/09/26 16:24:21 UTC

tomee git commit: TOMEE-1944 --classes-filter for tomee embedded

Repository: tomee
Updated Branches:
  refs/heads/master 40794d0d9 -> 920f6722a


TOMEE-1944 --classes-filter for tomee embedded


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/920f6722
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/920f6722
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/920f6722

Branch: refs/heads/master
Commit: 920f6722a2c799e754dd2876e7465f9403643d37
Parents: 40794d0
Author: rmannibucau <rm...@apache.org>
Authored: Mon Sep 26 18:24:05 2016 +0200
Committer: rmannibucau <rm...@apache.org>
Committed: Mon Sep 26 18:24:05 2016 +0200

----------------------------------------------------------------------
 .../apache/tomee/embedded/Configuration.java    | 24 ++++++++++++++++++++
 .../org/apache/tomee/embedded/Container.java    |  8 +++++--
 .../java/org/apache/tomee/embedded/Main.java    | 10 ++++++++
 3 files changed, 40 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/920f6722/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
index 5e6843b..e5b62fe 100644
--- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
+++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Configuration.java
@@ -20,6 +20,7 @@ import org.apache.catalina.Realm;
 import org.apache.catalina.connector.Connector;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.util.NetworkUtil;
+import org.apache.xbean.finder.filter.Filter;
 import org.apache.xbean.recipe.ObjectRecipe;
 
 import java.io.File;
@@ -70,6 +71,8 @@ public class Configuration {
 
     private boolean http2;
 
+    private Filter classesFilter;
+
     private final Collection<Connector> connectors = new ArrayList<>();
 
     /**
@@ -175,6 +178,14 @@ public class Configuration {
             if (tempDir != null) {
                 setTempDir(tempDir);
             }
+            final String classesFilterType = config.getProperty("classesFilter");
+            if (classesFilterType != null) {
+                try {
+                    setClassesFilter(Filter.class.cast(Thread.currentThread().getContextClassLoader().loadClass(classesFilterType).newInstance()));
+                } catch (final InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }
             final String conf = config.getProperty("conf");
             if (conf != null) {
                 setConf(conf);
@@ -536,6 +547,19 @@ public class Configuration {
         this.conf = conf;
     }
 
+    public void setClassesFilter(final Filter filter) {
+        this.classesFilter = filter;
+    }
+
+    public Configuration classesFilter(final Filter filter) {
+        setClassesFilter(filter);
+        return this;
+    }
+
+    public Filter getClassesFilter() {
+        return classesFilter;
+    }
+
     public interface ConfigurationCustomizer {
         void customize(Configuration configuration);
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/920f6722/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
index a3c521d..d9cd483 100644
--- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
+++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Container.java
@@ -85,6 +85,7 @@ import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.ResourceFinder;
 import org.apache.xbean.finder.UrlSet;
+import org.apache.xbean.finder.filter.Filter;
 import org.apache.xbean.finder.filter.Filters;
 import org.apache.xbean.recipe.ObjectRecipe;
 import org.codehaus.swizzle.stream.ReplaceStringsInputStream;
@@ -242,12 +243,15 @@ public class Container implements AutoCloseable {
         final AnnotationFinder finder;
         try {
             final String filterContainerClasses = SystemInstance.get().getProperty("tomee.embedded.filter-container-classes");
+            Filter filter = configuration.getClassesFilter();
+            if (filter == null && (jarList.size() <= 4 || "true".equalsIgnoreCase(filterContainerClasses))) {
+                filter = new ContainerClassesFilter(configuration.getProperties());
+            }
             finder = new FinderFactory.OpenEJBAnnotationFinder(
                     // skip container classes in scanning for shades
                     new WebappAggregatedArchive(webModule, jarList,
                             // see org.apache.openejb.config.DeploymentsResolver.ClasspathSearcher.cleanUpUrlSet()
-                            jarList.size() <= 4 || "true".equalsIgnoreCase(filterContainerClasses) ?
-                                    new ContainerClassesFilter(configuration.getProperties()) /* shade */ : null))
+                            filter))
                     .link();
             SystemInstance.get().fireEvent(new TomEEEmbeddedScannerCreated(finder));
             webModule.setFinder(finder);

http://git-wip-us.apache.org/repos/asf/tomee/blob/920f6722/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
index fc497ef..0cc7589 100644
--- a/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
+++ b/tomee/tomee-embedded/src/main/java/org/apache/tomee/embedded/Main.java
@@ -26,6 +26,7 @@ import org.apache.commons.cli.PosixParser;
 import org.apache.openejb.loader.ProvisioningUtil;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.tomee.embedded.component.TomEEEmbeddedArgs;
+import org.apache.xbean.finder.filter.Filter;
 
 import java.io.Closeable;
 import java.io.File;
@@ -74,6 +75,7 @@ public class Main {
     public static final String PRE_TASK = "pre-task";
     public static final String INTERACTIVE = "interactive";
     public static final String CLASSPATH_CONFIGURATION = "classpath-configuration";
+    public static final String CLASSES_FILTER = "classes-filter";
     public static final String HELP = "help";
 
     public static void main(final String[] args) {
@@ -259,6 +261,7 @@ public class Main {
         options.addOption("i", INTERACTIVE, false, "should tomee start and wait for SIGTERM signal or wait for 'exit' to be entered");
         options.addOption(null, CLASSPATH_CONFIGURATION, true, "a properties file containing the configuration to load");
         options.addOption(null, SINGLE_CLASSLOADER, false, "if the application should use the same classloader as the boot one");
+        options.addOption(null, CLASSES_FILTER, true, "A custom implementation of a xbean filter to exclude classes to not scan");
         options.addOption("h", HELP, false, "show help");
         return options;
     }
@@ -283,6 +286,13 @@ public class Main {
         if (args.hasOption(SIMPLE_LOG)) {
             config.property("openejb.jul.forceReload", "true");
         }
+        if (args.hasOption(CLASSES_FILTER)) {
+            try {
+                config.classesFilter(Filter.class.cast(Thread.currentThread().getContextClassLoader().loadClass(args.getOptionValue(CLASSES_FILTER)).newInstance()));
+            } catch (final InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
         if (args.hasOption(PROPERTY)) {
             for (final String opt : args.getOptionValues(PROPERTY)) {
                 final int sep = opt.indexOf('=');