From b4f758f88e8c97be870ba86080d7f0adb6dafb65 Mon Sep 17 00:00:00 2001 From: lresende Date: Sat, 4 Jul 2009 16:21:28 +0000 Subject: 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 --- .../tuscany/sca/node/impl/RuntimeBootStrapper.java | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'branches/sca-java-1.x/modules/node-impl/src') 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 moduleActivators = ServiceDiscovery.getInstance().getServiceDeclarations(ModuleActivator.class); + List orderedModuleActivators = sort(moduleActivators); Set moduleClasses = new HashSet(); - 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 sort(Set 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); + } } -- cgit v1.2.3