Repository: tomee Updated Branches: refs/heads/master d81d45b6c -> c732d2fdd
TOMEE-1904 ensure cdi extensions can be sorted Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c732d2fd Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c732d2fd Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c732d2fd Branch: refs/heads/master Commit: c732d2fdd3109c145e56938c7eaf8a906b3aa4cc Parents: d81d45b Author: Romain manni-Bucau <rmannibu...@gmail.com> Authored: Tue Aug 16 09:54:10 2016 +0200 Committer: Romain manni-Bucau <rmannibu...@gmail.com> Committed: Tue Aug 16 09:54:10 2016 +0200 ---------------------------------------------------------------------- .../openejb/cdi/OptimizedLoaderService.java | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/c732d2fd/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java index bfa5736..93f1645 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/OptimizedLoaderService.java @@ -36,6 +36,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.Enumeration; import java.util.Iterator; import java.util.List; @@ -111,6 +112,28 @@ public class OptimizedLoaderService implements LoaderService { } } } + + if ("true".equals(OptimizedLoaderService.this.config.getProperty("openejb.cdi.extensions.sorted", + SystemInstance.get().getProperty("openejb.cdi.extensions.sorted")))) { + Collections.sort(list, new Comparator<Extension>() { + @Override + public int compare(final Extension o1, final Extension o2) { + final int val1 = getVal(o1); + final int val2 = getVal(o1); + if (val1 == val2) { + return o1.getClass().getName().compareTo(o2.getClass().getName()); + } + return val1 - val2; + } + + private int getVal(final Extension o1) { + final String key = "openejb.cdi.extensions." + o1.getClass().getName() + ".ordinal"; + final String config = OptimizedLoaderService.this.config.getProperty(key, SystemInstance.get().getProperty(key)); + return config == null ? 0 : Integer.parseInt(config.trim()); + } + }); + } + return list; }