diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-07-04 16:21:28 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-07-04 16:21:28 +0000 |
commit | b4f758f88e8c97be870ba86080d7f0adb6dafb65 (patch) | |
tree | 69d244ad2a21f110195a857b2f0d617efabc4f8a /branches/sca-java-1.x/modules/node-impl/src/main/java | |
parent | 561abc6e8fd5b3a5dc860dbe8f9a5d4f91b8c807 (diff) |
TUSCANY-2984 - Adding prioritization while starting module activators to allow module activators dependencies to start first
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@791146 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-java-1.x/modules/node-impl/src/main/java')
-rw-r--r-- | branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java b/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java index 349548c08c..bc96224224 100644 --- a/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java +++ b/branches/sca-java-1.x/modules/node-impl/src/main/java/org/apache/tuscany/sca/node/impl/RuntimeBootStrapper.java @@ -21,6 +21,8 @@ package org.apache.tuscany.sca.node.impl; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -320,8 +322,9 @@ public class RuntimeBootStrapper { try { Set<ServiceDeclaration> moduleActivators = ServiceDiscovery.getInstance().getServiceDeclarations(ModuleActivator.class); + List<ServiceDeclaration> orderedModuleActivators = sort(moduleActivators); Set<String> moduleClasses = new HashSet<String>(); - for (ServiceDeclaration moduleDeclarator : moduleActivators) { + for (ServiceDeclaration moduleDeclarator : orderedModuleActivators) { if (moduleClasses.contains(moduleDeclarator.getClassName())) { continue; } @@ -398,4 +401,27 @@ public class RuntimeBootStrapper { return registry; } + @SuppressWarnings("unchecked") + private static List<ServiceDeclaration> sort(Set<ServiceDeclaration> servicesDeclaration) { + ServiceDeclaration[] servicesArray = new ServiceDeclaration[servicesDeclaration.size()]; + servicesArray = (ServiceDeclaration[])servicesDeclaration.toArray(servicesArray); + Arrays.sort(servicesArray, new Comparator() { + public int compare(final Object xObj, final Object yObj) { + String xPriority = ((ServiceDeclaration) xObj).getAttributes().get("priority"); + String yPriority = ((ServiceDeclaration) yObj).getAttributes().get("priority"); + + long x = 0, y = 0; + if (xPriority != null && xPriority.length() > 0) { + x = Long.parseLong(xPriority); + } + + if (yPriority != null && yPriority.length() > 0) { + y = Long.parseLong(yPriority); + } + + return x > y ? 1 : -1; + } + }); + return Arrays.asList(servicesArray); + } } |