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); } }
@Test public void testEmptyDestroy() throws IOException, ServletException { Broadcaster b = framework.getBroadcasterFactory().lookup(B.class, "/test", true); b.setBroadcasterLifeCyclePolicy(BroadcasterLifeCyclePolicy.EMPTY_DESTROY); AR ah = new AR(); framework.addAtmosphereHandler("/*", ah, b).init(); AtmosphereRequest request = new AtmosphereRequestImpl.Builder().pathInfo("/a").method("GET").build(); framework.doCometSupport(request, AtmosphereResponseImpl.newInstance()); b.removeAtmosphereResource(ah.resource); assertFalse(B.class.cast(b).releaseExternalResources.get()); assertTrue(B.class.cast(b).destroy.get()); }