void invokeAtmosphereHandler(AtmosphereResourceImpl r) throws IOException { if (!r.isInScope()) return; AtmosphereRequest req = r.getRequest(false); String disableOnEvent = r.getAtmosphereConfig().getInitParameter(ApplicationConfig.DISABLE_ONSTATE_EVENT); try { if (disableOnEvent == null || !disableOnEvent.equals(String.valueOf(true))) { AtmosphereHandler atmosphereHandler = (AtmosphereHandler) req.getAttribute(FrameworkConfig.ATMOSPHERE_HANDLER); synchronized (r) { atmosphereHandler.onStateChange(r.getAtmosphereResourceEvent()); Meteor m = (Meteor) req.getAttribute(AtmosphereResourceImpl.METEOR); if (m != null) { m.destroy(); } } req.removeAttribute(FrameworkConfig.ATMOSPHERE_RESOURCE); } } catch (IOException ex) { try { r.onThrowable(ex); } catch (Throwable t) { logger.warn("failed calling onThrowable()", ex); } } }