/** {@inheritDoc} */ public synchronized void destroy() { String s = config.getInitParameter(ApplicationConfig.SHARED); if (s != null && s.equalsIgnoreCase("true")) { logger.warn( "Factory shared, will not be destroyed. That can possibly cause memory leaks if" + "Broadcaster where created. Make sure you destroy them manually."); return; } Enumeration<Broadcaster> e = store.elements(); Broadcaster b; // We just need one when shared. BroadcasterConfig bc = null; while (e.hasMoreElements()) { try { b = e.nextElement(); b.resumeAll(); b.destroy(); bc = b.getBroadcasterConfig(); } catch (Throwable t) { // Shield us from any bad behaviour logger.trace("Destroy", t); } } try { if (bc != null) bc.forceDestroy(); } catch (Throwable t) { logger.trace("Destroy", t); } store.clear(); factory = null; }