/** {@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; }
private Broadcaster createBroadcaster(Class<? extends Broadcaster> c, Object id) throws BroadcasterCreationException { try { Broadcaster b = c.getConstructor(String.class, AtmosphereConfig.class).newInstance(id.toString(), config); InjectorProvider.getInjector().inject(b); if (b.getBroadcasterConfig() == null) { b.setBroadcasterConfig( new BroadcasterConfig(config.framework().broadcasterFilters, config)); } b.setBroadcasterLifeCyclePolicy(policy); if (DefaultBroadcaster.class.isAssignableFrom(clazz)) { DefaultBroadcaster.class.cast(b).start(); } for (BroadcasterListener l : broadcasterListeners) { b.addBroadcasterListener(l); } notifyOnPostCreate(b); return b; } catch (Throwable t) { throw new BroadcasterCreationException(t); } }