Skip to content

Commit 0e0e5cb

Browse files
author
Glyn Normington
committed
388496: catch IllegalStateExceptions in ShutdownSorter
1 parent 0d4dd25 commit 0e0e5cb

File tree

7 files changed

+59
-860
lines changed

7 files changed

+59
-860
lines changed

extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/activator/LifecycleManager.java

+18-20
Original file line numberDiff line numberDiff line change
@@ -17,32 +17,18 @@
1717
import java.util.ArrayList;
1818
import java.util.Collection;
1919
import java.util.Collections;
20-
import java.util.Iterator;
21-
import java.util.LinkedHashSet;
2220
import java.util.List;
2321
import java.util.Map;
24-
import java.util.Set;
2522
import java.util.Timer;
2623
import java.util.concurrent.ConcurrentHashMap;
2724

2825
import org.apache.commons.logging.Log;
2926
import org.apache.commons.logging.LogFactory;
30-
import org.osgi.framework.Bundle;
31-
import org.osgi.framework.BundleContext;
32-
import org.osgi.framework.BundleEvent;
33-
import org.osgi.framework.ServiceReference;
34-
import org.springframework.beans.factory.DisposableBean;
35-
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
36-
import org.springframework.core.task.SyncTaskExecutor;
37-
import org.springframework.core.task.TaskExecutor;
3827
import org.eclipse.gemini.blueprint.context.ConfigurableOsgiBundleApplicationContext;
3928
import org.eclipse.gemini.blueprint.context.DelegatedExecutionOsgiBundleApplicationContext;
4029
import org.eclipse.gemini.blueprint.context.event.OsgiBundleApplicationContextEventMulticaster;
4130
import org.eclipse.gemini.blueprint.extender.OsgiApplicationContextCreator;
4231
import org.eclipse.gemini.blueprint.extender.OsgiBeanFactoryPostProcessor;
43-
import org.eclipse.gemini.blueprint.extender.internal.dependencies.shutdown.BundleDependencyComparator;
44-
import org.eclipse.gemini.blueprint.extender.internal.dependencies.shutdown.ComparatorServiceDependencySorter;
45-
import org.eclipse.gemini.blueprint.extender.internal.dependencies.shutdown.ServiceDependencySorter;
4632
import org.eclipse.gemini.blueprint.extender.internal.dependencies.shutdown.ShutdownSorter;
4733
import org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor;
4834
import org.eclipse.gemini.blueprint.extender.internal.support.ExtenderConfiguration;
@@ -52,6 +38,12 @@
5238
import org.eclipse.gemini.blueprint.extender.support.ApplicationContextConfiguration;
5339
import org.eclipse.gemini.blueprint.util.OsgiBundleUtils;
5440
import org.eclipse.gemini.blueprint.util.OsgiStringUtils;
41+
import org.osgi.framework.Bundle;
42+
import org.osgi.framework.BundleContext;
43+
import org.springframework.beans.factory.DisposableBean;
44+
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
45+
import org.springframework.core.task.SyncTaskExecutor;
46+
import org.springframework.core.task.TaskExecutor;
5547

5648
/**
5749
* Manager handling the startup/shutdown threading issues regarding OSGi contexts. Used by {@link ContextLoaderListener}
@@ -94,9 +86,6 @@ class LifecycleManager implements DisposableBean {
9486
*/
9587
private final TaskExecutor sameThreadTaskExecutor = new SyncTaskExecutor();
9688

97-
/** Service-based dependency sorter for shutdown */
98-
private final ServiceDependencySorter shutdownDependencySorter = new ComparatorServiceDependencySorter();
99-
10089
private final OsgiBundleApplicationContextEventMulticaster multicaster;
10190

10291
private final ExtenderConfiguration extenderConfiguration;
@@ -360,9 +349,7 @@ public void destroy() {
360349
final Object[] contextClosingDown = new Object[1];
361350

362351
for (Bundle shutdownBundle : candidates) {
363-
Long id = new Long(shutdownBundle.getBundleId());
364-
final ConfigurableOsgiBundleApplicationContext context =
365-
(ConfigurableOsgiBundleApplicationContext) managedContexts.get(id);
352+
final ConfigurableOsgiBundleApplicationContext context = getManagedContext(shutdownBundle);
366353
if (context != null) {
367354
closedContexts.add(context);
368355
// add a new runnable
@@ -405,6 +392,17 @@ public String toString() {
405392
stopTaskExecutor();
406393
}
407394

395+
public ConfigurableOsgiBundleApplicationContext getManagedContext(Bundle bundle) {
396+
ConfigurableOsgiBundleApplicationContext context = null;
397+
try {
398+
Long id = new Long(bundle.getBundleId());
399+
context = (ConfigurableOsgiBundleApplicationContext) managedContexts.get(id);
400+
} catch (IllegalStateException _) {
401+
// ignore
402+
}
403+
return context;
404+
}
405+
408406
/**
409407
* Do some additional waiting so the service dependency listeners detect the shutdown.
410408
*/

extender/src/main/java/org/eclipse/gemini/blueprint/extender/internal/dependencies/shutdown/BundleDependencyComparator.java

-186
This file was deleted.

0 commit comments

Comments
 (0)