Committed by
Gerrit Code Review
GUI -- Fixed a shut-down exception by explicitly closing all web-sockets on shutdown.
Change-Id: I3264a9029f36fdba150a3d729a2dd8c9024805d3
Showing
2 changed files
with
19 additions
and
0 deletions
| ... | @@ -23,7 +23,10 @@ import com.google.common.collect.Maps; | ... | @@ -23,7 +23,10 @@ import com.google.common.collect.Maps; |
| 23 | import org.apache.felix.scr.annotations.Activate; | 23 | import org.apache.felix.scr.annotations.Activate; |
| 24 | import org.apache.felix.scr.annotations.Component; | 24 | import org.apache.felix.scr.annotations.Component; |
| 25 | import org.apache.felix.scr.annotations.Deactivate; | 25 | import org.apache.felix.scr.annotations.Deactivate; |
| 26 | +import org.apache.felix.scr.annotations.Reference; | ||
| 27 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
| 26 | import org.apache.felix.scr.annotations.Service; | 28 | import org.apache.felix.scr.annotations.Service; |
| 29 | +import org.onosproject.mastership.MastershipService; | ||
| 27 | import org.onosproject.ui.UiExtension; | 30 | import org.onosproject.ui.UiExtension; |
| 28 | import org.onosproject.ui.UiExtensionService; | 31 | import org.onosproject.ui.UiExtensionService; |
| 29 | import org.onosproject.ui.UiMessageHandlerFactory; | 32 | import org.onosproject.ui.UiMessageHandlerFactory; |
| ... | @@ -66,6 +69,8 @@ public class UiExtensionManager | ... | @@ -66,6 +69,8 @@ public class UiExtensionManager |
| 66 | private final AltTopoViewMessageHandler topoHandler = | 69 | private final AltTopoViewMessageHandler topoHandler = |
| 67 | new AltTopoViewMessageHandler(); | 70 | new AltTopoViewMessageHandler(); |
| 68 | 71 | ||
| 72 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
| 73 | + protected MastershipService mastershipService; | ||
| 69 | 74 | ||
| 70 | // Creates core UI extension | 75 | // Creates core UI extension |
| 71 | private UiExtension createCoreExtension() { | 76 | private UiExtension createCoreExtension() { |
| ... | @@ -111,6 +116,7 @@ public class UiExtensionManager | ... | @@ -111,6 +116,7 @@ public class UiExtensionManager |
| 111 | 116 | ||
| 112 | @Deactivate | 117 | @Deactivate |
| 113 | public void deactivate() { | 118 | public void deactivate() { |
| 119 | + UiWebSocketServlet.closeAll(); | ||
| 114 | unregister(core); | 120 | unregister(core); |
| 115 | log.info("Stopped"); | 121 | log.info("Stopped"); |
| 116 | } | 122 | } | ... | ... |
| ... | @@ -35,15 +35,28 @@ public class UiWebSocketServlet extends WebSocketServlet { | ... | @@ -35,15 +35,28 @@ public class UiWebSocketServlet extends WebSocketServlet { |
| 35 | 35 | ||
| 36 | private static final long PING_DELAY_MS = 5000; | 36 | private static final long PING_DELAY_MS = 5000; |
| 37 | 37 | ||
| 38 | + private static UiWebSocketServlet instance; | ||
| 39 | + | ||
| 38 | private ServiceDirectory directory = new DefaultServiceDirectory(); | 40 | private ServiceDirectory directory = new DefaultServiceDirectory(); |
| 39 | 41 | ||
| 40 | private final Set<UiWebSocket> sockets = new HashSet<>(); | 42 | private final Set<UiWebSocket> sockets = new HashSet<>(); |
| 41 | private final Timer timer = new Timer(); | 43 | private final Timer timer = new Timer(); |
| 42 | private final TimerTask pruner = new Pruner(); | 44 | private final TimerTask pruner = new Pruner(); |
| 43 | 45 | ||
| 46 | + /** | ||
| 47 | + * Closes all currently open UI web-sockets. | ||
| 48 | + */ | ||
| 49 | + public static void closeAll() { | ||
| 50 | + if (instance != null) { | ||
| 51 | + instance.sockets.forEach(UiWebSocket::close); | ||
| 52 | + instance.sockets.clear(); | ||
| 53 | + } | ||
| 54 | + } | ||
| 55 | + | ||
| 44 | @Override | 56 | @Override |
| 45 | public void init() throws ServletException { | 57 | public void init() throws ServletException { |
| 46 | super.init(); | 58 | super.init(); |
| 59 | + instance = this; | ||
| 47 | timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS); | 60 | timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS); |
| 48 | } | 61 | } |
| 49 | 62 | ... | ... |
-
Please register or login to post a comment