Mercurial > hg > release > thermostat-0.4
changeset 315:a1c880bbe8a1
Fix application shutdown.
Reviewed-by: neugens
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2012-May/001401.html
author | Roman Kennke <rkennke@redhat.com> |
---|---|
date | Fri, 18 May 2012 15:25:57 +0200 |
parents | ff110704a157 |
children | bb3c20b82ce3 37659cac5fd4 |
files | client/core/src/main/java/com/redhat/thermostat/client/MainWindowControllerImpl.java client/core/src/main/java/com/redhat/thermostat/client/UiFacadeFactory.java client/core/src/main/java/com/redhat/thermostat/client/UiFacadeFactoryImpl.java client/core/src/main/java/com/redhat/thermostat/client/osgi/ThermostatActivator.java client/core/src/test/java/com/redhat/thermostat/client/MainWindowControllerImplTest.java |
diffstat | 5 files changed, 52 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/client/core/src/main/java/com/redhat/thermostat/client/MainWindowControllerImpl.java Fri May 18 07:17:35 2012 -0400 +++ b/client/core/src/main/java/com/redhat/thermostat/client/MainWindowControllerImpl.java Fri May 18 15:25:57 2012 +0200 @@ -41,6 +41,8 @@ import java.util.logging.Level; import java.util.logging.Logger; +import org.osgi.framework.BundleException; + import com.redhat.thermostat.client.osgi.service.VMContextAction; import com.redhat.thermostat.client.ui.AboutDialog; import com.redhat.thermostat.client.ui.AgentConfigurationController; @@ -199,16 +201,30 @@ handleVMHooks(evt); break; case SHUTDOWN: - view.hideMainWindow(); - ApplicationContext.getInstance().getTimerFactory().shutdown(); + shutdownApplication(); break; default: throw new IllegalStateException("unhandled action"); } } + }); } + private void shutdownApplication() { + view.hideMainWindow(); + ApplicationContext.getInstance().getTimerFactory().shutdown(); + shutdownOSGiFramework(); + } + + private void shutdownOSGiFramework() { + try { + facadeFactory.getBundleContext().getBundle(0).stop(); + } catch (BundleException e) { + logger.log(Level.SEVERE, "Unexpected error during OSGi framework shutdown", e); + } + } + private void handleVMHooks(ActionEvent<MainView.Action> event) { Object payload = event.getPayload(); if (payload instanceof VMContextAction) {
--- a/client/core/src/main/java/com/redhat/thermostat/client/UiFacadeFactory.java Fri May 18 07:17:35 2012 -0400 +++ b/client/core/src/main/java/com/redhat/thermostat/client/UiFacadeFactory.java Fri May 18 15:25:57 2012 +0200 @@ -38,6 +38,8 @@ import java.util.Collection; +import org.osgi.framework.BundleContext; + import com.redhat.thermostat.client.osgi.service.VMContextAction; import com.redhat.thermostat.client.osgi.service.VmInformationService; import com.redhat.thermostat.client.ui.HostInformationController; @@ -62,4 +64,6 @@ Collection<VMContextAction> getVMContextActions(); void addVMContextAction(VMContextAction service); + + BundleContext getBundleContext(); }
--- a/client/core/src/main/java/com/redhat/thermostat/client/UiFacadeFactoryImpl.java Fri May 18 07:17:35 2012 -0400 +++ b/client/core/src/main/java/com/redhat/thermostat/client/UiFacadeFactoryImpl.java Fri May 18 15:25:57 2012 +0200 @@ -39,6 +39,8 @@ import java.util.ArrayList; import java.util.Collection; +import org.osgi.framework.BundleContext; + import com.redhat.thermostat.client.osgi.service.VMContextAction; import com.redhat.thermostat.client.osgi.service.VmInformationService; import com.redhat.thermostat.client.ui.HostInformationController; @@ -50,9 +52,15 @@ public class UiFacadeFactoryImpl implements UiFacadeFactory { + private BundleContext context; + private Collection<VmInformationService> vmInformationServices = new ArrayList<>(); private Collection<VMContextAction> contextAction = new ArrayList<>(); + public UiFacadeFactoryImpl(BundleContext context) { + this.context = context; + } + @Override public MainWindowController getMainWindow() { MainView mainView = new MainWindow(); @@ -96,4 +104,9 @@ public void addVMContextAction(VMContextAction service) { contextAction.add(service); } + + @Override + public BundleContext getBundleContext() { + return context; + } }
--- a/client/core/src/main/java/com/redhat/thermostat/client/osgi/ThermostatActivator.java Fri May 18 07:17:35 2012 -0400 +++ b/client/core/src/main/java/com/redhat/thermostat/client/osgi/ThermostatActivator.java Fri May 18 15:25:57 2012 +0200 @@ -52,7 +52,7 @@ @Override public void start(final BundleContext context) throws Exception { - UiFacadeFactory uiFacadeFactory = new UiFacadeFactoryImpl(); + UiFacadeFactory uiFacadeFactory = new UiFacadeFactoryImpl(context); vmInfoServiceTracker = new VmInformationServiceTracker(context, uiFacadeFactory); vmInfoServiceTracker.open();
--- a/client/core/src/test/java/com/redhat/thermostat/client/MainWindowControllerImplTest.java Fri May 18 07:17:35 2012 -0400 +++ b/client/core/src/test/java/com/redhat/thermostat/client/MainWindowControllerImplTest.java Fri May 18 15:25:57 2012 +0200 @@ -43,9 +43,9 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.mockito.Mockito.times; import java.awt.Component; import java.lang.reflect.InvocationTargetException; @@ -59,6 +59,9 @@ import org.junit.BeforeClass; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.BundleException; import com.redhat.thermostat.client.osgi.service.VMContextAction; import com.redhat.thermostat.client.ui.SummaryController; @@ -343,4 +346,16 @@ verify(action1, times(1)).execute(any(VmRef.class)); verify(action2, times(0)).execute(any(VmRef.class)); } + + @Test + public void testOSGiFrameworkShutdown() throws BundleException { + Bundle systemBundle = mock(Bundle.class); + BundleContext ctx = mock(BundleContext.class); + when(ctx.getBundle(0)).thenReturn(systemBundle); + when(uiFacadeFactory.getBundleContext()).thenReturn(ctx); + + l.actionPerformed(new ActionEvent<MainView.Action>(view, MainView.Action.SHUTDOWN)); + + verify(systemBundle).stop(); + } }