/** * Federation destroying is a bit of a catch-22. We need to connect to the channel that the * federation is operating on in order to determine whether a federation is even active at all * (which it may well not be). So in this case we connect to the channel and then if there is a * federation running in there, we ask that it be destroyed by removing the contained FOM. * * <p>If there are members of the channel who are still currently federates, then this call will * fail and thrown an exception. * * <p>**NOTE** If we ever ask to destroy a federation, we will automatically disconnect from the * channel when done. Fair chance we don't care about it any more once we try a destroy. */ public void destroyFederation(DestroyFederation destroyMessage) throws Exception { // connect to the channel if we are not already Federation federation = findFederation(destroyMessage.getFederationName()); try { federation.sendDestroyFederation(); } finally { // We put this here because the above call may throw an exception if there // are federates still connected (and thus it can't destroy the federation). // That exception would in turn cascade out and prevent us from disconnecting // unless we did something about it! federation.disconnect(); federations.remove(federation); } }
/** * <i>This method is called by the Portico infrastructure during shutdown.</i> * * <p>When the kernel is ready to shutdown, it will call this method, signalling to the connection * that it should disconnect and do any shutdown and cleanup necessary. */ public void disconnect() throws JRTIinternalError { if (this.running == false) { logger.info("jgroups connection is already disconnected"); return; } logger.info("jgroups connection is disconnecting..."); // for each federation we're connected to, disconnect from it for (Federation federation : federations.values()) federation.disconnect(); federations.clear(); logger.info("jgroups connection has disconnected"); }