brooklyn-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hadr...@apache.org
Subject [18/33] incubator-brooklyn git commit: [BROOKLYN-162] Refactor package in ./core/management
Date Sat, 15 Aug 2015 13:33:20 GMT
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/LocalSubscriptionManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/LocalSubscriptionManager.java b/core/src/main/java/brooklyn/management/internal/LocalSubscriptionManager.java
deleted file mode 100644
index c2c7905..0000000
--- a/core/src/main/java/brooklyn/management/internal/LocalSubscriptionManager.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import static brooklyn.util.JavaGroovyEquivalents.elvis;
-import static brooklyn.util.JavaGroovyEquivalents.groovyTruth;
-import static brooklyn.util.JavaGroovyEquivalents.join;
-import static brooklyn.util.JavaGroovyEquivalents.mapOf;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.event.Sensor;
-import org.apache.brooklyn.api.event.SensorEvent;
-import org.apache.brooklyn.api.event.SensorEventListener;
-import org.apache.brooklyn.api.management.ExecutionManager;
-import org.apache.brooklyn.api.management.SubscriptionHandle;
-import org.apache.brooklyn.api.management.SubscriptionManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.entity.basic.Entities;
-import brooklyn.util.task.BasicExecutionManager;
-import brooklyn.util.task.SingleThreadedScheduler;
-import brooklyn.util.text.Identifiers;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimaps;
-
-/**
- * A {@link SubscriptionManager} that stores subscription details locally.
- */
-public class LocalSubscriptionManager extends AbstractSubscriptionManager {
-    
-    private static final Logger LOG = LoggerFactory.getLogger(LocalSubscriptionManager.class);
-
-    protected final ExecutionManager em;
-    
-    private final String tostring = "SubscriptionContext("+Identifiers.getBase64IdFromValue(System.identityHashCode(this), 5)+")";
-
-    private final AtomicLong totalEventsPublishedCount = new AtomicLong();
-    private final AtomicLong totalEventsDeliveredCount = new AtomicLong();
-    
-    @SuppressWarnings("rawtypes")
-    protected final ConcurrentMap<String, Subscription> allSubscriptions = new ConcurrentHashMap<String, Subscription>();
-    @SuppressWarnings("rawtypes")
-    protected final ConcurrentMap<Object, Set<Subscription>> subscriptionsBySubscriber = new ConcurrentHashMap<Object, Set<Subscription>>();
-    @SuppressWarnings("rawtypes")
-    protected final ConcurrentMap<Object, Set<Subscription>> subscriptionsByToken = new ConcurrentHashMap<Object, Set<Subscription>>();
-    
-    public LocalSubscriptionManager(ExecutionManager m) {
-        this.em = m;
-    }
-        
-    public long getNumSubscriptions() {
-        return allSubscriptions.size();
-    }
-
-    public long getTotalEventsPublished() {
-        return totalEventsPublishedCount.get();
-    }
-    
-    public long getTotalEventsDelivered() {
-        return totalEventsDeliveredCount.get();
-    }
-    
-    @SuppressWarnings("unchecked")
-    protected synchronized <T> SubscriptionHandle subscribe(Map<String, Object> flags, Subscription<T> s) {
-        Entity producer = s.producer;
-        Sensor<T> sensor= s.sensor;
-        s.subscriber = getSubscriber(flags, s);
-        if (flags.containsKey("subscriberExecutionManagerTag")) {
-            s.subscriberExecutionManagerTag = flags.remove("subscriberExecutionManagerTag");
-            s.subscriberExecutionManagerTagSupplied = true;
-        } else {
-            s.subscriberExecutionManagerTag = 
-                s.subscriber instanceof Entity ? "subscription-delivery-entity-"+((Entity)s.subscriber).getId()+"["+s.subscriber+"]" : 
-                s.subscriber instanceof String ? "subscription-delivery-string["+s.subscriber+"]" : 
-                "subscription-delivery-object["+s.subscriber+"]";
-            s.subscriberExecutionManagerTagSupplied = false;
-        }
-        s.eventFilter = (Predicate<SensorEvent<T>>) flags.remove("eventFilter");
-        s.flags = flags;
-        
-        if (LOG.isDebugEnabled()) LOG.debug("Creating subscription {} for {} on {} {} in {}", new Object[] {s.id, s.subscriber, producer, sensor, this});
-        allSubscriptions.put(s.id, s);
-        addToMapOfSets(subscriptionsByToken, makeEntitySensorToken(s.producer, s.sensor), s);
-        if (s.subscriber!=null) {
-            addToMapOfSets(subscriptionsBySubscriber, s.subscriber, s);
-        }
-        if (!s.subscriberExecutionManagerTagSupplied && s.subscriberExecutionManagerTag!=null) {
-            ((BasicExecutionManager) em).setTaskSchedulerForTag(s.subscriberExecutionManagerTag, SingleThreadedScheduler.class);
-        }
-        return s;
-    }
-
-    @SuppressWarnings("unchecked")
-    public Set<SubscriptionHandle> getSubscriptionsForSubscriber(Object subscriber) {
-        return (Set<SubscriptionHandle>) ((Set<?>) elvis(subscriptionsBySubscriber.get(subscriber), Collections.emptySet()));
-    }
-
-    public synchronized Set<SubscriptionHandle> getSubscriptionsForEntitySensor(Entity source, Sensor<?> sensor) {
-        Set<SubscriptionHandle> subscriptions = new LinkedHashSet<SubscriptionHandle>();
-        subscriptions.addAll(elvis(subscriptionsByToken.get(makeEntitySensorToken(source, sensor)), Collections.emptySet()));
-        subscriptions.addAll(elvis(subscriptionsByToken.get(makeEntitySensorToken(null, sensor)), Collections.emptySet()));
-        subscriptions.addAll(elvis(subscriptionsByToken.get(makeEntitySensorToken(source, null)), Collections.emptySet()));
-        subscriptions.addAll(elvis(subscriptionsByToken.get(makeEntitySensorToken(null, null)), Collections.emptySet()));
-        return subscriptions;
-    }
-
-    /**
-     * Unsubscribe the given subscription id.
-     *
-     * @see #subscribe(Map, Entity, Sensor, SensorEventListener)
-     */
-    @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;
-    }
-
-    @SuppressWarnings({ "unchecked", "rawtypes" })
-    public <T> void publish(final SensorEvent<T> event) {
-        // REVIEW 1459 - execution
-        
-        // delivery in parallel/background, using execution manager
-        
-        // subscriptions, should define SingleThreadedScheduler for any subscriber ID tag
-        // in order to ensure callbacks are invoked in the order they are submitted
-        // (recommend exactly one per subscription to prevent deadlock)
-        // this is done with:
-        // em.setTaskSchedulerForTag(subscriberId, SingleThreadedScheduler.class);
-        
-        //note, generating the notifications must be done in the calling thread to preserve order
-        //e.g. emit(A); emit(B); should cause onEvent(A); onEvent(B) in that order
-        if (LOG.isTraceEnabled()) LOG.trace("{} got event {}", this, event);
-        totalEventsPublishedCount.incrementAndGet();
-        
-        Set<Subscription> subs = (Set<Subscription>) ((Set<?>) getSubscriptionsForEntitySensor(event.getSource(), event.getSensor()));
-        if (groovyTruth(subs)) {
-            if (LOG.isTraceEnabled()) LOG.trace("sending {}, {} to {}", new Object[] {event.getSensor().getName(), event, join(subs, ",")});
-            for (Subscription s : subs) {
-                if (s.eventFilter!=null && !s.eventFilter.apply(event))
-                    continue;
-                final Subscription sAtClosureCreation = s;
-                
-//                Set<Object> tags = MutableSet.of();
-//                if (s.subscriberExecutionManagerTag!=null) tags.add(s.subscriberExecutionManagerTag);
-//                if (event.getSource()!=null) tags.add(BrooklynTaskTags.tagForContextEntity(event.getSource()));
-//                Map<String, Object> tagsMap = mapOf("tags", (Object)tags);
-                // use code above, instead of line below, if we want subscription deliveries associated with the entity;
-                // that will cause them to be cancelled when the entity is unmanaged
-                // (not sure that is useful, and likely NOT worth the expense, but it might be...) -Alex Oct 2014
-                Map<String, Object> tagsMap = mapOf("tag", s.subscriberExecutionManagerTag);
-                
-                em.submit(tagsMap, new Runnable() {
-                    @Override
-                    public String toString() {
-                        return "LSM.publish("+event+")";
-                    }
-                    public void run() {
-                        try {
-                            sAtClosureCreation.listener.onEvent(event);
-                        } catch (Throwable t) {
-                            if (event!=null && event.getSource()!=null && Entities.isNoLongerManaged(event.getSource())) {
-                                LOG.debug("Error processing subscriptions to "+this+", after entity unmanaged: "+t, t);
-                            } else {
-                                LOG.warn("Error processing subscriptions to "+this+": "+t, t);
-                            }
-                        }
-                    }});
-                totalEventsDeliveredCount.incrementAndGet();
-            }
-        }
-    }
-    
-    @Override
-    public String toString() {
-        return tostring;
-    }
-    
-    /**
-     * Copied from LanguageUtils.groovy, to remove dependency.
-     * 
-     * Adds the given value to a collection in the map under the key.
-     * 
-     * A collection (as {@link LinkedHashMap}) will be created if necessary,
-     * synchronized on map for map access/change and set for addition there
-     *
-     * @return the updated set (instance, not copy)
-     * 
-     * @deprecated since 0.5; use {@link HashMultimap}, and {@link Multimaps#synchronizedSetMultimap(com.google.common.collect.SetMultimap)}
-     */
-    @Deprecated
-    private static <K,V> Set<V> addToMapOfSets(Map<K,Set<V>> map, K key, V valueInCollection) {
-        Set<V> coll;
-        synchronized (map) {
-            coll = map.get(key);
-            if (coll==null) {
-                coll = new LinkedHashSet<V>();
-                map.put(key, coll);
-            }
-            if (coll.isEmpty()) {
-                synchronized (coll) {
-                    coll.add(valueInCollection);
-                }
-                //if collection was empty then add to the collection while holding the map lock, to prevent removal
-                return coll;
-            }
-        }
-        synchronized (coll) {
-            if (!coll.isEmpty()) {
-                coll.add(valueInCollection);
-                return coll;
-            }
-        }
-        //if was empty, recurse, because someone else might be removing the collection
-        return addToMapOfSets(map, key, valueInCollection);
-    }
-
-    /**
-     * Copied from LanguageUtils.groovy, to remove dependency.
-     * 
-     * Removes the given value from a collection in the map under the key.
-     *
-     * @return the updated set (instance, not copy)
-     * 
-     * @deprecated since 0.5; use {@link ArrayListMultimap} or {@link HashMultimap}, and {@link Multimaps#synchronizedListMultimap(com.google.common.collect.ListMultimap)} etc
-     */
-    @Deprecated
-    private static <K,V> boolean removeFromMapOfCollections(Map<K,? extends Collection<V>> map, K key, V valueInCollection) {
-        Collection<V> coll;
-        synchronized (map) {
-            coll = map.get(key);
-            if (coll==null) return false;
-        }
-        boolean result;
-        synchronized (coll) {
-            result = coll.remove(valueInCollection);
-        }
-        if (coll.isEmpty()) {
-            synchronized (map) {
-                synchronized (coll) {
-                    if (coll.isEmpty()) {
-                        //only remove from the map if no one is adding to the collection or to the map, and the collection is still in the map
-                        if (map.get(key)==coll) {
-                            map.remove(key);
-                        }
-                    }
-                }
-            }
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/LocalUsageManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/LocalUsageManager.java b/core/src/main/java/brooklyn/management/internal/LocalUsageManager.java
deleted file mode 100644
index 6da41c8..0000000
--- a/core/src/main/java/brooklyn/management/internal/LocalUsageManager.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.management.entitlement.EntitlementContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.entity.basic.Entities;
-import brooklyn.entity.basic.EntityInternal;
-import brooklyn.entity.basic.Lifecycle;
-import brooklyn.internal.storage.BrooklynStorage;
-
-import org.apache.brooklyn.location.basic.AbstractLocation;
-import org.apache.brooklyn.location.basic.LocationConfigKeys;
-import org.apache.brooklyn.location.basic.LocationInternal;
-
-import brooklyn.management.ManagementContextInjectable;
-import brooklyn.management.entitlement.Entitlements;
-import brooklyn.management.usage.ApplicationUsage;
-import brooklyn.management.usage.LocationUsage;
-import brooklyn.util.exceptions.Exceptions;
-import brooklyn.util.flags.TypeCoercions;
-import brooklyn.util.javalang.Reflections;
-import brooklyn.util.time.Duration;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.common.util.concurrent.MoreExecutors;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-
-public class LocalUsageManager implements UsageManager {
-
-    // TODO Threading model needs revisited.
-    // Synchronizes on updates to storage; but if two Brooklyn nodes were both writing to the same
-    // ApplicationUsage or LocationUsage record there'd be a race. That currently won't happen
-    // (at least for ApplicationUsage?) because the app is mastered in just one node at a time,
-    // and because location events are just manage/unmanage which should be happening in just 
-    // one place at a time for a given location.
-    
-    private static final Logger log = LoggerFactory.getLogger(LocalUsageManager.class);
-
-    private static class ApplicationMetadataImpl implements brooklyn.management.internal.UsageListener.ApplicationMetadata {
-        private final Application app;
-        private String applicationId;
-        private String applicationName;
-        private String entityType;
-        private String catalogItemId;
-        private Map<String, String> metadata;
-
-        ApplicationMetadataImpl(Application app) {
-            this.app = checkNotNull(app, "app");
-            applicationId = app.getId();
-            applicationName = app.getDisplayName();
-            entityType = app.getEntityType().getName();
-            catalogItemId = app.getCatalogItemId();
-            metadata = ((EntityInternal)app).toMetadataRecord();
-        }
-        @Override public Application getApplication() {
-            return app;
-        }
-        @Override public String getApplicationId() {
-            return applicationId;
-        }
-        @Override public String getApplicationName() {
-            return applicationName;
-        }
-        @Override public String getEntityType() {
-            return entityType;
-        }
-        @Override public String getCatalogItemId() {
-            return catalogItemId;
-        }
-        @Override public Map<String, String> getMetadata() {
-            return metadata;
-        }
-    }
-    
-    private static class LocationMetadataImpl implements brooklyn.management.internal.UsageListener.LocationMetadata {
-        private final Location loc;
-        private String locationId;
-        private Map<String, String> metadata;
-
-        LocationMetadataImpl(Location loc) {
-            this.loc = checkNotNull(loc, "loc");
-            locationId = loc.getId();
-            metadata = ((LocationInternal)loc).toMetadataRecord();
-        }
-        @Override public Location getLocation() {
-            return loc;
-        }
-        @Override public String getLocationId() {
-            return locationId;
-        }
-        @Override public Map<String, String> getMetadata() {
-            return metadata;
-        }
-    }
-    
-    // Register a coercion from String->UsageListener, so that USAGE_LISTENERS defined in brooklyn.properties
-    // will be instantiated, given their class names.
-    static {
-        TypeCoercions.registerAdapter(String.class, brooklyn.management.internal.UsageListener.class, new Function<String, brooklyn.management.internal.UsageListener>() {
-            @Override public brooklyn.management.internal.UsageListener apply(String input) {
-                // TODO Want to use classLoader = mgmt.getCatalog().getRootClassLoader();
-                ClassLoader classLoader = LocalUsageManager.class.getClassLoader();
-                Optional<Object> result = Reflections.invokeConstructorWithArgs(classLoader, input);
-                if (result.isPresent()) {
-                    if (result.get() instanceof brooklyn.management.internal.UsageManager.UsageListener) {
-                        return new brooklyn.management.internal.UsageManager.UsageListener.UsageListenerAdapter((brooklyn.management.internal.UsageManager.UsageListener) result.get());
-                    } else {
-                        return (brooklyn.management.internal.UsageListener) result.get();
-                    }
-                } else {
-                    throw new IllegalStateException("Failed to create UsageListener from class name '"+input+"' using no-arg constructor");
-                }
-            }
-        });
-    }
-    
-    @VisibleForTesting
-    public static final String APPLICATION_USAGE_KEY = "usage-application";
-    
-    @VisibleForTesting
-    public static final String LOCATION_USAGE_KEY = "usage-location";
-
-    private final LocalManagementContext managementContext;
-    
-    private final Object mutex = new Object();
-
-    private final List<brooklyn.management.internal.UsageListener> listeners = Lists.newCopyOnWriteArrayList();
-    
-    private final AtomicInteger listenerQueueSize = new AtomicInteger();
-    
-    private ListeningExecutorService listenerExecutor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor(new ThreadFactoryBuilder()
-            .setNameFormat("brooklyn-usagemanager-listener-%d")
-            .build()));
-
-    public LocalUsageManager(LocalManagementContext managementContext) {
-        this.managementContext = checkNotNull(managementContext, "managementContext");
-        
-        // TODO Once brooklyn.management.internal.UsageManager.UsageListener is deleted, restore this
-        // to normal generics!
-        Collection<?> listeners = managementContext.getBrooklynProperties().getConfig(UsageManager.USAGE_LISTENERS);
-        if (listeners != null) {
-            for (Object listener : listeners) {
-                if (listener instanceof ManagementContextInjectable) {
-                    ((ManagementContextInjectable)listener).injectManagementContext(managementContext);
-                }
-                if (listener instanceof brooklyn.management.internal.UsageManager.UsageListener) {
-                    addUsageListener((brooklyn.management.internal.UsageManager.UsageListener)listener);
-                } else if (listener instanceof brooklyn.management.internal.UsageListener) {
-                    addUsageListener((brooklyn.management.internal.UsageListener)listener);
-                } else if (listener == null) {
-                    throw new NullPointerException("null listener in config "+UsageManager.USAGE_LISTENERS);
-                } else {
-                    throw new ClassCastException("listener "+listener+" of type "+listener.getClass()+" is not of type "+brooklyn.management.internal.UsageListener.class.getName());
-                }
-            }
-        }
-    }
-
-    public void terminate() {
-        // Wait for the listeners to finish + close the listeners
-        Duration timeout = managementContext.getBrooklynProperties().getConfig(UsageManager.USAGE_LISTENER_TERMINATION_TIMEOUT);
-        if (listenerQueueSize.get() > 0) {
-            log.info("Usage manager waiting for "+listenerQueueSize+" listener events for up to "+timeout);
-        }
-        List<ListenableFuture<?>> futures = Lists.newArrayList();
-        for (final brooklyn.management.internal.UsageListener listener : listeners) {
-            ListenableFuture<?> future = listenerExecutor.submit(new Runnable() {
-                public void run() {
-                    if (listener instanceof Closeable) {
-                        try {
-                            ((Closeable)listener).close();
-                        } catch (IOException e) {
-                            log.warn("Problem closing usage listener "+listener+" (continuing)", e);
-                        }
-                    }
-                }});
-            futures.add(future);
-        }
-        try {
-            Futures.successfulAsList(futures).get(timeout.toMilliseconds(), TimeUnit.MILLISECONDS);
-        } catch (Exception e) {
-            Exceptions.propagateIfFatal(e);
-            log.warn("Problem terminiating usage listeners (continuing)", e);
-        } finally {
-            listenerExecutor.shutdownNow();
-        }
-    }
-
-    private void execOnListeners(final Function<brooklyn.management.internal.UsageListener, Void> job) {
-        for (final brooklyn.management.internal.UsageListener listener : listeners) {
-            listenerQueueSize.incrementAndGet();
-            listenerExecutor.execute(new Runnable() {
-                public void run() {
-                    try {
-                        job.apply(listener);
-                    } catch (RuntimeException e) {
-                        log.error("Problem notifying listener "+listener+" of "+job, e);
-                        Exceptions.propagateIfFatal(e);
-                    } finally {
-                        listenerQueueSize.decrementAndGet();
-                    }
-                }});
-        }
-    }
-    
-    @Override
-    public void recordApplicationEvent(final Application app, final Lifecycle state) {
-        log.debug("Storing application lifecycle usage event: application {} in state {}", new Object[] {app, state});
-        ConcurrentMap<String, ApplicationUsage> eventMap = managementContext.getStorage().getMap(APPLICATION_USAGE_KEY);
-        synchronized (mutex) {
-            ApplicationUsage usage = eventMap.get(app.getId());
-            if (usage == null) {
-                usage = new ApplicationUsage(app.getId(), app.getDisplayName(), app.getEntityType().getName(), ((EntityInternal)app).toMetadataRecord());
-            }
-            final ApplicationUsage.ApplicationEvent event = new ApplicationUsage.ApplicationEvent(state, getUser());
-            usage.addEvent(event);        
-            eventMap.put(app.getId(), usage);
-
-            execOnListeners(new Function<brooklyn.management.internal.UsageListener, Void>() {
-                    public Void apply(brooklyn.management.internal.UsageListener listener) {
-                        listener.onApplicationEvent(new ApplicationMetadataImpl(Entities.proxy(app)), event);
-                        return null;
-                    }
-                    public String toString() {
-                        return "applicationEvent("+app+", "+state+")";
-                    }});
-        }
-    }
-    
-    /**
-     * Adds this location event to the usage record for the given location (creating the usage 
-     * record if one does not already exist).
-     */
-    @Override
-    public void recordLocationEvent(final Location loc, final Lifecycle state) {
-        // TODO This approach (i.e. recording events on manage/unmanage would not work for
-        // locations that are reused. For example, in a FixedListMachineProvisioningLocation
-        // the ssh machine location is returned to the pool and handed back out again.
-        // But maybe the solution there is to hand out different instances so that one user
-        // can't change the config of the SshMachineLocation to subsequently affect the next 
-        // user.
-        //
-        // TODO Should perhaps extract the location storage methods into their own class,
-        // but no strong enough feelings yet...
-        
-        checkNotNull(loc, "location");
-        if (loc.getConfig(AbstractLocation.TEMPORARY_LOCATION)) {
-            log.info("Ignoring location lifecycle usage event for {} (state {}), because location is a temporary location", loc, state);
-            return;
-        }
-        checkNotNull(state, "state of location %s", loc);
-        if (loc.getId() == null) {
-            log.error("Ignoring location lifecycle usage event for {} (state {}), because location has no id", loc, state);
-            return;
-        }
-        if (managementContext.getStorage() == null) {
-            log.warn("Cannot store location lifecycle usage event for {} (state {}), because storage not available", loc, state);
-            return;
-        }
-        
-        Object callerContext = loc.getConfig(LocationConfigKeys.CALLER_CONTEXT);
-        
-        if (callerContext != null && callerContext instanceof Entity) {
-            log.debug("Storing location lifecycle usage event: location {} in state {}; caller context {}", new Object[] {loc, state, callerContext});
-            
-            Entity caller = (Entity) callerContext;
-            String entityTypeName = caller.getEntityType().getName();
-            String appId = caller.getApplicationId();
-
-            final LocationUsage.LocationEvent event = new LocationUsage.LocationEvent(state, caller.getId(), entityTypeName, appId, getUser());
-            
-            ConcurrentMap<String, LocationUsage> usageMap = managementContext.getStorage().<String, LocationUsage>getMap(LOCATION_USAGE_KEY);
-            synchronized (mutex) {
-                LocationUsage usage = usageMap.get(loc.getId());
-                if (usage == null) {
-                    usage = new LocationUsage(loc.getId(), ((LocationInternal)loc).toMetadataRecord());
-                }
-                usage.addEvent(event);
-                usageMap.put(loc.getId(), usage);
-                
-                execOnListeners(new Function<brooklyn.management.internal.UsageListener, Void>() {
-                        public Void apply(brooklyn.management.internal.UsageListener listener) {
-                            listener.onLocationEvent(new LocationMetadataImpl(loc), event);
-                            return null;
-                        }
-                        public String toString() {
-                            return "locationEvent("+loc+", "+state+")";
-                        }});
-            }
-        } else {
-            // normal for high-level locations
-            log.trace("Not recording location lifecycle usage event for {} in state {}, because no caller context", new Object[] {loc, state});
-        }
-    }
-
-    /**
-     * Returns the usage info for the location with the given id, or null if unknown.
-     */
-    @Override
-    public LocationUsage getLocationUsage(String locationId) {
-        BrooklynStorage storage = managementContext.getStorage();
-
-        Map<String, LocationUsage> usageMap = storage.getMap(LOCATION_USAGE_KEY);
-        return usageMap.get(locationId);
-    }
-    
-    /**
-     * Returns the usage info that matches the given predicate.
-     * For example, could be used to find locations used within a given time period.
-     */
-    @Override
-    public Set<LocationUsage> getLocationUsage(Predicate<? super LocationUsage> filter) {
-        // TODO could do more efficient indexing, to more easily find locations in use during a given period.
-        // But this is good enough for first-pass.
-
-        Map<String, LocationUsage> usageMap = managementContext.getStorage().getMap(LOCATION_USAGE_KEY);
-        Set<LocationUsage> result = Sets.newLinkedHashSet();
-        
-        for (LocationUsage usage : usageMap.values()) {
-            if (filter.apply(usage)) {
-                result.add(usage);
-            }
-        }
-        return result;
-    }
-    
-    /**
-     * Returns the usage info for the location with the given id, or null if unknown.
-     */
-    @Override
-    public ApplicationUsage getApplicationUsage(String appId) {
-        BrooklynStorage storage = managementContext.getStorage();
-
-        Map<String, ApplicationUsage> usageMap = storage.getMap(APPLICATION_USAGE_KEY);
-        return usageMap.get(appId);
-    }
-    
-    /**
-     * Returns the usage info that matches the given predicate.
-     * For example, could be used to find applications used within a given time period.
-     */
-    @Override
-    public Set<ApplicationUsage> getApplicationUsage(Predicate<? super ApplicationUsage> filter) {
-        // TODO could do more efficient indexing, to more easily find locations in use during a given period.
-        // But this is good enough for first-pass.
-
-        Map<String, ApplicationUsage> usageMap = managementContext.getStorage().getMap(APPLICATION_USAGE_KEY);
-        Set<ApplicationUsage> result = Sets.newLinkedHashSet();
-        
-        for (ApplicationUsage usage : usageMap.values()) {
-            if (filter.apply(usage)) {
-                result.add(usage);
-            }
-        }
-        return result;
-    }
-
-    @Override
-    @Deprecated
-    public void addUsageListener(brooklyn.management.internal.UsageManager.UsageListener listener) {
-        addUsageListener(new brooklyn.management.internal.UsageManager.UsageListener.UsageListenerAdapter(listener));
-    }
-
-    @Override
-    @Deprecated
-    public void removeUsageListener(brooklyn.management.internal.UsageManager.UsageListener listener) {
-        removeUsageListener(new brooklyn.management.internal.UsageManager.UsageListener.UsageListenerAdapter(listener));
-    }
-    
-    @Override
-    public void addUsageListener(brooklyn.management.internal.UsageListener listener) {
-        listeners.add(listener);
-    }
-
-    @Override
-    public void removeUsageListener(brooklyn.management.internal.UsageListener listener) {
-        listeners.remove(listener);
-    }
-
-    private String getUser() {
-        EntitlementContext entitlementContext = Entitlements.getEntitlementContext();
-        if (entitlementContext != null) {
-            return entitlementContext.user();
-        }
-        return null;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/LocationManagerInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/LocationManagerInternal.java b/core/src/main/java/brooklyn/management/internal/LocationManagerInternal.java
deleted file mode 100644
index 17ecd5a..0000000
--- a/core/src/main/java/brooklyn/management/internal/LocationManagerInternal.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.management.LocationManager;
-
-public interface LocationManagerInternal extends LocationManager, BrooklynObjectManagerInternal<Location> {
-
-    public Iterable<String> getLocationIds();
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/ManagementContextInternal.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/ManagementContextInternal.java b/core/src/main/java/brooklyn/management/internal/ManagementContextInternal.java
deleted file mode 100644
index b21f73f..0000000
--- a/core/src/main/java/brooklyn/management/internal/ManagementContextInternal.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import java.net.URI;
-import java.net.URL;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutionException;
-
-import org.apache.brooklyn.api.entity.Effector;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.management.ManagementContext;
-import org.apache.brooklyn.api.management.Task;
-
-import brooklyn.catalog.internal.CatalogInitialization;
-import brooklyn.config.BrooklynProperties;
-import brooklyn.entity.basic.BrooklynTaskTags;
-import brooklyn.entity.proxying.InternalEntityFactory;
-import brooklyn.entity.proxying.InternalLocationFactory;
-import brooklyn.entity.proxying.InternalPolicyFactory;
-import brooklyn.internal.storage.BrooklynStorage;
-import brooklyn.management.ha.OsgiManager;
-import brooklyn.util.guava.Maybe;
-import brooklyn.util.task.TaskTags;
-
-import com.google.common.annotations.Beta;
-
-public interface ManagementContextInternal extends ManagementContext {
-
-    public static final String SUB_TASK_TAG = TaskTags.SUB_TASK_TAG;
-    
-    public static final String EFFECTOR_TAG = BrooklynTaskTags.EFFECTOR_TAG;
-    public static final String NON_TRANSIENT_TASK_TAG = BrooklynTaskTags.NON_TRANSIENT_TASK_TAG;
-    public static final String TRANSIENT_TASK_TAG = BrooklynTaskTags.TRANSIENT_TASK_TAG;
-
-    public static final String EMPTY_CATALOG_URL = "classpath://brooklyn/empty.catalog.bom";
-    
-    ClassLoader getBaseClassLoader();
-
-    Iterable<URL> getBaseClassPathForScanning();
-
-    void setBaseClassPathForScanning(Iterable<URL> urls);
-
-    void setManagementNodeUri(URI uri);
-
-    void addEntitySetListener(CollectionChangeListener<Entity> listener);
-
-    void removeEntitySetListener(CollectionChangeListener<Entity> listener);
-
-    void terminate();
-    
-    long getTotalEffectorInvocations();
-
-    <T> T invokeEffectorMethodSync(final Entity entity, final Effector<T> eff, final Object args) throws ExecutionException;
-    
-    <T> Task<T> invokeEffector(final Entity entity, final Effector<T> eff, @SuppressWarnings("rawtypes") final Map parameters);
-
-    BrooklynStorage getStorage();
-    
-    BrooklynProperties getBrooklynProperties();
-    
-    AccessManager getAccessManager();
-
-    UsageManager getUsageManager();
-    
-    /**
-     * @return The OSGi manager, if available; may be absent if OSGi is not supported,
-     * e.g. in test contexts (but will be supported in all major contexts).
-     */
-    Maybe<OsgiManager> getOsgiManager();
-
-    InternalEntityFactory getEntityFactory();
-    
-    InternalLocationFactory getLocationFactory();
-    
-    InternalPolicyFactory getPolicyFactory();
-    
-    /**
-     * Registers an entity that has been created, but that has not yet begun to be managed.
-     * <p>
-     * This differs from the idea of "preManaged" where the entities are in the process of being
-     * managed, but where management is not yet complete.
-     */
-    // TODO would benefit from better naming! The name has percolated up from LocalEntityManager.
-    //      should we just rename here as register or preManage?
-    void prePreManage(Entity entity);
-
-    /**
-     * Registers a location that has been created, but that has not yet begun to be managed.
-     */
-    void prePreManage(Location location);
-
-    /** Object which allows adding, removing, and clearing errors.
-     * TODO In future this will change to a custom interface with a unique identifier for each error. */
-    @Beta
-    List<Throwable> errors();
-
-    @Beta
-    CatalogInitialization getCatalogInitialization();
-
-    @Beta
-    void setCatalogInitialization(CatalogInitialization catalogInitialization);
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/ManagementTransitionInfo.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/ManagementTransitionInfo.java b/core/src/main/java/brooklyn/management/internal/ManagementTransitionInfo.java
deleted file mode 100644
index c16ff8e..0000000
--- a/core/src/main/java/brooklyn/management/internal/ManagementTransitionInfo.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import org.apache.brooklyn.api.management.ManagementContext;
-
-/** Stores a management transition mode, and the management context. */
-// TODO does this class really pull its weight?
-public class ManagementTransitionInfo {
-
-    final ManagementContext mgmtContext;
-    final ManagementTransitionMode mode;
-    
-    public ManagementTransitionInfo(ManagementContext mgmtContext, ManagementTransitionMode mode) {
-        this.mgmtContext = mgmtContext;
-        this.mode = mode;
-    }
-    
-    
-    public ManagementContext getManagementContext() {
-        return mgmtContext;
-    }
-
-    public ManagementTransitionMode getMode() {
-        return mode;
-    }
-    
-    @Override
-    public String toString() {
-        return super.toString()+"["+mgmtContext+";"+mode+"]";
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/ManagementTransitionMode.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/ManagementTransitionMode.java b/core/src/main/java/brooklyn/management/internal/ManagementTransitionMode.java
deleted file mode 100644
index 1d25902..0000000
--- a/core/src/main/java/brooklyn/management/internal/ManagementTransitionMode.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Preconditions;
-
-/**
- * Records details of a management transition, specifically the {@link BrooklynObjectManagementMode} before and after,
- * and allows easy checking of various aspects of that.
- * <p>
- * This helps make code readable and keep correct logic if we expand/change the management modes.
- */
-public class ManagementTransitionMode {
-
-    private static final Logger log = LoggerFactory.getLogger(ManagementTransitionMode.class);
-    
-    private final BrooklynObjectManagementMode modeBefore, modeAfter;
-
-    private ManagementTransitionMode(BrooklynObjectManagementMode modeBefore, BrooklynObjectManagementMode modeAfter) {
-        this.modeBefore = modeBefore;
-        this.modeAfter = modeAfter;
-    }
-    
-    public static ManagementTransitionMode transitioning(BrooklynObjectManagementMode modeBefore, BrooklynObjectManagementMode modeAfter) {
-        return new ManagementTransitionMode(Preconditions.checkNotNull(modeBefore, "modeBefore"), Preconditions.checkNotNull(modeAfter, "modeAfter"));
-    }
-
-    @Deprecated /** @deprecated marking places where we aren't sure */
-    public static ManagementTransitionMode guessing(BrooklynObjectManagementMode modeBefore, BrooklynObjectManagementMode modeAfter) {
-        return transitioning(modeBefore, modeAfter);
-    }
-
-    /** @return the mode this object was previously managed as */
-    public BrooklynObjectManagementMode getModeBefore() {
-        return modeBefore;
-    }
-    
-    /** @return the mode this object is now being managed as */
-    public BrooklynObjectManagementMode getModeAfter() {
-        return modeAfter;
-    }
-    
-    /** This management node was previously not loaded here, 
-     * either it did not exist (and is just being created) or it was in persisted state but
-     * not loaded at this node. */
-    public boolean wasNotLoaded() {
-        return getModeBefore()==BrooklynObjectManagementMode.NONEXISTENT || getModeBefore()==BrooklynObjectManagementMode.UNMANAGED_PERSISTED;
-    }
-
-    /** This management node is now not going to be loaded here, either it is being destroyed
-     * (not known anywhere, not even persisted) or simply forgotten here */
-    public boolean isNoLongerLoaded() {
-        return getModeAfter()==BrooklynObjectManagementMode.NONEXISTENT || getModeAfter()==BrooklynObjectManagementMode.UNMANAGED_PERSISTED;
-    }
-
-    /** This management node was the master for the given object */
-    public boolean wasPrimary() {
-        return getModeBefore()==BrooklynObjectManagementMode.MANAGED_PRIMARY;
-    }
-
-    /** This management node is now the master for the given object */
-    public boolean isPrimary() {
-        return getModeAfter()==BrooklynObjectManagementMode.MANAGED_PRIMARY;
-    }
-
-    /** Object was previously loaded as read-only at this management node;
-     * active management was occurring elsewhere (or not at all)
-     */
-    public boolean wasReadOnly() {
-        return getModeBefore()==BrooklynObjectManagementMode.LOADED_READ_ONLY;
-    }
-    
-    /** Object is now being loaded as read-only at this management node;
-     * expect active management to be occurring elsewhere
-     */
-    public boolean isReadOnly() {
-        return getModeAfter()==BrooklynObjectManagementMode.LOADED_READ_ONLY;
-    }
-    
-    /** Object is being created:
-     * previously did not exist (not even in persisted state);
-     * implies that we are the active manager creating it,
-     * i.e. {@link #getModeAfter()} should indicate {@link BrooklynObjectManagementMode#MANAGED_PRIMARY}.
-     * (if we're read-only and the manager has just created it, 
-     * {@link #getModeBefore()} should indicate {@link BrooklynObjectManagementMode#UNMANAGED_PERSISTED})
-     */
-    public boolean isCreating() {
-        if (getModeBefore()!=BrooklynObjectManagementMode.NONEXISTENT)
-            return false;
-        
-        if (getModeAfter()==BrooklynObjectManagementMode.LOADED_READ_ONLY) {
-            log.warn("isCreating set on RO object; highly irregular!");
-        }
-        return true;
-    }
-
-    /** Object is being destroyed:
-     * either destroyed elsewhere and we're catching up (in read-only mode),
-     * or we've been the active manager and are destroying it */
-    public boolean isDestroying() {
-        return getModeAfter()==BrooklynObjectManagementMode.NONEXISTENT;
-    }
-    
-    @Override
-    public String toString() {
-        return ManagementTransitionMode.class.getSimpleName()+"["+getModeBefore()+"->"+getModeAfter()+"]";
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/NonDeploymentAccessManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/NonDeploymentAccessManager.java b/core/src/main/java/brooklyn/management/internal/NonDeploymentAccessManager.java
deleted file mode 100644
index 4cc6bba..0000000
--- a/core/src/main/java/brooklyn/management/internal/NonDeploymentAccessManager.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import org.apache.brooklyn.api.management.AccessController;
-
-
-public class NonDeploymentAccessManager implements AccessManager {
-
-    private final ManagementContextInternal initialManagementContext;
-    
-    public NonDeploymentAccessManager(ManagementContextInternal initialManagementContext) {
-        this.initialManagementContext = initialManagementContext;
-    }
-    
-    private boolean isInitialManagementContextReal() {
-        return (initialManagementContext != null && !(initialManagementContext instanceof NonDeploymentManagementContext));
-    }
-
-    @Override
-    public AccessController getAccessController() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getAccessManager().getAccessController();
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public boolean isLocationProvisioningAllowed() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getAccessManager().isLocationProvisioningAllowed();
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public boolean isLocationManagementAllowed() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getAccessManager().isLocationManagementAllowed();
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public boolean isEntityManagementAllowed() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getAccessManager().isEntityManagementAllowed();
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public void setLocationProvisioningAllowed(boolean allowed) {
-        if (isInitialManagementContextReal()) {
-            initialManagementContext.getAccessManager().setLocationProvisioningAllowed(allowed);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public void setLocationManagementAllowed(boolean allowed) {
-        if (isInitialManagementContextReal()) {
-            initialManagementContext.getAccessManager().setLocationManagementAllowed(allowed);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public void setEntityManagementAllowed(boolean allowed) {
-        if (isInitialManagementContextReal()) {
-            initialManagementContext.getAccessManager().setEntityManagementAllowed(allowed);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/NonDeploymentEntityManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/NonDeploymentEntityManager.java b/core/src/main/java/brooklyn/management/internal/NonDeploymentEntityManager.java
deleted file mode 100644
index 8b85975..0000000
--- a/core/src/main/java/brooklyn/management/internal/NonDeploymentEntityManager.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-import org.apache.brooklyn.api.entity.Application;
-import org.apache.brooklyn.api.entity.Entity;
-import org.apache.brooklyn.api.entity.proxying.EntitySpec;
-import org.apache.brooklyn.api.entity.proxying.EntityTypeRegistry;
-import org.apache.brooklyn.api.management.ManagementContext;
-import org.apache.brooklyn.api.policy.Enricher;
-import org.apache.brooklyn.api.policy.EnricherSpec;
-import org.apache.brooklyn.api.policy.Policy;
-import org.apache.brooklyn.api.policy.PolicySpec;
-
-import com.google.common.base.Predicate;
-
-public class NonDeploymentEntityManager implements EntityManagerInternal {
-
-    private final ManagementContext initialManagementContext;
-    
-    public NonDeploymentEntityManager(ManagementContext initialManagementContext) {
-        this.initialManagementContext = initialManagementContext;
-    }
-    
-    @Override
-    public EntityTypeRegistry getEntityTypeRegistry() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().getEntityTypeRegistry();
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" (with no initial management context supplied) is not valid for this operation.");
-        }
-    }
-    
-    @Override
-    public <T extends Entity> T createEntity(EntitySpec<T> spec) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().createEntity(spec);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" (with no initial management context supplied) is not valid for this operation.");
-        }
-    }
-    
-    @Override
-    public <T extends Entity> T createEntity(Map<?,?> config, Class<T> type) {
-        return createEntity(EntitySpec.create(type).configure(config));
-    }
-
-    @Override
-    public <T extends Policy> T createPolicy(PolicySpec<T> spec) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().createPolicy(spec);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" (with no initial management context supplied) is not valid for this operation.");
-        }
-    }
-    
-    @Override
-    public <T extends Enricher> T createEnricher(EnricherSpec<T> spec) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().createEnricher(spec);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" (with no initial management context supplied) is not valid for this operation.");
-        }
-    }
-    
-    @Override
-    public Collection<Entity> getEntities() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().getEntities();
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Override
-    public Collection<Entity> getEntitiesInApplication(Application application) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().getEntitiesInApplication(application);
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Override
-    public Collection<Entity> findEntities(Predicate<? super Entity> filter) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().findEntities(filter);
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Override
-    public Collection<Entity> findEntitiesInApplication(Application application, Predicate<? super Entity> filter) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().findEntitiesInApplication(application, filter);
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Override
-    public Entity getEntity(String id) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getEntityManager().getEntity(id);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public Iterable<String> getEntityIds() {
-        if (isInitialManagementContextReal()) {
-            return ((EntityManagerInternal)initialManagementContext.getEntityManager()).getEntityIds();
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Override
-    public ManagementTransitionMode getLastManagementTransitionMode(String itemId) {
-        if (isInitialManagementContextReal()) {
-            return ((EntityManagerInternal)initialManagementContext.getEntityManager()).getLastManagementTransitionMode(itemId);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public void setManagementTransitionMode(Entity item, ManagementTransitionMode mode) {
-        if (isInitialManagementContextReal()) {
-            ((EntityManagerInternal)initialManagementContext.getEntityManager()).setManagementTransitionMode(item, mode);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-    
-    @Override
-    public boolean isManaged(Entity entity) {
-        return false;
-    }
-
-    @Override
-    public void manage(Entity e) {
-        throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot manage "+e);
-    }
-
-    @Override
-    public void unmanage(Entity e, ManagementTransitionMode info) {
-        throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-    }
-    
-    @Override
-    public void manageRebindedRoot(Entity item) {
-        throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-    }
-
-    @Override
-    public void unmanage(Entity e) {
-        throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot unmanage "+e);
-    }
-    
-    private boolean isInitialManagementContextReal() {
-        return (initialManagementContext != null && !(initialManagementContext instanceof NonDeploymentManagementContext));
-    }
-
-    @Override
-    public Iterable<Entity> getAllEntitiesInApplication(Application application) {
-        if (isInitialManagementContextReal()) {
-            return ((EntityManagerInternal)initialManagementContext.getEntityManager()).getAllEntitiesInApplication(application);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" (with no initial management context supplied) is not valid for this operation.");
-        }
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/6602f694/core/src/main/java/brooklyn/management/internal/NonDeploymentLocationManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/management/internal/NonDeploymentLocationManager.java b/core/src/main/java/brooklyn/management/internal/NonDeploymentLocationManager.java
deleted file mode 100644
index 5d68db6..0000000
--- a/core/src/main/java/brooklyn/management/internal/NonDeploymentLocationManager.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package brooklyn.management.internal;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-
-import org.apache.brooklyn.api.location.Location;
-import org.apache.brooklyn.api.location.LocationSpec;
-import org.apache.brooklyn.api.management.ManagementContext;
-
-public class NonDeploymentLocationManager implements LocationManagerInternal {
-
-    private final ManagementContext initialManagementContext;
-    
-    public NonDeploymentLocationManager(ManagementContext initialManagementContext) {
-        this.initialManagementContext = initialManagementContext;
-    }
-    
-    @Override
-    public <T extends Location> T createLocation(LocationSpec<T> spec) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getLocationManager().createLocation(spec);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot create "+spec);
-        }
-    }
-
-    @Override
-    public <T extends Location> T createLocation(Map<?, ?> config, Class<T> type) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getLocationManager().createLocation(config, type);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot create "+type);
-        }
-    }
-    
-    @Override
-    public Collection<Location> getLocations() {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getLocationManager().getLocations();
-        } else {
-            return Collections.emptyList();
-        }
-    }
-
-    @Override
-    public Location getLocation(String id) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getLocationManager().getLocation(id);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public Iterable<String> getLocationIds() {
-        if (isInitialManagementContextReal()) {
-            return ((LocationManagerInternal)initialManagementContext.getLocationManager()).getLocationIds();
-        } else {
-            return Collections.emptyList();
-        }
-    }
-    
-    @Override
-    public boolean isManaged(Location loc) {
-        return false;
-    }
-
-    @Override
-    public void manageRebindedRoot(Location loc) {
-        if (isInitialManagementContextReal()) {
-            ((LocationManagerInternal)initialManagementContext.getLocationManager()).manageRebindedRoot(loc);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot manage "+loc);
-        }
-    }
-
-    @Override
-    @Deprecated
-    public Location manage(Location loc) {
-        if (isInitialManagementContextReal()) {
-            return initialManagementContext.getLocationManager().manage(loc);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot manage "+loc);
-        }
-    }
-
-
-    @Override
-    public ManagementTransitionMode getLastManagementTransitionMode(String itemId) {
-        if (isInitialManagementContextReal()) {
-            return ((LocationManagerInternal)initialManagementContext.getLocationManager()).getLastManagementTransitionMode(itemId);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public void setManagementTransitionMode(Location item, ManagementTransitionMode mode) {
-        if (isInitialManagementContextReal()) {
-            ((LocationManagerInternal)initialManagementContext.getLocationManager()).setManagementTransitionMode(item, mode);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public void unmanage(Location item, ManagementTransitionMode info) {
-        if (isInitialManagementContextReal()) {
-            ((LocationManagerInternal)initialManagementContext.getLocationManager()).unmanage(item, info);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation");
-        }
-    }
-
-    @Override
-    public void unmanage(Location loc) {
-        if (isInitialManagementContextReal()) {
-            initialManagementContext.getLocationManager().unmanage(loc);
-        } else {
-            throw new IllegalStateException("Non-deployment context "+this+" is not valid for this operation: cannot unmanage "+loc);
-        }
-    }
-    
-    private boolean isInitialManagementContextReal() {
-        return (initialManagementContext != null && !(initialManagementContext instanceof NonDeploymentManagementContext));
-    }
-}


Mime
View raw message