SMX4-161: The first spec implementation bundle deployed is always used instead of the last one
git-svn-id: https://svn.apache.org/repos/asf/servicemix/smx4/specs/trunk@719321 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java b/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java
index 7307497..8932c36 100644
--- a/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java
+++ b/locator/src/main/java/org/apache/servicemix/specs/locator/OsgiLocator.java
@@ -26,14 +26,14 @@
public class OsgiLocator {
- private static Map<String, Set<Callable<Class>>> factories;
+ private static Map<String, List<Callable<Class>>> factories;
private OsgiLocator() {
}
public static synchronized void unregister(String id, Callable<Class> factory) {
if (factories != null) {
- Set<Callable<Class>> l = factories.get(id);
+ List<Callable<Class>> l = factories.get(id);
if (l != null) {
l.remove(factory);
}
@@ -42,11 +42,11 @@
public static synchronized void register(String id, Callable<Class> factory) {
if (factories == null) {
- factories = new HashMap<String, Set<Callable<Class>>>();
+ factories = new HashMap<String, List<Callable<Class>>>();
}
- Set<Callable<Class>> l = factories.get(id);
+ List<Callable<Class>> l = factories.get(id);
if (l == null) {
- l = new HashSet<Callable<Class>>();
+ l = new ArrayList<Callable<Class>>();
factories.put(id, l);
}
l.add(factory);
@@ -54,9 +54,9 @@
public static synchronized Class locate(String factoryId) {
if (factories != null) {
- Set<Callable<Class>> l = factories.get(factoryId);
+ List<Callable<Class>> l = factories.get(factoryId);
if (l != null && !l.isEmpty()) {
- Callable<Class> c = l.iterator().next();
+ Callable<Class> c = l.get(l.size() - 1);
try {
return c.call();
} catch (Exception e) {
@@ -66,10 +66,10 @@
return null;
}
- public static synchronized List<Class> locateAll(String factoryId) {
- List<Class> classes = new ArrayList<Class>();
+ public static synchronized List<Class> locateAll(String factoryId) {
+ List<Class> classes = new ArrayList<Class>();
if (factories != null) {
- Set<Callable<Class>> l = factories.get(factoryId);
+ List<Callable<Class>> l = factories.get(factoryId);
if (l != null) {
for (Callable<Class> c : l) {
try {
@@ -80,6 +80,6 @@
}
}
return classes;
- }
+ }
}