protected void onEntityChanged(Entity item) { synchronized (memberChangeMutex) { boolean accepts = acceptsEntity(item); boolean has = hasMember(item); if (has && !accepts) { removeMember(item); if (log.isDebugEnabled()) log.debug("{} detected item removal on change of {}", this, item); } else if (!has && accepts) { if (log.isDebugEnabled()) log.debug("{} detected item add on change of {}", this, item); addMember(item); } } }
public <T> void addSubscription(Entity producer, Sensor<T> sensor) { addSubscription(producer, sensor, Predicates.<SensorEvent<? super T>>alwaysTrue()); }
private boolean isRunning() { return getAttribute(RUNNING); }
protected void onEntityAdded(Entity item) { synchronized (memberChangeMutex) { if (acceptsEntity(item)) { if (log.isDebugEnabled()) log.debug("{} detected item add {}", this, item); addMember(item); } } }
/** * Stops this group (but does not stop any of its members). De-activates the filter and unsubscribes to * entity-updates, so the membership of the group will not change. */ @Override public void stop() { setAttribute(RUNNING, false); if (setChangeListener != null) { ((ManagementContextInternal)getManagementContext()).removeEntitySetListener(setChangeListener); } }
public void rescanEntities() { synchronized (memberChangeMutex) { if (!isRunning() || !getManagementSupport().isDeployed()) { if (log.isDebugEnabled()) log.debug("{} not scanning for children: stopped", this); return; if (getConfig(ENTITY_FILTER) == null) { log.warn("{} not (yet) scanning for children: no filter defined", this, this); return; if (getApplication() == null) { log.warn("{} not (yet) scanning for children: no application defined", this); return; Collection<Entity> toRemove = new LinkedHashSet<Entity>(currentMembers); for (Entity it : getManagementContext().getEntityManager().getEntities()) { if (acceptsEntity(it)) { toRemove.remove(it); if (!currentMembers.contains(it)) { if (log.isDebugEnabled()) log.debug("{} rescan detected new item {}", this, it); addMember(it); changed = true; removeMember(it); changed = true; if (log.isDebugEnabled()) log.debug("{} rescan complete, members now {}", this, getMembers());
@Override public void onManagementBecomingMaster() { if (setChangeListener != null) { log.warn("{} becoming master twice", this); return; } setChangeListener = new MyEntitySetChangeListener(); ((ManagementContextInternal)getManagementContext()).addEntitySetListener(setChangeListener); rescanEntities(); }
protected boolean acceptsEntity(Entity e) { Predicate<? super Entity> entityFilter = getConfig(ENTITY_FILTER); return (entityFilter != null && entityFilter.apply(e)); }
@Override public void onManagementNoLongerMaster() { if (setChangeListener == null) { log.warn("{} no longer master twice", this); return; } ((ManagementContextInternal) getManagementContext()).removeEntitySetListener(setChangeListener); setChangeListener = null; }