You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by ge...@apache.org on 2017/03/01 09:37:26 UTC

[2/3] brooklyn-server git commit: Move the following objects from mgmt.getConfig() to mgmt.getScratchpad(), still keeping the value in mgmt.getConfig() for backwards compatibility. * BrooklynCampConstants.CAMP_PLATFORM * CampYamlParser.YAML_PARSER_KEY *

Move the following objects from mgmt.getConfig() to mgmt.getScratchpad(), still keeping the value in mgmt.getConfig() for backwards compatibility.
* BrooklynCampConstants.CAMP_PLATFORM
* CampYamlParser.YAML_PARSER_KEY
* BrooklynServiceAttributes.BROOKLYN_REST_OBJECT_MAPPER
* BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/90921b37
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/90921b37
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/90921b37

Branch: refs/heads/master
Commit: 90921b37220594ad73a8bbf7b25890041f83d770
Parents: fc6047c
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Thu Feb 16 17:05:05 2017 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Tue Feb 28 18:57:17 2017 +0200

----------------------------------------------------------------------
 .../brooklyn/api/mgmt/ManagementContext.java    |  3 +-
 .../apache/brooklyn/api/mgmt/Scratchpad.java    | 27 ++++++++++++
 .../camp/brooklyn/BrooklynCampPlatform.java     |  6 ++-
 .../camp/brooklyn/ExternalConfigYamlTest.java   |  2 +-
 .../brooklyn/ReloadBrooklynPropertiesTest.java  |  6 +--
 .../lite/CampPlatformWithJustBrooklynMgmt.java  |  2 +
 .../catalog/internal/BasicBrooklynCatalog.java  |  2 +-
 .../internal/AbstractManagementContext.java     |  8 ++--
 .../core/mgmt/internal/BasicScratchpad.java     | 43 ++++++++++++++++++++
 .../internal/DeferredBrooklynProperties.java    |  2 +-
 .../NonDeploymentManagementContext.java         |  3 +-
 .../LocalManagementContextRebindTest.java       | 11 +++--
 .../internal/LocalManagementContextTest.java    | 12 +++---
 .../brooklyn/launcher/osgi/OsgiLauncher.java    |  4 ++
 .../rest/security/jaas/BrooklynLoginModule.java |  2 +
 .../provider/DelegatingSecurityProvider.java    |  6 ++-
 .../util/json/BrooklynJacksonJsonProvider.java  |  4 +-
 .../filter/EntitlementContextFilterTest.java    |  2 +-
 18 files changed, 116 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
index f6d4e97..9057b95 100644
--- a/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
+++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/ManagementContext.java
@@ -21,7 +21,6 @@ package org.apache.brooklyn.api.mgmt;
 import java.io.Serializable;
 import java.net.URI;
 import java.util.Collection;
-import java.util.Map;
 
 import org.apache.brooklyn.api.catalog.BrooklynCatalog;
 import org.apache.brooklyn.api.entity.Application;
@@ -199,7 +198,7 @@ public interface ManagementContext {
      * <p>
      * The returned map is thread safe, no locking is required to use it from parallel threads.
      */
-    Map<Object, Object> getScratchpad();
+    Scratchpad getScratchpad();
     
     /**
      * Whether the management context has been initialized and not yet terminated.

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/api/src/main/java/org/apache/brooklyn/api/mgmt/Scratchpad.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/org/apache/brooklyn/api/mgmt/Scratchpad.java b/api/src/main/java/org/apache/brooklyn/api/mgmt/Scratchpad.java
new file mode 100644
index 0000000..da2ed47
--- /dev/null
+++ b/api/src/main/java/org/apache/brooklyn/api/mgmt/Scratchpad.java
@@ -0,0 +1,27 @@
+/*
+ * 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.api.mgmt;
+
+import org.apache.brooklyn.config.ConfigKey;
+
+public interface Scratchpad {
+    <T> T get(ConfigKey<T> key);
+    <T> void put(ConfigKey<T> key, T value);
+    boolean contains(ConfigKey<?> key);
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
index 947ecc2..a6c0a57 100644
--- a/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
+++ b/camp/camp-brooklyn/src/main/java/org/apache/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
@@ -65,7 +65,7 @@ public class BrooklynCampPlatform extends AggregatingCampPlatform implements Has
 
     /** finds and returns the {@link CampPlatform} registered for the management context, or null if none */
     @Nullable public static CampPlatform findPlatform(ManagementContext mgmt) {
-        return mgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+        return mgmt.getScratchpad().get(BrooklynCampConstants.CAMP_PLATFORM);
     }
     
     // --- brooklyn setup
@@ -85,8 +85,12 @@ public class BrooklynCampPlatform extends AggregatingCampPlatform implements Has
     }
 
     public BrooklynCampPlatform setConfigKeyAtManagmentContext() {
+        // Deprecated in 0.11.0. Add to release notes and remove in next release.
         ((ManagementContextInternal)bmc).getBrooklynProperties().put(BrooklynCampConstants.CAMP_PLATFORM, this);
         ((ManagementContextInternal)bmc).getBrooklynProperties().put(CampYamlParser.YAML_PARSER_KEY, new YamlParserImpl(this));
+
+        bmc.getScratchpad().put(BrooklynCampConstants.CAMP_PLATFORM, this);
+        bmc.getScratchpad().put(CampYamlParser.YAML_PARSER_KEY, new YamlParserImpl(this));
         return this;
     }
     

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
index 521a56c..3700fc9 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ExternalConfigYamlTest.java
@@ -89,7 +89,7 @@ public class ExternalConfigYamlTest extends AbstractYamlTest {
 
     @Test
     public void testCampYamlParserHandlesExternalisedConfig() throws Exception {
-        CampYamlParser parser = mgmt().getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY);
+        CampYamlParser parser = mgmt().getScratchpad().get(CampYamlParser.YAML_PARSER_KEY);
         
         DeferredSupplier<?> supplier = (DeferredSupplier<?>) parser.parse("$brooklyn:external(\"myprovider\", \"mykey\")");
         

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
index 504b605..929ab89 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ReloadBrooklynPropertiesTest.java
@@ -56,17 +56,17 @@ public class ReloadBrooklynPropertiesTest {
     
     @Test
     public void testReloadBrooklynPropertiesNonDeploy() {
-        CampPlatform platform = brooklynMgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+        CampPlatform platform = brooklynMgmt.getScratchpad().get(BrooklynCampConstants.CAMP_PLATFORM);
         Assert.assertNotNull(platform);
         brooklynMgmt.reloadBrooklynProperties();
-        CampPlatform reloadedPlatform = brooklynMgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+        CampPlatform reloadedPlatform = brooklynMgmt.getScratchpad().get(BrooklynCampConstants.CAMP_PLATFORM);
         Assert.assertEquals(reloadedPlatform, platform);
     }
     
     @Test
     public void testReloadBrooklynPropertiesDeploy() {
         brooklynMgmt.reloadBrooklynProperties();
-        CampPlatform reloadedPlatform = brooklynMgmt.getConfig().getConfig(BrooklynCampConstants.CAMP_PLATFORM);
+        CampPlatform reloadedPlatform = brooklynMgmt.getScratchpad().get(BrooklynCampConstants.CAMP_PLATFORM);
         Assert.assertNotNull(reloadedPlatform);
         Reader input = Streams.reader(new ResourceUtils(this).getResourceFromUrl("test-entity-basic-template.yaml"));
         AssemblyTemplate template = reloadedPlatform.pdp().registerDeploymentPlan(input);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
index 20681a6..b3ac8c0 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/test/lite/CampPlatformWithJustBrooklynMgmt.java
@@ -30,7 +30,9 @@ public class CampPlatformWithJustBrooklynMgmt extends BasicCampPlatform implemen
 
     public CampPlatformWithJustBrooklynMgmt(ManagementContext mgmt) {
         this.mgmt = mgmt;
+        // Deprecated in 0.11.0. Add to release notes and remove in next release.
         ((BrooklynProperties)mgmt.getConfig()).put(BrooklynCampConstants.CAMP_PLATFORM, this);
+        mgmt.getScratchpad().put(BrooklynCampConstants.CAMP_PLATFORM, this);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index d6f7fc8..a9a67e7 100644
--- a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -456,7 +456,7 @@ public class BasicBrooklynCatalog implements BrooklynCatalog {
                 .build();
         
         // Parse CAMP-YAML DSL in item metadata (but not in item or items - those will be parsed only when used). 
-        CampYamlParser parser = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY);
+        CampYamlParser parser = mgmt.getScratchpad().get(CampYamlParser.YAML_PARSER_KEY);
         if (parser != null) {
             itemMetadataWithoutItemDef = parser.parse((Map<String, Object>) itemMetadataWithoutItemDef);
             try {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
index dd83050..89d5b3c 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/AbstractManagementContext.java
@@ -27,7 +27,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -42,6 +41,7 @@ import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.location.LocationRegistry;
 import org.apache.brooklyn.api.mgmt.ExecutionContext;
 import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.mgmt.Scratchpad;
 import org.apache.brooklyn.api.mgmt.SubscriptionContext;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
@@ -161,7 +161,7 @@ public abstract class AbstractManagementContext implements ManagementContextInte
     private final AtomicLong totalEffectorInvocationCount = new AtomicLong();
 
     protected DeferredBrooklynProperties configMap;
-    protected Map<Object, Object> scratchpad;
+    protected Scratchpad scratchpad;
     protected BasicLocationRegistry locationRegistry;
     protected final BasicBrooklynCatalog catalog;
     protected final BrooklynTypeRegistry typeRegistry;
@@ -195,7 +195,7 @@ public abstract class AbstractManagementContext implements ManagementContextInte
 
     public AbstractManagementContext(BrooklynProperties brooklynProperties, DataGridFactory datagridFactory) {
         this.configMap = new DeferredBrooklynProperties(brooklynProperties, this);
-        this.scratchpad = new ConcurrentHashMap<>();
+        this.scratchpad = new BasicScratchpad();
         this.entityDriverManager = new BasicEntityDriverManager();
         this.downloadsManager = BasicDownloadsManager.newDefault(configMap);
         if (datagridFactory == null) {
@@ -386,7 +386,7 @@ public abstract class AbstractManagementContext implements ManagementContextInte
     }
 
     @Override
-    public Map<Object, Object> getScratchpad() {
+    public Scratchpad getScratchpad() {
         return scratchpad;
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicScratchpad.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicScratchpad.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicScratchpad.java
new file mode 100644
index 0000000..4dd2de4
--- /dev/null
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/BasicScratchpad.java
@@ -0,0 +1,43 @@
+/*
+ * 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.mgmt.internal;
+
+import org.apache.brooklyn.api.mgmt.Scratchpad;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.util.core.config.ConfigBag;
+
+public class BasicScratchpad implements Scratchpad {
+    private final ConfigBag storage = ConfigBag.newInstance();
+
+    @Override
+    public <T> T get(ConfigKey<T> key) {
+        return storage.get(key);
+    }
+
+    @Override
+    public <T> void put(ConfigKey<T> key, T value) {
+        storage.put(key, value);
+    }
+
+    @Override
+    public boolean contains(ConfigKey<?> key) {
+        return storage.containsKey(key);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
index ac523e6..c57e37e 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/DeferredBrooklynProperties.java
@@ -70,7 +70,7 @@ public class DeferredBrooklynProperties implements BrooklynProperties {
         if (value instanceof CharSequence) {
             String raw = value.toString();
             if (raw.startsWith(BROOKLYN_YAML_PREFIX)) {
-                CampYamlParser parser = mgmt.getConfig().getConfig(CampYamlParser.YAML_PARSER_KEY);
+                CampYamlParser parser = mgmt.getScratchpad().get(CampYamlParser.YAML_PARSER_KEY);
                 if (parser == null) {
                     // TODO Should we fail or return the untransformed value?
                     // Problem is this gets called during initialisation, e.g. by BrooklynFeatureEnablement calling asMapWithStringKeys()

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
index e76340d..dafb4c4 100644
--- a/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
+++ b/core/src/main/java/org/apache/brooklyn/core/mgmt/internal/NonDeploymentManagementContext.java
@@ -42,6 +42,7 @@ import org.apache.brooklyn.api.mgmt.EntityManager;
 import org.apache.brooklyn.api.mgmt.ExecutionContext;
 import org.apache.brooklyn.api.mgmt.ExecutionManager;
 import org.apache.brooklyn.api.mgmt.LocationManager;
+import org.apache.brooklyn.api.mgmt.Scratchpad;
 import org.apache.brooklyn.api.mgmt.SubscriptionContext;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.mgmt.entitlement.EntitlementManager;
@@ -297,7 +298,7 @@ public class NonDeploymentManagementContext implements ManagementContextInternal
     }
 
     @Override
-    public Map<Object, Object> getScratchpad() {
+    public Scratchpad getScratchpad() {
         checkInitialManagementContextReal();
         return initialManagementContext.getScratchpad();
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextRebindTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextRebindTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextRebindTest.java
index 906a17c..343f623 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextRebindTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextRebindTest.java
@@ -19,17 +19,20 @@
 package org.apache.brooklyn.core.mgmt.internal;
 
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertFalse;
 
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.mgmt.rebind.RebindTestFixtureWithApp;
 import org.testng.annotations.Test;
 
 public class LocalManagementContextRebindTest extends RebindTestFixtureWithApp {
     @Test
     public void testScratchpadLostOnRebind() throws Exception {
-        origManagementContext.getScratchpad().put("my", "key");
-        assertEquals(origManagementContext.getScratchpad().get("my"), "key");
+        ConfigKey<String> myKey = ConfigKeys.newStringConfigKey("my");
+        origManagementContext.getScratchpad().put(myKey, "key");
+        assertEquals(origManagementContext.getScratchpad().get(myKey), "key");
         rebind();
-        assertTrue(newManagementContext.getScratchpad().isEmpty(), "Scratchpad lost on rebind");
+        assertFalse(newManagementContext.getScratchpad().contains(myKey), "Scratchpad lost on rebind");
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextTest.java b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextTest.java
index 5fb1941..6067777 100644
--- a/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/mgmt/internal/LocalManagementContextTest.java
@@ -20,7 +20,6 @@ package org.apache.brooklyn.core.mgmt.internal;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotEquals;
-import static org.testng.Assert.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,9 +27,10 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.brooklyn.api.location.Location;
 import org.apache.brooklyn.api.mgmt.ManagementContext.PropertiesReloadListener;
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.internal.BrooklynProperties;
 import org.apache.brooklyn.core.internal.BrooklynProperties.Factory.Builder;
-import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext;
 import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests;
 import org.apache.brooklyn.util.os.Os;
 import org.testng.annotations.AfterMethod;
@@ -136,10 +136,10 @@ public class LocalManagementContextTest {
             .globalPropertiesFile(globalPropertiesFile.getAbsolutePath())
             .build();
         context = LocalManagementContextForTests.builder(true).useProperties(brooklynProperties).build();
-        assertTrue(context.getScratchpad().isEmpty(), "New scratchpad should be empty, no config here.");
-        context.getScratchpad().put("my", "key");
-        assertEquals(context.getScratchpad().get("my"), "key");
+        ConfigKey<String> myKey = ConfigKeys.newStringConfigKey("my");
+        context.getScratchpad().put(myKey, "key");
+        assertEquals(context.getScratchpad().get(myKey), "key");
         context.reloadBrooklynProperties();
-        assertEquals(context.getScratchpad().get("my"), "key");
+        assertEquals(context.getScratchpad().get(myKey), "key");
     }
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncher.java
----------------------------------------------------------------------
diff --git a/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncher.java b/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncher.java
index 594be6e..e3aa079 100644
--- a/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncher.java
+++ b/karaf/init/src/main/java/org/apache/brooklyn/launcher/osgi/OsgiLauncher.java
@@ -115,9 +115,13 @@ public class OsgiLauncher extends BasicLauncher<OsgiLauncher> {
         BrooklynProperties brooklynProperties = (BrooklynProperties) managementContext.getConfig();
         if (BrooklynWebConfig.hasNoSecurityOptions(brooklynProperties)) {
             LOG.info("No security provider options specified. Define a security provider or users to prevent a random password being created and logged.");
+            // Deprecated in 0.11.0. Add to release notes and remove in next release.
             brooklynProperties.put(
                     BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE,
                     new BrooklynUserWithRandomPasswordSecurityProvider(managementContext));
+            managementContext.getScratchpad().put(
+                    BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE,
+                    new BrooklynUserWithRandomPasswordSecurityProvider(managementContext));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/jaas/BrooklynLoginModule.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/jaas/BrooklynLoginModule.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/jaas/BrooklynLoginModule.java
index 6fc2efe..702f4fc 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/jaas/BrooklynLoginModule.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/jaas/BrooklynLoginModule.java
@@ -183,6 +183,8 @@ public class BrooklynLoginModule implements LoginModule {
             throw new IllegalStateException("Missing JAAS module property " + PROPERTY_BUNDLE_SYMBOLIC_NAME + " pointing at the bundle where to load the security provider from.");
         }
         if (provider != null) return;
+        provider = getManagementContext().getScratchpad().get(BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE);
+        if (provider != null) return;
         if (symbolicName != null) {
             if (className == null) {
                 className = brooklynProperties.getConfig(BrooklynWebConfig.SECURITY_PROVIDER_CLASSNAME);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/provider/DelegatingSecurityProvider.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/provider/DelegatingSecurityProvider.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/provider/DelegatingSecurityProvider.java
index b374189..94b7894 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/provider/DelegatingSecurityProvider.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/security/provider/DelegatingSecurityProvider.java
@@ -105,9 +105,11 @@ public class DelegatingSecurityProvider implements SecurityProvider {
             log.warn("REST unable to instantiate security provider " + className + "; all logins are being disallowed", e);
             delegate = new BlackholeSecurityProvider();
         }
-        
+
+        // Deprecated in 0.11.0. Add to release notes and remove in next release.
         ((BrooklynProperties)mgmt.getConfig()).put(BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE, delegate);
-        
+        mgmt.getScratchpad().put(BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE, delegate);
+
         return delegate;
     }
 

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java
index c099cf2..050fa4e 100644
--- a/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java
+++ b/rest/rest-resources/src/main/java/org/apache/brooklyn/rest/util/json/BrooklynJacksonJsonProvider.java
@@ -116,12 +116,12 @@ public class BrooklynJacksonJsonProvider extends JacksonJsonProvider implements
         checkNotNull(mgmt, "mgmt");
         synchronized (mgmt) {
             ConfigKey<ObjectMapper> key = ConfigKeys.newConfigKey(ObjectMapper.class, BROOKLYN_REST_OBJECT_MAPPER);
-            ObjectMapper mapper = mgmt.getConfig().getConfig(key);
+            ObjectMapper mapper = (ObjectMapper) mgmt.getScratchpad().get(key);
             if (mapper != null) return mapper;
 
             mapper = newPrivateObjectMapper(mgmt);
             log.debug("Storing new ObjectMapper against "+mgmt+" because no ServletContext available: "+mapper);
-            ((BrooklynProperties)mgmt.getConfig()).put(key, mapper);
+            mgmt.getScratchpad().put(key, mapper);
             return mapper;
         }
     }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/90921b37/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/filter/EntitlementContextFilterTest.java
----------------------------------------------------------------------
diff --git a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/filter/EntitlementContextFilterTest.java b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/filter/EntitlementContextFilterTest.java
index b3a08c1..0d37cc8 100644
--- a/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/filter/EntitlementContextFilterTest.java
+++ b/rest/rest-resources/src/test/java/org/apache/brooklyn/rest/filter/EntitlementContextFilterTest.java
@@ -56,7 +56,7 @@ public class EntitlementContextFilterTest extends BrooklynRestResourceTest {
         BrooklynProperties props = (BrooklynProperties)getManagementContext().getConfig();
         props.put(BrooklynWebConfig.USERS, USER_PASS);
         props.put(BrooklynWebConfig.PASSWORD_FOR_USER(USER_PASS), USER_PASS);
-        props.put(BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE, new ExplicitUsersSecurityProvider(getManagementContext()));
+        getManagementContext().getScratchpad().put(BrooklynWebConfig.SECURITY_PROVIDER_INSTANCE, new ExplicitUsersSecurityProvider(getManagementContext()));
 
         super.configureCXF(sf);