You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2006/09/08 23:30:36 UTC
svn commit: r441657 -
/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java
Author: rfeng
Date: Fri Sep 8 14:30:35 2006
New Revision: 441657
URL: http://svn.apache.org/viewvc?view=rev&rev=441657
Log:
Optimize the sorting on initLevel
Modified:
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java
Modified: incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java?view=diff&rev=441657&r1=441656&r2=441657
==============================================================================
--- incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java (original)
+++ incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/component/scope/ModuleScopeContainer.java Fri Sep 8 14:30:35 2006
@@ -19,10 +19,11 @@
package org.apache.tuscany.core.component.scope;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
-import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.tuscany.core.component.event.CompositeStart;
@@ -37,13 +38,15 @@
/**
* A scope context which manages atomic component instances keyed by module
- *
+ *
* @version $Rev$ $Date$
*/
public class ModuleScopeContainer extends AbstractScopeContainer {
private static final InstanceWrapper EMPTY = new EmptyWrapper();
+
private final Map<AtomicComponent, InstanceWrapper> instanceWrappers;
+
// the queue of instanceWrappers to destroy, in the order that their instances were created
private final List<InstanceWrapper> destroyQueue;
@@ -61,7 +64,6 @@
return Scope.MODULE;
}
-
public void onEvent(Event event) {
checkInit();
if (event instanceof CompositeStart) {
@@ -88,7 +90,6 @@
lifecycleState = STOPPED;
}
-
/**
* Notifies instanceWrappers of a shutdown in reverse order to which they were started
*/
@@ -111,7 +112,6 @@
instanceWrappers.put(component, EMPTY);
}
-
protected InstanceWrapper getInstanceWrapper(AtomicComponent component) throws TargetException {
checkInit();
InstanceWrapper ctx = instanceWrappers.get(component);
@@ -127,34 +127,39 @@
return ctx;
}
- private void eagerInitComponents() throws CoreRuntimeException {
- Map<Integer, List<AtomicComponent>> eagerInit = new TreeMap<Integer, List<AtomicComponent>>();
+ private static class ComponentInitComparator implements Comparator<AtomicComponent> {
+ final static ComponentInitComparator INSTANCE = new ComponentInitComparator();
- // find all eager init components and group them by init level
- for (Map.Entry<AtomicComponent, InstanceWrapper> entry : instanceWrappers.entrySet()) {
- AtomicComponent component = entry.getKey();
- int initLevel = component.getInitLevel();
- if (initLevel > 0) {
- List<AtomicComponent> list = eagerInit.get(initLevel);
- if (list == null) {
- list = new ArrayList<AtomicComponent>();
- eagerInit.put(initLevel, list);
- }
- list.add(component);
+ public int compare(AtomicComponent o1, AtomicComponent o2) {
+ if (o1.getInitLevel() > o2.getInitLevel()) {
+ return -1; // The lower level starts first (except nagative)
+ } else if (o1.getInitLevel() < o2.getInitLevel()) {
+ return 1;
+ } else {
+ return 0;
}
}
+ }
+
+ private void eagerInitComponents() throws CoreRuntimeException {
+
+ List<AtomicComponent> componentList = new ArrayList<AtomicComponent>(instanceWrappers.keySet());
+ Collections.sort(componentList, ComponentInitComparator.INSTANCE);
+
// start each group
- for (List<AtomicComponent> list : eagerInit.values()) {
- for (AtomicComponent component : list) {
- // the instance could have been created from a depth-first traversal
- InstanceWrapper ctx = instanceWrappers.get(component);
- if (ctx == EMPTY) {
- ctx = new InstanceWrapperImpl(component, component.createInstance());
- ctx.start();
- instanceWrappers.put(component, ctx);
- destroyQueue.add(ctx);
- }
+ for (AtomicComponent component : componentList) {
+ if (component.getInitLevel() <= 0) {
+ // Don't eagerly init
+ continue;
+ }
+ // the instance could have been created from a depth-first traversal
+ InstanceWrapper ctx = instanceWrappers.get(component);
+ if (ctx == EMPTY) {
+ ctx = new InstanceWrapperImpl(component, component.createInstance());
+ ctx.start();
+ instanceWrappers.put(component, ctx);
+ destroyQueue.add(ctx);
}
}
}
@@ -164,5 +169,4 @@
return null;
}
}
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org