public AsyncCollectionChangeAdapter(ExecutionManager executor, CollectionChangeListener<Item> delegate) { this.executor = checkNotNull(executor, "executor"); this.delegate = checkNotNull(delegate, "delegate"); ((BasicExecutionManager) executor).setTaskSchedulerForTag(delegate, SingleThreadedScheduler.class); }
/** * Unsubscribe the given subscription id. * * @see #subscribe(Map, Entity, Sensor, SensorEventListener) */ @Override @SuppressWarnings("rawtypes") public synchronized boolean unsubscribe(SubscriptionHandle sh) { if (!(sh instanceof Subscription)) throw new IllegalArgumentException("Only subscription handles of type Subscription supported: sh="+sh+"; type="+(sh != null ? sh.getClass().getCanonicalName() : null)); Subscription s = (Subscription) sh; boolean result = allSubscriptions.remove(s.id) != null; boolean b2 = removeFromMapOfCollections(subscriptionsByToken, makeEntitySensorToken(s.producer, s.sensor), s); assert result==b2; if (s.subscriber!=null) { boolean b3 = removeFromMapOfCollections(subscriptionsBySubscriber, s.subscriber, s); assert b3 == b2; } // FIXME ALEX - this seems wrong ((BasicExecutionManager) em).setTaskSchedulerForTag(s.subscriberExecutionManagerTag, SingleThreadedScheduler.class); return result; }
@BeforeMethod public void setUp() { em = new BasicExecutionManager("mycontextid"); em.setTaskSchedulerForTag("category1", SingleThreadedScheduler.class); }
public void setTaskSchedulerForTag(Object tag, Class<? extends TaskScheduler> scheduler) { synchronized (schedulerByTag) { TaskScheduler old = getTaskSchedulerForTag(tag); if (old!=null) { if (scheduler.isAssignableFrom(old.getClass())) { /* already have such an instance */ return; } //might support multiple in future... throw new IllegalStateException("Not allowed to set multiple TaskSchedulers on ExecutionManager tag (tag "+tag+", has "+old+", setting new "+scheduler+")"); } try { TaskScheduler schedulerI = scheduler.newInstance(); // allow scheduler to have a nice name, for logging etc if (schedulerI instanceof CanSetName) ((CanSetName)schedulerI).setName(""+tag); setTaskSchedulerForTag(tag, schedulerI); } catch (InstantiationException e) { throw Exceptions.propagate(e); } catch (IllegalAccessException e) { throw Exceptions.propagate(e); } } }
((BasicExecutionManager) em).setTaskSchedulerForTag(s.subscriberExecutionManagerTag, SingleThreadedScheduler.class);
double minRatePerSec = 1000 * PERFORMANCE_EXPECTATION; executionManager.setTaskSchedulerForTag("singlethreaded", SingleThreadedScheduler.class);