Ejemplo n.º 1
0
  /** {@inheritDoc} */
  @Override
  public AtmosphereResource<?, ?> removeAtmosphereResource(AtmosphereResource r) {

    if (destroyed.get())
      throw new IllegalStateException("This Broadcaster has been destroyed and cannot be used");

    if (!resources.contains(r)) {
      return null;
    }
    resources.remove(r);

    // Will help preventing OOM.
    if (resources.isEmpty()) {
      notifyEmptyListener();
      if (lifeCyclePolicy.getLifeCyclePolicy()
          == BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.EMPTY) {
        releaseExternalResources();
      } else if (lifeCyclePolicy.getLifeCyclePolicy()
          == BroadcasterLifeCyclePolicy.ATMOSPHERE_RESOURCE_POLICY.EMPTY_DESTROY) {
        notifyDestroyListener();
        BroadcasterFactory.getDefault().remove(this, name);
        destroy();
      }
    }
    return r;
  }
Ejemplo n.º 2
0
  /** {@inheritDoc} */
  public void setScope(SCOPE scope) {
    this.scope = scope;
    if (scope != SCOPE.REQUEST) {
      return;
    }

    try {
      for (AtmosphereResource<?, ?> resource : resources) {
        Broadcaster b =
            BroadcasterFactory.getDefault()
                .get(getClass(), getClass().getSimpleName() + "/" + UUID.randomUUID());

        if (DefaultBroadcaster.class.isAssignableFrom(this.getClass())) {
          BroadcasterCache cache = bc.getBroadcasterCache().getClass().newInstance();
          InjectorProvider.getInjector().inject(cache);
          DefaultBroadcaster.class.cast(b).broadcasterCache = cache;
        }
        resource.setBroadcaster(b);
        if (resource.getAtmosphereResourceEvent().isSuspended()) {
          b.addAtmosphereResource(resource);
        }
      }

      if (!resources.isEmpty()) {
        destroy();
      }
    } catch (Exception e) {
      logger.error("failed to set request scope for current resources", e);
    }
  }