You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ha...@apache.org on 2015/08/15 15:33:27 UTC

[25/33] incubator-brooklyn git commit: [BROOKLYN-162] Refactor package in ./core/internal

[BROOKLYN-162] Refactor package in ./core/internal


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/9cf456dc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/9cf456dc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/9cf456dc

Branch: refs/heads/master
Commit: 9cf456dca3110c308c11bd4b5fdedbbe74b4236d
Parents: 6602f69
Author: Hadrian Zbarcea <ha...@apache.org>
Authored: Sat Aug 15 00:05:56 2015 -0400
Committer: Hadrian Zbarcea <ha...@apache.org>
Committed: Sat Aug 15 00:05:56 2015 -0400

----------------------------------------------------------------------
 .../brooklyn/entity/basic/AbstractEntity.java   |   4 +-
 .../entity/basic/AbstractGroupImpl.java         |   2 +-
 .../rebind/PeriodicDeltaChangeListener.java     |   2 +-
 .../brooklyn/entity/rebind/RebindIteration.java |   2 +-
 .../entity/rebind/RebindManagerImpl.java        |   2 +-
 .../basic/PortAttributeSensorAndConfigKey.java  |   2 +-
 .../java/brooklyn/event/feed/AbstractFeed.java  |   2 +-
 .../internal/BrooklynFeatureEnablement.java     | 210 -------------------
 .../internal/BrooklynInitialization.java        |  81 -------
 .../util/BrooklynLanguageExtensions.java        |   3 +-
 .../main/java/brooklyn/util/ResourceUtils.java  |   2 +-
 .../brooklyn/util/crypto/FluentKeySigner.java   |   2 +-
 .../java/brooklyn/util/crypto/SecureKeys.java   |   2 +-
 .../java/brooklyn/util/flags/TypeCoercions.java |   2 +-
 .../util/internal/ssh/sshj/SshjTool.java        |   2 +-
 .../util/task/BasicExecutionManager.java        |   2 +-
 .../internal/BrooklynFeatureEnablement.java     | 210 +++++++++++++++++++
 .../core/internal/BrooklynInitialization.java   |  81 +++++++
 .../ha/HighAvailabilityManagerImpl.java         |   2 +-
 .../internal/LocalManagementContext.java        |   2 +-
 .../location/basic/AbstractLocation.java        |   2 +-
 .../location/basic/LocationConfigUtils.java     |   4 +-
 .../entity/rebind/RebindCatalogItemTest.java    |   2 +-
 ...talogWhenCatalogPersistenceDisabledTest.java |   2 +-
 .../internal/BrooklynFeatureEnablementTest.java | 118 -----------
 .../sshj/SshjToolAsyncStubIntegrationTest.java  |   2 +-
 .../ssh/sshj/SshjToolIntegrationTest.java       |   2 +-
 .../internal/BrooklynFeatureEnablementTest.java | 119 +++++++++++
 .../HighAvailabilityManagerSplitBrainTest.java  |   2 +-
 .../nginx/NginxRebindWithHaIntegrationTest.java |   2 +-
 .../brooklyn/catalog/CatalogYamlRebindTest.java |   2 +-
 .../brooklyn/launcher/BrooklynWebServer.java    |   2 +-
 32 files changed, 440 insertions(+), 436 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index dc005d8..2860b82 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -53,6 +53,8 @@ import org.apache.brooklyn.api.policy.EnricherSpec;
 import org.apache.brooklyn.api.policy.EntityAdjunct;
 import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.apache.brooklyn.core.management.internal.EffectorUtils;
 import org.apache.brooklyn.core.management.internal.EntityManagementSupport;
 import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
@@ -76,8 +78,6 @@ import brooklyn.event.basic.BasicNotificationSensor;
 import brooklyn.event.basic.Sensors;
 import brooklyn.event.feed.AbstractFeed;
 import brooklyn.event.feed.ConfigToAttributes;
-import brooklyn.internal.BrooklynFeatureEnablement;
-import brooklyn.internal.BrooklynInitialization;
 import brooklyn.internal.storage.BrooklynStorage;
 import brooklyn.internal.storage.Reference;
 import brooklyn.internal.storage.impl.BasicReference;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/entity/basic/AbstractGroupImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractGroupImpl.java b/core/src/main/java/brooklyn/entity/basic/AbstractGroupImpl.java
index 79abdb0..a300f39 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractGroupImpl.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractGroupImpl.java
@@ -28,11 +28,11 @@ import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.Group;
 import org.apache.brooklyn.api.entity.basic.EntityLocal;
 import org.apache.brooklyn.api.entity.proxying.EntitySpec;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.collections.SetFromLiveMap;
 
 import com.google.common.base.Optional;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
index 98906e9..d204ecc 100644
--- a/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
+++ b/core/src/main/java/brooklyn/entity/rebind/PeriodicDeltaChangeListener.java
@@ -45,12 +45,12 @@ import org.apache.brooklyn.api.management.Task;
 import org.apache.brooklyn.api.mementos.BrooklynMementoPersister;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 
 import brooklyn.entity.basic.BrooklynTaskTags;
 import brooklyn.entity.basic.EntityInternal;
 import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils;
 import brooklyn.entity.rebind.persister.PersistenceActivityMetrics;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.collections.MutableSet;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
index 30803e2..8c6a402 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindIteration.java
@@ -64,6 +64,7 @@ import org.apache.brooklyn.api.mementos.TreeNode;
 import org.apache.brooklyn.api.mementos.BrooklynMementoManifest.EntityMementoManifest;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode;
 import org.apache.brooklyn.core.management.internal.BrooklynObjectManagerInternal;
 import org.apache.brooklyn.core.management.internal.EntityManagerInternal;
@@ -86,7 +87,6 @@ import brooklyn.entity.proxying.InternalPolicyFactory;
 import brooklyn.entity.rebind.RebindManagerImpl.RebindTracker;
 import brooklyn.entity.rebind.persister.PersistenceActivityMetrics;
 import brooklyn.event.feed.AbstractFeed;
-import brooklyn.internal.BrooklynFeatureEnablement;
 
 import org.apache.brooklyn.location.basic.AbstractLocation;
 import org.apache.brooklyn.location.basic.LocationInternal;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
index 8221472..862c86b 100644
--- a/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
+++ b/core/src/main/java/brooklyn/entity/rebind/RebindManagerImpl.java
@@ -43,6 +43,7 @@ import org.apache.brooklyn.api.management.ha.MementoCopyMode;
 import org.apache.brooklyn.api.mementos.BrooklynMementoPersister;
 import org.apache.brooklyn.api.mementos.BrooklynMementoRawData;
 import org.apache.brooklyn.api.mementos.TreeNode;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.ha.HighAvailabilityManagerImpl;
 import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
 import org.slf4j.Logger;
@@ -58,7 +59,6 @@ import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils;
 import brooklyn.entity.rebind.persister.BrooklynPersistenceUtils.CreateBackupMode;
 import brooklyn.entity.rebind.persister.PersistenceActivityMetrics;
 import brooklyn.entity.rebind.transformer.CompoundTransformer;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.collections.QuorumCheck;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java b/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
index b086b98..fd7100a 100644
--- a/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
+++ b/core/src/main/java/brooklyn/event/basic/PortAttributeSensorAndConfigKey.java
@@ -28,12 +28,12 @@ import org.apache.brooklyn.api.location.MachineProvisioningLocation;
 import org.apache.brooklyn.api.location.PortRange;
 import org.apache.brooklyn.api.location.PortSupplier;
 import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.BrooklynConfigKeys;
-import brooklyn.internal.BrooklynInitialization;
 
 import org.apache.brooklyn.location.basic.Locations;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/event/feed/AbstractFeed.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/feed/AbstractFeed.java b/core/src/main/java/brooklyn/event/feed/AbstractFeed.java
index 5f5229c..23037a7 100644
--- a/core/src/main/java/brooklyn/event/feed/AbstractFeed.java
+++ b/core/src/main/java/brooklyn/event/feed/AbstractFeed.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.api.entity.Feed;
 import org.apache.brooklyn.api.entity.basic.EntityLocal;
 import org.apache.brooklyn.api.entity.rebind.RebindSupport;
 import org.apache.brooklyn.api.mementos.FeedMemento;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -33,7 +34,6 @@ import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.basic.EntityInternal;
 import brooklyn.entity.rebind.BasicFeedRebindSupport;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.policy.basic.AbstractEntityAdjunct;
 import brooklyn.util.javalang.JavaClassNames;
 import brooklyn.util.text.Strings;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java b/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
deleted file mode 100644
index 10a6e4a..0000000
--- a/core/src/main/java/brooklyn/internal/BrooklynFeatureEnablement.java
+++ /dev/null
@@ -1,210 +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.internal;
-
-import java.util.Map;
-
-import org.apache.brooklyn.api.management.ha.HighAvailabilityMode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import brooklyn.config.BrooklynProperties;
-import brooklyn.internal.storage.BrooklynStorage;
-import brooklyn.util.internal.ssh.ShellTool;
-
-import com.google.common.annotations.Beta;
-import com.google.common.collect.Maps;
-
-/**
- * For enabling/disabling experimental features.
- * They can be enabled via java system properties, or by explicitly calling {@link #setEnablement(String, boolean)}.
- * <p>
- * For example, start brooklyn with {@code -Dbrooklyn.experimental.feature.policyPersistence=true}
- * 
- * @author aled
- */
-@Beta
-public class BrooklynFeatureEnablement {
-
-    private static final Logger LOG = LoggerFactory.getLogger(BrooklynFeatureEnablement.class);
-
-    public static final String FEATURE_PROPERTY_PREFIX = "brooklyn.experimental.feature";
-    
-    public static final String FEATURE_POLICY_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".policyPersistence";
-    
-    public static final String FEATURE_ENRICHER_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".enricherPersistence";
-
-    public static final String FEATURE_FEED_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".feedPersistence";
-    
-    /** whether feeds are automatically registered when set on entities, so that they are persisted */
-    public static final String FEATURE_FEED_REGISTRATION_PROPERTY = FEATURE_PROPERTY_PREFIX+".feedRegistration";
-
-    public static final String FEATURE_CATALOG_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".catalogPersistence";
-    
-    /** whether the default standby mode is {@link HighAvailabilityMode#HOT_STANDBY} or falling back to the traditional
-     * {@link HighAvailabilityMode#STANDBY} */
-    public static final String FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY = FEATURE_PROPERTY_PREFIX+".defaultStandbyIsHot";
-    
-    /** whether to attempt to use {@link BrooklynStorage} (datagrid) as a backing store for data;
-     * note this is <b>not</b> compatible with {@link #FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY} 
-     * which uses a blob/file store and a larger-granularity rebind process than was intended with the datagrid */
-    /* not sure if we still even need this? now the rebind/read-only feature reloads on demand from the persistence store;
-     * the data-grid backing  */
-    public static final String FEATURE_USE_BROOKLYN_LIVE_OBJECTS_DATAGRID_STORAGE = FEATURE_PROPERTY_PREFIX+".useBrooklynLiveObjectsDatagridStorage";
-
-    /**
-     * Renaming threads can really helps with debugging etc; however it's a massive performance hit (2x)
-     * <p>
-     * We get 55000 tasks per sec with this off, 28k/s with this on.
-     * <p>
-     * Defaults to false if system property is not set.
-     */
-    public static final String FEATURE_RENAME_THREADS = "brooklyn.executionManager.renameThreads";
-
-    /**
-     * When rebinding to state created from very old versions, the catalogItemId properties will be missing which
-     * results in errors when OSGi bundles are used. When enabled the code tries to infer the catalogItemId from
-     * <ul>
-     *   <li> parent entities
-     *   <li> catalog items matching the type that needs to be deserialized
-     *   <li> iterating through all catalog items and checking if they can provide the needed type
-     * </ul>
-     */
-    public static final String FEATURE_BACKWARDS_COMPATIBILITY_INFER_CATALOG_ITEM_ON_REBIND = "brooklyn.backwardCompatibility.feature.inferCatalogItemOnRebind";
-    
-    /**
-     * When rebinding, an entity could reference a catalog item that no longer exists. This option 
-     * will automatically update the catalog item reference to what is inferred as the most 
-     * suitable catalog symbolicName:version.
-     */
-    public static final String FEATURE_AUTO_FIX_CATALOG_REF_ON_REBIND = "brooklyn.quickfix.fixDanglingCatalogItemOnRebind";
-    
-    /**
-     * When executing over ssh, whether to support the "async exec" approach, or only the classic approach.
-     * 
-     * If this feature is disabled, then even if the {@link ShellTool#PROP_EXEC_ASYNC} is configured it
-     * will still use the classic ssh approach.
-     */
-    public static final String FEATURE_SSH_ASYNC_EXEC = FEATURE_PROPERTY_PREFIX+".ssh.asyncExec";
-
-    public static final String FEATURE_VALIDATE_LOCATION_SSH_KEYS = "brooklyn.validate.locationSshKeys";
-    
-    private static final Map<String, Boolean> FEATURE_ENABLEMENTS = Maps.newLinkedHashMap();
-
-    private static final Object MUTEX = new Object();
-
-    static void setDefaults() {
-        // Idea is here one can put experimental features that are *enabled* by default, but 
-        // that can be turned off via system properties, or vice versa.
-        // Typically this is useful where a feature is deemed risky!
-        
-        setDefault(FEATURE_POLICY_PERSISTENCE_PROPERTY, true);
-        setDefault(FEATURE_ENRICHER_PERSISTENCE_PROPERTY, true);
-        setDefault(FEATURE_FEED_PERSISTENCE_PROPERTY, true);
-        setDefault(FEATURE_FEED_REGISTRATION_PROPERTY, false);
-        setDefault(FEATURE_CATALOG_PERSISTENCE_PROPERTY, true);
-        setDefault(FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY, false);
-        setDefault(FEATURE_USE_BROOKLYN_LIVE_OBJECTS_DATAGRID_STORAGE, false);
-        setDefault(FEATURE_RENAME_THREADS, false);
-        setDefault(FEATURE_BACKWARDS_COMPATIBILITY_INFER_CATALOG_ITEM_ON_REBIND, true);
-        setDefault(FEATURE_AUTO_FIX_CATALOG_REF_ON_REBIND, false);
-        setDefault(FEATURE_SSH_ASYNC_EXEC, false);
-        setDefault(FEATURE_VALIDATE_LOCATION_SSH_KEYS, true);
-    }
-    
-    static {
-        setDefaults();
-    }
-    
-    /**
-     * Initialises the feature-enablement from brooklyn properties. For each
-     * property, prefer a system-property if present; otherwise use the value 
-     * from brooklyn properties.
-     */
-    public static void init(BrooklynProperties props) {
-        boolean changed = false;
-        for (Map.Entry<String, Object> entry : props.asMapWithStringKeys().entrySet()) {
-            String property = entry.getKey();
-            if (property.startsWith(FEATURE_PROPERTY_PREFIX)) {
-                if (!FEATURE_ENABLEMENTS.containsKey(property)) {
-                    Object rawVal = System.getProperty(property);
-                    if (rawVal == null) {
-                        rawVal = entry.getValue();
-                    }
-                    boolean val = Boolean.parseBoolean(""+rawVal);
-                    FEATURE_ENABLEMENTS.put(property, val);
-                    
-                    changed = true;
-                    LOG.debug("Init feature enablement of "+property+" set to "+val);
-                }
-            }
-        }
-        if (!changed) {
-            LOG.debug("Init feature enablement did nothing, as no settings in brooklyn properties");
-        }
-    }
-    
-    public static boolean isEnabled(String property) {
-        synchronized (MUTEX) {
-            if (!FEATURE_ENABLEMENTS.containsKey(property)) {
-                String rawVal = System.getProperty(property);
-                boolean val = Boolean.parseBoolean(rawVal);
-                FEATURE_ENABLEMENTS.put(property, val);
-            }
-            return FEATURE_ENABLEMENTS.get(property);
-        }
-    }
-
-    public static boolean enable(String property) {
-        return setEnablement(property, true);
-    }
-    
-    public static boolean disable(String property) {
-        return setEnablement(property, false);
-    }
-    
-    public static boolean setEnablement(String property, boolean val) {
-        synchronized (MUTEX) {
-            boolean oldVal = isEnabled(property);
-            FEATURE_ENABLEMENTS.put(property, val);
-            return oldVal;
-        }
-    }
-    
-    static void setDefault(String property, boolean val) {
-        synchronized (MUTEX) {
-            if (!FEATURE_ENABLEMENTS.containsKey(property)) {
-                String rawVal = System.getProperty(property);
-                if (rawVal == null) {
-                    FEATURE_ENABLEMENTS.put(property, val);
-                    LOG.debug("Default enablement of "+property+" set to "+val);
-                } else {
-                    LOG.debug("Not setting default enablement of "+property+" to "+val+", because system property is "+rawVal);
-                }
-            }
-        }
-    }
-    
-    static void clearCache() {
-        synchronized (MUTEX) {
-            FEATURE_ENABLEMENTS.clear();
-            setDefaults();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/internal/BrooklynInitialization.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/internal/BrooklynInitialization.java b/core/src/main/java/brooklyn/internal/BrooklynInitialization.java
deleted file mode 100644
index 70eea9f..0000000
--- a/core/src/main/java/brooklyn/internal/BrooklynInitialization.java
+++ /dev/null
@@ -1,81 +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.internal;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.apache.brooklyn.location.basic.PortRanges;
-import brooklyn.util.crypto.SecureKeys;
-import brooklyn.util.flags.TypeCoercions;
-import brooklyn.util.net.Networking;
-
-import com.google.common.annotations.Beta;
-
-/** Various static initialization tasks are routed through this class,
- * to give us better traceability of their invocation. */ 
-@Beta
-public class BrooklynInitialization {
-
-    private static AtomicBoolean done = new AtomicBoolean(false);
-    
-    public static void initTypeCoercionStandardAdapters() {
-        TypeCoercions.initStandardAdapters();
-    }
-
-    public static void initSecureKeysBouncyCastleProvider() {
-        SecureKeys.initBouncyCastleProvider();
-    }
-
-    public static void initNetworking() {
-        Networking.init();
-    }
-    
-    public static void initPortRanges() {
-        PortRanges.init();
-    }
-
-    @SuppressWarnings("deprecation")
-    public static void initLegacyLanguageExtensions() {
-        brooklyn.util.BrooklynLanguageExtensions.init();
-    }
-
-    /* other things:
-     * 
-     * RendererHints - done by the entity classes which need them, including Sensors
-     * 
-     */
-    
-    public synchronized static void initAll() {
-        if (done.get()) return;
-        initTypeCoercionStandardAdapters();
-        initSecureKeysBouncyCastleProvider();
-        initNetworking();
-        initPortRanges();
-        initLegacyLanguageExtensions();
-        done.set(true);
-    }
-
-    @SuppressWarnings("deprecation")
-    public synchronized static void reinitAll() {
-        done.set(false);
-        brooklyn.util.BrooklynLanguageExtensions.reinit();
-        initAll();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java b/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
index dd25090..86aac7e 100644
--- a/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
+++ b/core/src/main/java/brooklyn/util/BrooklynLanguageExtensions.java
@@ -20,7 +20,8 @@ package brooklyn.util;
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import brooklyn.internal.BrooklynInitialization;
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
+
 import brooklyn.util.internal.TimeExtras;
 
 /** @deprecated since 0.7.0 use {@link BrooklynInitialization} */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/ResourceUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/ResourceUtils.java b/core/src/main/java/brooklyn/util/ResourceUtils.java
index 53264e3..9b23b7a 100644
--- a/core/src/main/java/brooklyn/util/ResourceUtils.java
+++ b/core/src/main/java/brooklyn/util/ResourceUtils.java
@@ -40,6 +40,7 @@ import java.util.regex.Pattern;
 
 import org.apache.brooklyn.api.management.ManagementContext;
 import org.apache.brooklyn.api.management.classloading.BrooklynClassLoadingContext;
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.apache.brooklyn.core.management.classloading.JavaBrooklynClassLoadingContext;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
@@ -53,7 +54,6 @@ import org.slf4j.LoggerFactory;
 
 import brooklyn.catalog.internal.BasicBrooklynCatalog.BrooklynLoaderTracker;
 import brooklyn.catalog.internal.CatalogUtils;
-import brooklyn.internal.BrooklynInitialization;
 
 import org.apache.brooklyn.location.basic.SshMachineLocation;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java b/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
index 983a3d6..a1bc125 100644
--- a/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
+++ b/core/src/main/java/brooklyn/util/crypto/FluentKeySigner.java
@@ -28,11 +28,11 @@ import java.util.Date;
 
 import javax.security.auth.x500.X500Principal;
 
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier;
 import org.bouncycastle.asn1.x509.X509Extension;
 import org.bouncycastle.jce.X509Principal;
 
-import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.exceptions.Exceptions;
 
 /** A fluent API which simplifies generating certificates (signed keys) */

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/crypto/SecureKeys.java b/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
index 23a46d0..29fcf32 100644
--- a/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
+++ b/core/src/main/java/brooklyn/util/crypto/SecureKeys.java
@@ -28,6 +28,7 @@ import java.security.PrivateKey;
 import java.security.PublicKey;
 import java.security.Security;
 
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
 import org.bouncycastle.jce.X509Principal;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
@@ -42,7 +43,6 @@ import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.stream.Streams;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/flags/TypeCoercions.java b/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
index 7bfb770..31f27be 100644
--- a/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
+++ b/core/src/main/java/brooklyn/util/flags/TypeCoercions.java
@@ -45,6 +45,7 @@ import javax.annotation.concurrent.GuardedBy;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.event.AttributeSensor;
 import org.apache.brooklyn.api.event.Sensor;
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,7 +54,6 @@ import brooklyn.entity.basic.ClosureEntityFactory;
 import brooklyn.entity.basic.ConfigurableEntityFactory;
 import brooklyn.entity.basic.ConfigurableEntityFactoryFromEntityFactory;
 import brooklyn.event.basic.Sensors;
-import brooklyn.internal.BrooklynInitialization;
 import brooklyn.util.JavaGroovyEquivalents;
 import brooklyn.util.collections.MutableSet;
 import brooklyn.util.collections.QuorumCheck;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java b/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
index 8fa38ad..e069aa9 100644
--- a/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
+++ b/core/src/main/java/brooklyn/util/internal/ssh/sshj/SshjTool.java
@@ -49,11 +49,11 @@ import net.schmizz.sshj.sftp.SFTPClient;
 import net.schmizz.sshj.transport.TransportException;
 import net.schmizz.sshj.xfer.InMemorySourceFile;
 
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.commons.io.input.ProxyInputStream;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.exceptions.RuntimeTimeoutException;
 import brooklyn.util.internal.ssh.BackoffLimitedRetryHandler;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/brooklyn/util/task/BasicExecutionManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/task/BasicExecutionManager.java b/core/src/main/java/brooklyn/util/task/BasicExecutionManager.java
index c472132..13d035b 100644
--- a/core/src/main/java/brooklyn/util/task/BasicExecutionManager.java
+++ b/core/src/main/java/brooklyn/util/task/BasicExecutionManager.java
@@ -49,10 +49,10 @@ import org.apache.brooklyn.api.management.ExecutionManager;
 import org.apache.brooklyn.api.management.HasTaskChildren;
 import org.apache.brooklyn.api.management.Task;
 import org.apache.brooklyn.api.management.TaskAdaptable;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.text.Identifiers;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
new file mode 100644
index 0000000..24d138b
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablement.java
@@ -0,0 +1,210 @@
+/*
+ * 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 org.apache.brooklyn.core.internal;
+
+import java.util.Map;
+
+import org.apache.brooklyn.api.management.ha.HighAvailabilityMode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.config.BrooklynProperties;
+import brooklyn.internal.storage.BrooklynStorage;
+import brooklyn.util.internal.ssh.ShellTool;
+
+import com.google.common.annotations.Beta;
+import com.google.common.collect.Maps;
+
+/**
+ * For enabling/disabling experimental features.
+ * They can be enabled via java system properties, or by explicitly calling {@link #setEnablement(String, boolean)}.
+ * <p>
+ * For example, start brooklyn with {@code -Dbrooklyn.experimental.feature.policyPersistence=true}
+ * 
+ * @author aled
+ */
+@Beta
+public class BrooklynFeatureEnablement {
+
+    private static final Logger LOG = LoggerFactory.getLogger(BrooklynFeatureEnablement.class);
+
+    public static final String FEATURE_PROPERTY_PREFIX = "brooklyn.experimental.feature";
+    
+    public static final String FEATURE_POLICY_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".policyPersistence";
+    
+    public static final String FEATURE_ENRICHER_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".enricherPersistence";
+
+    public static final String FEATURE_FEED_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".feedPersistence";
+    
+    /** whether feeds are automatically registered when set on entities, so that they are persisted */
+    public static final String FEATURE_FEED_REGISTRATION_PROPERTY = FEATURE_PROPERTY_PREFIX+".feedRegistration";
+
+    public static final String FEATURE_CATALOG_PERSISTENCE_PROPERTY = FEATURE_PROPERTY_PREFIX+".catalogPersistence";
+    
+    /** whether the default standby mode is {@link HighAvailabilityMode#HOT_STANDBY} or falling back to the traditional
+     * {@link HighAvailabilityMode#STANDBY} */
+    public static final String FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY = FEATURE_PROPERTY_PREFIX+".defaultStandbyIsHot";
+    
+    /** whether to attempt to use {@link BrooklynStorage} (datagrid) as a backing store for data;
+     * note this is <b>not</b> compatible with {@link #FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY} 
+     * which uses a blob/file store and a larger-granularity rebind process than was intended with the datagrid */
+    /* not sure if we still even need this? now the rebind/read-only feature reloads on demand from the persistence store;
+     * the data-grid backing  */
+    public static final String FEATURE_USE_BROOKLYN_LIVE_OBJECTS_DATAGRID_STORAGE = FEATURE_PROPERTY_PREFIX+".useBrooklynLiveObjectsDatagridStorage";
+
+    /**
+     * Renaming threads can really helps with debugging etc; however it's a massive performance hit (2x)
+     * <p>
+     * We get 55000 tasks per sec with this off, 28k/s with this on.
+     * <p>
+     * Defaults to false if system property is not set.
+     */
+    public static final String FEATURE_RENAME_THREADS = "brooklyn.executionManager.renameThreads";
+
+    /**
+     * When rebinding to state created from very old versions, the catalogItemId properties will be missing which
+     * results in errors when OSGi bundles are used. When enabled the code tries to infer the catalogItemId from
+     * <ul>
+     *   <li> parent entities
+     *   <li> catalog items matching the type that needs to be deserialized
+     *   <li> iterating through all catalog items and checking if they can provide the needed type
+     * </ul>
+     */
+    public static final String FEATURE_BACKWARDS_COMPATIBILITY_INFER_CATALOG_ITEM_ON_REBIND = "brooklyn.backwardCompatibility.feature.inferCatalogItemOnRebind";
+    
+    /**
+     * When rebinding, an entity could reference a catalog item that no longer exists. This option 
+     * will automatically update the catalog item reference to what is inferred as the most 
+     * suitable catalog symbolicName:version.
+     */
+    public static final String FEATURE_AUTO_FIX_CATALOG_REF_ON_REBIND = "brooklyn.quickfix.fixDanglingCatalogItemOnRebind";
+    
+    /**
+     * When executing over ssh, whether to support the "async exec" approach, or only the classic approach.
+     * 
+     * If this feature is disabled, then even if the {@link ShellTool#PROP_EXEC_ASYNC} is configured it
+     * will still use the classic ssh approach.
+     */
+    public static final String FEATURE_SSH_ASYNC_EXEC = FEATURE_PROPERTY_PREFIX+".ssh.asyncExec";
+
+    public static final String FEATURE_VALIDATE_LOCATION_SSH_KEYS = "brooklyn.validate.locationSshKeys";
+    
+    private static final Map<String, Boolean> FEATURE_ENABLEMENTS = Maps.newLinkedHashMap();
+
+    private static final Object MUTEX = new Object();
+
+    static void setDefaults() {
+        // Idea is here one can put experimental features that are *enabled* by default, but 
+        // that can be turned off via system properties, or vice versa.
+        // Typically this is useful where a feature is deemed risky!
+        
+        setDefault(FEATURE_POLICY_PERSISTENCE_PROPERTY, true);
+        setDefault(FEATURE_ENRICHER_PERSISTENCE_PROPERTY, true);
+        setDefault(FEATURE_FEED_PERSISTENCE_PROPERTY, true);
+        setDefault(FEATURE_FEED_REGISTRATION_PROPERTY, false);
+        setDefault(FEATURE_CATALOG_PERSISTENCE_PROPERTY, true);
+        setDefault(FEATURE_DEFAULT_STANDBY_IS_HOT_PROPERTY, false);
+        setDefault(FEATURE_USE_BROOKLYN_LIVE_OBJECTS_DATAGRID_STORAGE, false);
+        setDefault(FEATURE_RENAME_THREADS, false);
+        setDefault(FEATURE_BACKWARDS_COMPATIBILITY_INFER_CATALOG_ITEM_ON_REBIND, true);
+        setDefault(FEATURE_AUTO_FIX_CATALOG_REF_ON_REBIND, false);
+        setDefault(FEATURE_SSH_ASYNC_EXEC, false);
+        setDefault(FEATURE_VALIDATE_LOCATION_SSH_KEYS, true);
+    }
+    
+    static {
+        setDefaults();
+    }
+    
+    /**
+     * Initialises the feature-enablement from brooklyn properties. For each
+     * property, prefer a system-property if present; otherwise use the value 
+     * from brooklyn properties.
+     */
+    public static void init(BrooklynProperties props) {
+        boolean changed = false;
+        for (Map.Entry<String, Object> entry : props.asMapWithStringKeys().entrySet()) {
+            String property = entry.getKey();
+            if (property.startsWith(FEATURE_PROPERTY_PREFIX)) {
+                if (!FEATURE_ENABLEMENTS.containsKey(property)) {
+                    Object rawVal = System.getProperty(property);
+                    if (rawVal == null) {
+                        rawVal = entry.getValue();
+                    }
+                    boolean val = Boolean.parseBoolean(""+rawVal);
+                    FEATURE_ENABLEMENTS.put(property, val);
+                    
+                    changed = true;
+                    LOG.debug("Init feature enablement of "+property+" set to "+val);
+                }
+            }
+        }
+        if (!changed) {
+            LOG.debug("Init feature enablement did nothing, as no settings in brooklyn properties");
+        }
+    }
+    
+    public static boolean isEnabled(String property) {
+        synchronized (MUTEX) {
+            if (!FEATURE_ENABLEMENTS.containsKey(property)) {
+                String rawVal = System.getProperty(property);
+                boolean val = Boolean.parseBoolean(rawVal);
+                FEATURE_ENABLEMENTS.put(property, val);
+            }
+            return FEATURE_ENABLEMENTS.get(property);
+        }
+    }
+
+    public static boolean enable(String property) {
+        return setEnablement(property, true);
+    }
+    
+    public static boolean disable(String property) {
+        return setEnablement(property, false);
+    }
+    
+    public static boolean setEnablement(String property, boolean val) {
+        synchronized (MUTEX) {
+            boolean oldVal = isEnabled(property);
+            FEATURE_ENABLEMENTS.put(property, val);
+            return oldVal;
+        }
+    }
+    
+    static void setDefault(String property, boolean val) {
+        synchronized (MUTEX) {
+            if (!FEATURE_ENABLEMENTS.containsKey(property)) {
+                String rawVal = System.getProperty(property);
+                if (rawVal == null) {
+                    FEATURE_ENABLEMENTS.put(property, val);
+                    LOG.debug("Default enablement of "+property+" set to "+val);
+                } else {
+                    LOG.debug("Not setting default enablement of "+property+" to "+val+", because system property is "+rawVal);
+                }
+            }
+        }
+    }
+    
+    static void clearCache() {
+        synchronized (MUTEX) {
+            FEATURE_ENABLEMENTS.clear();
+            setDefaults();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java
new file mode 100644
index 0000000..1858306
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/internal/BrooklynInitialization.java
@@ -0,0 +1,81 @@
+/*
+ * 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 org.apache.brooklyn.core.internal;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.brooklyn.location.basic.PortRanges;
+import brooklyn.util.crypto.SecureKeys;
+import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.net.Networking;
+
+import com.google.common.annotations.Beta;
+
+/** Various static initialization tasks are routed through this class,
+ * to give us better traceability of their invocation. */ 
+@Beta
+public class BrooklynInitialization {
+
+    private static AtomicBoolean done = new AtomicBoolean(false);
+    
+    public static void initTypeCoercionStandardAdapters() {
+        TypeCoercions.initStandardAdapters();
+    }
+
+    public static void initSecureKeysBouncyCastleProvider() {
+        SecureKeys.initBouncyCastleProvider();
+    }
+
+    public static void initNetworking() {
+        Networking.init();
+    }
+    
+    public static void initPortRanges() {
+        PortRanges.init();
+    }
+
+    @SuppressWarnings("deprecation")
+    public static void initLegacyLanguageExtensions() {
+        brooklyn.util.BrooklynLanguageExtensions.init();
+    }
+
+    /* other things:
+     * 
+     * RendererHints - done by the entity classes which need them, including Sensors
+     * 
+     */
+    
+    public synchronized static void initAll() {
+        if (done.get()) return;
+        initTypeCoercionStandardAdapters();
+        initSecureKeysBouncyCastleProvider();
+        initNetworking();
+        initPortRanges();
+        initLegacyLanguageExtensions();
+        done.set(true);
+    }
+
+    @SuppressWarnings("deprecation")
+    public synchronized static void reinitAll() {
+        done.set(false);
+        brooklyn.util.BrooklynLanguageExtensions.reinit();
+        initAll();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java b/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
index 8a02fcf..25d8281 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerImpl.java
@@ -42,6 +42,7 @@ import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecord;
 import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecordPersister;
 import org.apache.brooklyn.api.management.ha.MementoCopyMode;
 import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecordPersister.Delta;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.ha.BasicMasterChooser.AlphabeticMasterChooser;
 import org.apache.brooklyn.core.management.internal.BrooklynObjectManagementMode;
 import org.apache.brooklyn.core.management.internal.LocalEntityManager;
@@ -66,7 +67,6 @@ import brooklyn.entity.rebind.persister.PersistenceActivityMetrics;
 import brooklyn.entity.rebind.plane.dto.BasicManagementNodeSyncRecord;
 import brooklyn.entity.rebind.plane.dto.ManagementPlaneSyncRecordImpl;
 import brooklyn.entity.rebind.plane.dto.ManagementPlaneSyncRecordImpl.Builder;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.exceptions.Exceptions;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
index 306dcd8..3c353e2 100644
--- a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalManagementContext.java
@@ -42,6 +42,7 @@ import org.apache.brooklyn.api.management.ManagementContext;
 import org.apache.brooklyn.api.management.SubscriptionManager;
 import org.apache.brooklyn.api.management.Task;
 import org.apache.brooklyn.api.management.TaskAdaptable;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.entitlement.Entitlements;
 import org.apache.brooklyn.core.management.ha.OsgiManager;
 import org.slf4j.Logger;
@@ -54,7 +55,6 @@ import brooklyn.entity.effector.Effectors;
 import brooklyn.entity.proxying.InternalEntityFactory;
 import brooklyn.entity.proxying.InternalLocationFactory;
 import brooklyn.entity.proxying.InternalPolicyFactory;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.internal.storage.DataGridFactory;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.guava.Maybe;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/org/apache/brooklyn/location/basic/AbstractLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/AbstractLocation.java b/core/src/main/java/org/apache/brooklyn/location/basic/AbstractLocation.java
index c5a74a0..554a781 100644
--- a/core/src/main/java/org/apache/brooklyn/location/basic/AbstractLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/location/basic/AbstractLocation.java
@@ -35,6 +35,7 @@ import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.management.Task;
 import org.apache.brooklyn.api.mementos.LocationMemento;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.internal.LocalLocationManager;
 import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
 import org.slf4j.Logger;
@@ -47,7 +48,6 @@ import brooklyn.config.ConfigKey.HasConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
 import brooklyn.entity.rebind.BasicLocationRebindSupport;
 import brooklyn.event.basic.BasicConfigKey;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.internal.storage.BrooklynStorage;
 import brooklyn.internal.storage.Reference;
 import brooklyn.internal.storage.impl.BasicReference;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java b/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
index ce3c444..d34a199 100644
--- a/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/location/basic/LocationConfigUtils.java
@@ -31,13 +31,15 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.basic.ConfigKeys;
-import brooklyn.internal.BrooklynFeatureEnablement;
+
 import org.apache.brooklyn.location.cloud.CloudLocationConfig;
+
 import brooklyn.util.ResourceUtils;
 import brooklyn.util.collections.MutableMap;
 import brooklyn.util.collections.MutableSet;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
index 5d95534..f46df75 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogItemTest.java
@@ -40,6 +40,7 @@ import org.apache.brooklyn.api.catalog.CatalogItem;
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
 import org.apache.brooklyn.api.entity.proxying.EntitySpec;
 import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.internal.LocalManagementContext;
 import org.apache.brooklyn.test.entity.TestEntity;
 
@@ -47,7 +48,6 @@ import brooklyn.catalog.internal.BasicBrooklynCatalog;
 import brooklyn.catalog.internal.CatalogDto;
 import brooklyn.config.BrooklynProperties;
 import brooklyn.config.BrooklynServerConfig;
-import brooklyn.internal.BrooklynFeatureEnablement;
 
 import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
index 2c3890c..7654759 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindCatalogWhenCatalogPersistenceDisabledTest.java
@@ -30,12 +30,12 @@ import brooklyn.camp.lite.CampPlatformWithJustBrooklynMgmt;
 
 import org.apache.brooklyn.api.catalog.CatalogItem;
 import org.apache.brooklyn.api.entity.proxying.EntitySpec;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.internal.LocalManagementContext;
 import org.apache.brooklyn.test.entity.TestEntity;
 
 import brooklyn.config.BrooklynProperties;
 import brooklyn.config.BrooklynServerConfig;
-import brooklyn.internal.BrooklynFeatureEnablement;
 
 import com.google.common.collect.Iterables;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java b/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java
deleted file mode 100644
index ea0fed6..0000000
--- a/core/src/test/java/brooklyn/internal/BrooklynFeatureEnablementTest.java
+++ /dev/null
@@ -1,118 +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.internal;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
-
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import brooklyn.config.BrooklynProperties;
-
-public class BrooklynFeatureEnablementTest {
-
-    @BeforeMethod(alwaysRun=true)
-    public void setUp() throws Exception {
-        BrooklynFeatureEnablement.clearCache();
-    }
-    
-    @Test
-    public void testDefaultIsNotEnabled() throws Exception {
-        assertFalse(BrooklynFeatureEnablement.isEnabled("feature.not.referenced.anywhere"));
-    }
-    
-    @Test
-    public void testCanSetPropertyEnablement() throws Exception {
-        String featureProperty = "brooklyn.experimental.feature.testCanSetPropertyEnablement";
-        boolean preTestVal = BrooklynFeatureEnablement.isEnabled(featureProperty);
-        try {
-            boolean oldVal = BrooklynFeatureEnablement.enable(featureProperty);
-            assertEquals(oldVal, preTestVal);
-            assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
-            
-            boolean oldVal2 = BrooklynFeatureEnablement.disable(featureProperty);
-            assertTrue(oldVal2);
-            assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty));
-        } finally {
-            BrooklynFeatureEnablement.setEnablement(featureProperty, preTestVal);
-        }
-    }
-    
-    @Test
-    public void testReadsEnablementFromProperties() throws Exception {
-        String featureProperty = "brooklyn.experimental.feature.testReadsEnablementFromProperties";
-        System.setProperty(featureProperty, "true");
-        try {
-            assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
-        } finally {
-            System.clearProperty(featureProperty);
-        }
-    }
-    
-    @Test
-    public void testCanSetDefaultWhichTakesEffectIfNoSystemProperty() throws Exception {
-        String featureProperty = "brooklyn.experimental.feature.testCanSetDefaultWhichTakesEffectIfNoSystemProperty";
-        BrooklynFeatureEnablement.setDefault(featureProperty, true);
-        assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
-        System.setProperty(featureProperty, "true");
-        try {
-        } finally {
-            System.clearProperty(featureProperty);
-        }
-    }
-    
-    @Test
-    public void testCanSetDefaultWhichIsIgnoredIfSystemProperty() throws Exception {
-        String featureProperty = "brooklyn.experimental.feature.testCanSetDefaultWhichIsIgnoredIfSystemProperty";
-        System.setProperty(featureProperty, "false");
-        try {
-            BrooklynFeatureEnablement.setDefault(featureProperty, true);
-            assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty));
-        } finally {
-            System.clearProperty(featureProperty);
-        }
-    }
-    
-    @Test
-    public void testCanSetDefaultWhichIsIgnoredIfBrooklynProps() throws Exception {
-        String featureProperty = "brooklyn.experimental.feature.testCanSetDefaultWhichIsIgnoredIfBrooklynProps";
-        BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
-        props.put(featureProperty, false);
-        BrooklynFeatureEnablement.init(props);
-        BrooklynFeatureEnablement.setDefault(featureProperty, true);
-        assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty));
-    }
-    
-    @Test
-    public void testPrefersSysPropOverBrooklynProps() throws Exception {
-        String featureProperty = "brooklyn.experimental.feature.testPrefersSysPropOverBrooklynProps";
-        BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
-        props.put(featureProperty, false);
-        System.setProperty(featureProperty, "true");
-        try {
-            BrooklynFeatureEnablement.init(props);
-            BrooklynFeatureEnablement.setDefault(featureProperty, true);
-            assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
-        } finally {
-            System.clearProperty(featureProperty);
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
index 9d468a6..df0330a 100644
--- a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
+++ b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolAsyncStubIntegrationTest.java
@@ -25,11 +25,11 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.util.List;
 
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.internal.ssh.SshAbstractTool.SshAction;
 import brooklyn.util.internal.ssh.sshj.SshjTool.ShellAction;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
index de3f58e..f1e354c 100644
--- a/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
+++ b/core/src/test/java/brooklyn/util/internal/ssh/sshj/SshjToolIntegrationTest.java
@@ -36,9 +36,9 @@ import java.util.concurrent.atomic.AtomicReference;
 
 import net.schmizz.sshj.connection.channel.direct.Session;
 
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.testng.annotations.Test;
 
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.test.Asserts;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.exceptions.RuntimeTimeoutException;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablementTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablementTest.java b/core/src/test/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablementTest.java
new file mode 100644
index 0000000..93ed8db
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/internal/BrooklynFeatureEnablementTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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 org.apache.brooklyn.core.internal;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import brooklyn.config.BrooklynProperties;
+
+public class BrooklynFeatureEnablementTest {
+
+    @BeforeMethod(alwaysRun=true)
+    public void setUp() throws Exception {
+        BrooklynFeatureEnablement.clearCache();
+    }
+    
+    @Test
+    public void testDefaultIsNotEnabled() throws Exception {
+        assertFalse(BrooklynFeatureEnablement.isEnabled("feature.not.referenced.anywhere"));
+    }
+    
+    @Test
+    public void testCanSetPropertyEnablement() throws Exception {
+        String featureProperty = "brooklyn.experimental.feature.testCanSetPropertyEnablement";
+        boolean preTestVal = BrooklynFeatureEnablement.isEnabled(featureProperty);
+        try {
+            boolean oldVal = BrooklynFeatureEnablement.enable(featureProperty);
+            assertEquals(oldVal, preTestVal);
+            assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
+            
+            boolean oldVal2 = BrooklynFeatureEnablement.disable(featureProperty);
+            assertTrue(oldVal2);
+            assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty));
+        } finally {
+            BrooklynFeatureEnablement.setEnablement(featureProperty, preTestVal);
+        }
+    }
+    
+    @Test
+    public void testReadsEnablementFromProperties() throws Exception {
+        String featureProperty = "brooklyn.experimental.feature.testReadsEnablementFromProperties";
+        System.setProperty(featureProperty, "true");
+        try {
+            assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
+        } finally {
+            System.clearProperty(featureProperty);
+        }
+    }
+    
+    @Test
+    public void testCanSetDefaultWhichTakesEffectIfNoSystemProperty() throws Exception {
+        String featureProperty = "brooklyn.experimental.feature.testCanSetDefaultWhichTakesEffectIfNoSystemProperty";
+        BrooklynFeatureEnablement.setDefault(featureProperty, true);
+        assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
+        System.setProperty(featureProperty, "true");
+        try {
+        } finally {
+            System.clearProperty(featureProperty);
+        }
+    }
+    
+    @Test
+    public void testCanSetDefaultWhichIsIgnoredIfSystemProperty() throws Exception {
+        String featureProperty = "brooklyn.experimental.feature.testCanSetDefaultWhichIsIgnoredIfSystemProperty";
+        System.setProperty(featureProperty, "false");
+        try {
+            BrooklynFeatureEnablement.setDefault(featureProperty, true);
+            assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty));
+        } finally {
+            System.clearProperty(featureProperty);
+        }
+    }
+    
+    @Test
+    public void testCanSetDefaultWhichIsIgnoredIfBrooklynProps() throws Exception {
+        String featureProperty = "brooklyn.experimental.feature.testCanSetDefaultWhichIsIgnoredIfBrooklynProps";
+        BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
+        props.put(featureProperty, false);
+        BrooklynFeatureEnablement.init(props);
+        BrooklynFeatureEnablement.setDefault(featureProperty, true);
+        assertFalse(BrooklynFeatureEnablement.isEnabled(featureProperty));
+    }
+    
+    @Test
+    public void testPrefersSysPropOverBrooklynProps() throws Exception {
+        String featureProperty = "brooklyn.experimental.feature.testPrefersSysPropOverBrooklynProps";
+        BrooklynProperties props = BrooklynProperties.Factory.newEmpty();
+        props.put(featureProperty, false);
+        System.setProperty(featureProperty, "true");
+        try {
+            BrooklynFeatureEnablement.init(props);
+            BrooklynFeatureEnablement.setDefault(featureProperty, true);
+            assertTrue(BrooklynFeatureEnablement.isEnabled(featureProperty));
+        } finally {
+            System.clearProperty(featureProperty);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/core/src/test/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerSplitBrainTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerSplitBrainTest.java b/core/src/test/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerSplitBrainTest.java
index 7e34071..15caa29 100644
--- a/core/src/test/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerSplitBrainTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/management/ha/HighAvailabilityManagerSplitBrainTest.java
@@ -34,6 +34,7 @@ import org.apache.brooklyn.api.management.ha.ManagementNodeState;
 import org.apache.brooklyn.api.management.ha.ManagementNodeSyncRecord;
 import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecord;
 import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecordPersister;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.ha.HighAvailabilityManagerImpl;
 import org.apache.brooklyn.core.management.ha.ManagementPlaneSyncRecordPersisterToObjectStore;
 import org.apache.brooklyn.core.management.ha.TestEntityFailingRebind.RebindException;
@@ -54,7 +55,6 @@ import brooklyn.entity.rebind.persister.InMemoryObjectStore;
 import brooklyn.entity.rebind.persister.ListeningObjectStore;
 import brooklyn.entity.rebind.persister.PersistMode;
 import brooklyn.entity.rebind.persister.PersistenceObjectStore;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.test.Asserts;
 import brooklyn.util.collections.MutableList;
 import brooklyn.util.collections.MutableMap;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
index f18b414..57ea76d 100644
--- a/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
+++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/proxy/nginx/NginxRebindWithHaIntegrationTest.java
@@ -30,6 +30,7 @@ import org.apache.brooklyn.api.entity.proxying.EntitySpec;
 import org.apache.brooklyn.api.location.LocationSpec;
 import org.apache.brooklyn.api.management.Task;
 import org.apache.brooklyn.api.management.ha.HighAvailabilityMode;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.apache.brooklyn.core.management.internal.LocalManagementContext;
 import org.apache.brooklyn.entity.proxy.nginx.NginxController;
 import org.apache.brooklyn.entity.webapp.tomcat.TomcatServer;
@@ -51,7 +52,6 @@ import brooklyn.entity.basic.Lifecycle;
 import brooklyn.entity.group.DynamicCluster;
 import brooklyn.entity.rebind.RebindTestFixtureWithApp;
 import brooklyn.entity.rebind.RebindTestUtils;
-import brooklyn.internal.BrooklynFeatureEnablement;
 
 import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation;
 import org.apache.brooklyn.location.basic.SshMachineLocationReuseIntegrationTest.RecordingSshjTool;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
index 8d50dde..3081243 100644
--- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
+++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlRebindTest.java
@@ -24,13 +24,13 @@ import static org.testng.Assert.assertFalse;
 import org.apache.brooklyn.api.policy.Enricher;
 import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.camp.brooklyn.AbstractYamlRebindTest;
+import org.apache.brooklyn.core.internal.BrooklynFeatureEnablement;
 import org.testng.annotations.Test;
 
 import brooklyn.catalog.internal.CatalogUtils;
 import brooklyn.entity.basic.BasicEntity;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.StartableApplication;
-import brooklyn.internal.BrooklynFeatureEnablement;
 import brooklyn.test.policy.TestEnricher;
 import brooklyn.test.policy.TestPolicy;
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/9cf456dc/usage/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java b/usage/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
index c9bf366..13ee15a 100644
--- a/usage/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
+++ b/usage/launcher/src/main/java/org/apache/brooklyn/launcher/BrooklynWebServer.java
@@ -63,10 +63,10 @@ import brooklyn.BrooklynVersion;
 import brooklyn.config.BrooklynServerPaths;
 import brooklyn.config.BrooklynServiceAttributes;
 import brooklyn.config.ConfigKey;
-import brooklyn.internal.BrooklynInitialization;
 
 import org.apache.brooklyn.api.location.PortRange;
 import org.apache.brooklyn.api.management.ManagementContext;
+import org.apache.brooklyn.core.internal.BrooklynInitialization;
 import org.apache.brooklyn.core.management.internal.ManagementContextInternal;
 import org.apache.brooklyn.launcher.config.CustomResourceLocator;
 import org.apache.brooklyn.location.basic.LocalhostMachineProvisioningLocation;