Repository: incubator-brooklyn Updated Branches: refs/heads/master 5dfe944e5 -> ad4cfe6c6
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/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 b29c178..ab14c42 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 @@ -43,6 +43,7 @@ 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.internal.storage.DataGridFactory; import org.apache.brooklyn.core.management.entitlement.Entitlements; import org.apache.brooklyn.core.management.ha.OsgiManager; import org.apache.brooklyn.core.util.task.BasicExecutionContext; @@ -60,7 +61,6 @@ import brooklyn.entity.effector.Effectors; import brooklyn.entity.proxying.InternalEntityFactory; import brooklyn.entity.proxying.InternalLocationFactory; import brooklyn.entity.proxying.InternalPolicyFactory; -import brooklyn.internal.storage.DataGridFactory; import brooklyn.util.exceptions.Exceptions; import brooklyn.util.guava.Maybe; import brooklyn.util.text.Strings; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalUsageManager.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalUsageManager.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalUsageManager.java index 991f930..3aeb57a 100644 --- a/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalUsageManager.java +++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/LocalUsageManager.java @@ -35,6 +35,7 @@ import org.apache.brooklyn.api.entity.Application; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.management.entitlement.EntitlementContext; +import org.apache.brooklyn.core.internal.storage.BrooklynStorage; import org.apache.brooklyn.core.management.ManagementContextInjectable; import org.apache.brooklyn.core.management.entitlement.Entitlements; import org.apache.brooklyn.core.management.usage.ApplicationUsage; @@ -46,7 +47,6 @@ import org.slf4j.LoggerFactory; import brooklyn.entity.basic.Entities; import brooklyn.entity.basic.EntityInternal; import brooklyn.entity.basic.Lifecycle; -import brooklyn.internal.storage.BrooklynStorage; import org.apache.brooklyn.location.basic.AbstractLocation; import org.apache.brooklyn.location.basic.LocationConfigKeys; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java index 3fc0677..fd19964 100644 --- a/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java +++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/ManagementContextInternal.java @@ -30,6 +30,7 @@ import org.apache.brooklyn.api.location.Location; import org.apache.brooklyn.api.management.ManagementContext; import org.apache.brooklyn.api.management.Task; import org.apache.brooklyn.core.catalog.internal.CatalogInitialization; +import org.apache.brooklyn.core.internal.storage.BrooklynStorage; import org.apache.brooklyn.core.management.ha.OsgiManager; import org.apache.brooklyn.core.util.task.TaskTags; @@ -38,7 +39,6 @@ import brooklyn.entity.basic.BrooklynTaskTags; import brooklyn.entity.proxying.InternalEntityFactory; import brooklyn.entity.proxying.InternalLocationFactory; import brooklyn.entity.proxying.InternalPolicyFactory; -import brooklyn.internal.storage.BrooklynStorage; import brooklyn.util.guava.Maybe; import com.google.common.annotations.Beta; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java b/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java index 693e254..4d8196d 100644 --- a/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java +++ b/core/src/main/java/org/apache/brooklyn/core/management/internal/NonDeploymentManagementContext.java @@ -60,6 +60,7 @@ import org.apache.brooklyn.api.management.ha.ManagementPlaneSyncRecordPersister; import org.apache.brooklyn.api.mementos.BrooklynMementoPersister; import org.apache.brooklyn.api.mementos.BrooklynMementoRawData; import org.apache.brooklyn.core.catalog.internal.CatalogInitialization; +import org.apache.brooklyn.core.internal.storage.BrooklynStorage; import org.apache.brooklyn.core.management.entitlement.Entitlements; import org.apache.brooklyn.core.management.ha.OsgiManager; @@ -69,7 +70,6 @@ import brooklyn.entity.basic.AbstractEntity; import brooklyn.entity.proxying.InternalEntityFactory; import brooklyn.entity.proxying.InternalLocationFactory; import brooklyn.entity.proxying.InternalPolicyFactory; -import brooklyn.internal.storage.BrooklynStorage; import brooklyn.util.guava.Maybe; import brooklyn.util.time.Duration; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/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 50f48b9..b90e961 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 @@ -36,6 +36,9 @@ 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.internal.storage.BrooklynStorage; +import org.apache.brooklyn.core.internal.storage.Reference; +import org.apache.brooklyn.core.internal.storage.impl.BasicReference; import org.apache.brooklyn.core.management.internal.LocalLocationManager; import org.apache.brooklyn.core.management.internal.ManagementContextInternal; import org.apache.brooklyn.core.util.config.ConfigBag; @@ -43,17 +46,14 @@ import org.apache.brooklyn.core.util.flags.FlagUtils; import org.apache.brooklyn.core.util.flags.TypeCoercions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import org.apache.brooklyn.basic.AbstractBrooklynObject; + import brooklyn.config.ConfigInheritance; import brooklyn.config.ConfigKey; import brooklyn.config.ConfigKey.HasConfigKey; import brooklyn.entity.basic.ConfigKeys; import brooklyn.entity.rebind.BasicLocationRebindSupport; import brooklyn.event.basic.BasicConfigKey; -import brooklyn.internal.storage.BrooklynStorage; -import brooklyn.internal.storage.Reference; -import brooklyn.internal.storage.impl.BasicReference; import org.apache.brooklyn.location.geo.HasHostGeoInfo; import org.apache.brooklyn.location.geo.HostGeoInfo; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/test/java/brooklyn/internal/storage/impl/BrooklynStorageImplTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/internal/storage/impl/BrooklynStorageImplTest.java b/core/src/test/java/brooklyn/internal/storage/impl/BrooklynStorageImplTest.java deleted file mode 100644 index 50b7ba3..0000000 --- a/core/src/test/java/brooklyn/internal/storage/impl/BrooklynStorageImplTest.java +++ /dev/null @@ -1,287 +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.storage.impl; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertTrue; - -import java.util.AbstractMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import brooklyn.internal.storage.BrooklynStorage; -import brooklyn.internal.storage.DataGrid; -import brooklyn.internal.storage.Reference; -import brooklyn.internal.storage.impl.inmemory.InmemoryDatagrid; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; - -public class BrooklynStorageImplTest { - - private DataGrid datagrid; - private BrooklynStorage storage; - - @BeforeMethod(alwaysRun=true) - public void setUp() throws Exception { - // TODO Note that InmemoryDatagrid's ConcurrentMap currently returns snapshot for entrySet() and values() - // so the tests here aren't particularly good for confirming it'll work against a real datagrid... - datagrid = new InmemoryDatagrid(); - storage = new BrooklynStorageImpl(datagrid); - } - - @Test - public void testReferenceGetAndSet() throws Exception { - Reference<Object> ref = storage.getReference("mykey"); - assertNull(ref.get()); - assertTrue(ref.isNull()); - assertFalse(ref.contains("different")); - assertTrue(ref.contains(null)); - - ref.set("myval"); - assertEqualsCommutative(ref.get(), storage.getReference("mykey").get(), "myval"); - assertFalse(ref.isNull()); - assertFalse(ref.contains("different")); - assertTrue(ref.contains("myval")); - - ref.clear(); - assertNull(ref.get()); - } - - @Test - public void testReferenceAcceptsNullValue() throws Exception { - Reference<Object> ref = storage.getReference("mykey"); - ref.set(null); - assertNull(ref.get()); - assertTrue(ref.isNull()); - assertTrue(ref.contains(null)); - } - - @Test - public void testCreateMapReturnsSameEachTime() throws Exception { - storage.getMap("mykey").put("k1", "v1"); - assertEqualsCommutative(storage.getMap("mykey"), ImmutableMap.of("k1", "v1")); - } - - @Test - public void testMapOperations() throws Exception { - Map<Object, Object> map = storage.getMap("mykey"); - - map.put("k1", "v1"); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v1")); - assertEqualsCommutative(map.keySet(), storage.getMap("mykey").keySet(), ImmutableSet.of("k1")); - assertEqualsCommutative(ImmutableList.copyOf(map.values()), ImmutableList.copyOf(storage.getMap("mykey").values()), ImmutableList.of("v1")); - - assertEquals(map.size(), 1); - assertEquals(map.get("k1"), "v1"); - assertTrue(map.containsKey("k1")); - assertTrue(map.containsValue("v1")); - assertFalse(map.containsKey("notthere")); - assertFalse(map.containsValue("notthere")); - assertFalse(map.isEmpty()); - - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v1")); - - map.put("k1", "v2"); - assertEquals(map.get("k1"), "v2"); - assertEquals(map.size(), 1); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v2")); - - map.remove("k1"); - assertTrue(map.isEmpty()); - assertEquals(map.size(), 0); - assertEquals(map.get("k1"), null); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of()); - - map.putAll(ImmutableMap.of("k1", "v3", "k2", "v4")); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v3", "k2", "v4")); - - map.clear(); - assertEquals(map.size(), 0); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of()); - } - - // TODO InmemoryDatagrid's map.entrySet() returns an immutable snapshot - // Want to test against a real datagrid instead. - @Test(enabled=false) - public void testMapEntrySetIterator() throws Exception { - Map<Object,Object> map = storage.getMap("mykey"); - map.put("k1", "v1"); - assertEquals(iteratorToList(map.entrySet().iterator()), ImmutableList.of(newMapEntry("k1", "v1"))); - - // Remove entry while iterating; will use snapshot so still contain k1 - Iterator<Map.Entry<Object, Object>> iter1 = map.entrySet().iterator(); - assertTrue(iter1.hasNext()); - map.remove("k1"); - assertEquals(iteratorToList(iter1), ImmutableList.of(newMapEntry("k1", "v1"))); - - // iter.remove removes value - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Map.Entry<Object, Object>> iter2 = map.entrySet().iterator(); - assertEquals(newMapEntry("k1", "v1"), iter2.next()); - iter2.remove(); - assertEquals(newMapEntry("k2", "v2"), iter2.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - - // iter.remove when value has already been removed - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Map.Entry<Object, Object>> iter3 = map.entrySet().iterator(); - assertEquals(newMapEntry("k1", "v1"), iter3.next()); - map.remove("k1"); - iter3.remove(); - assertEquals(newMapEntry("k2", "v2"), iter3.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - - // iter.remove when value has already been removed, but was then re-added! - // TODO is this really the desired behaviour? - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Map.Entry<Object, Object>> iter4 = map.entrySet().iterator(); - assertEquals(newMapEntry("k1", "v1"), iter4.next()); - map.remove("k1"); - map.put("k1", "v1b"); - iter4.remove(); - assertEquals(newMapEntry("k2", "v2"), iter4.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - } - - @Test - public void testMapKeySetIterator() throws Exception { - Map<Object,Object> map = storage.getMap("mykey"); - map.put("k1", "v1"); - assertEquals(iteratorToList(map.keySet().iterator()), ImmutableList.of("k1")); - - // Remove key while iterating; will use snapshot so still contain k1 - Iterator<Object> iter1 = map.keySet().iterator(); - assertTrue(iter1.hasNext()); - map.remove("k1"); - assertEquals(iteratorToList(iter1), ImmutableList.of("k1")); - - // iter.remove removes value - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Object> iter2 = map.keySet().iterator(); - assertEquals("k1", iter2.next()); - iter2.remove(); - assertEquals("k2", iter2.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - - // iter.remove when value has already been removed - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Object> iter3 = map.keySet().iterator(); - assertEquals("k1", iter3.next()); - map.remove("k1"); - iter3.remove(); - assertEquals("k2", iter3.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - - // iter.remove when value has already been removed, but was then re-added! - // TODO is this really the desired behaviour? - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Object> iter4 = map.keySet().iterator(); - assertEquals("k1", iter4.next()); - map.remove("k1"); - map.put("k1", "v1b"); - iter4.remove(); - assertEquals("k2", iter4.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - } - - // TODO InmemoryDatagrid.getMap().values() returning snapshot, so iter.remove not supported. - // Want to test against a real datagrid instead. - @Test(enabled=false) - public void testMapValuesIterator() throws Exception { - Map<Object,Object> map = storage.getMap("mykey"); - map.put("k1", "v1"); - assertEquals(ImmutableList.copyOf(iteratorToList(map.values().iterator())), ImmutableList.of("v1")); - - // Remove key while iterating; will use snapshot so still contain k1 - Iterator<Object> iter1 = map.values().iterator(); - assertTrue(iter1.hasNext()); - map.remove("v1"); - assertEquals(ImmutableList.copyOf(iteratorToList(iter1)), ImmutableList.of("v1")); - - // iter.remove removes value - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Object> iter2 = map.values().iterator(); - assertEquals("v1", iter2.next()); - iter2.remove(); - assertEquals("v2", iter2.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - - // iter.remove when value has already been removed - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Object> iter3 = map.values().iterator(); - assertEquals("v1", iter3.next()); - map.remove("k1"); - iter3.remove(); - assertEquals("v2", iter3.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - - // iter.remove when value has already been removed, but was then re-added! - // TODO is this really the desired behaviour? - map.clear(); - map.put("k1", "v1"); map.put("k2", "v2"); - Iterator<Object> iter4 = map.values().iterator(); - assertEquals("v1", iter4.next()); - map.remove("k1"); - map.put("k1", "v1b"); - iter4.remove(); - assertEquals("v2", iter4.next()); - assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); - } - - private void assertEqualsCommutative(Object o1, Object o2) { - assertEquals(o1, o2); - assertEquals(o2, o1); - } - - private void assertEqualsCommutative(Object o1, Object o2, Object o3) { - assertEquals(o1, o3); - assertEquals(o3, o1); - assertEquals(o2, o3); - assertEquals(o3, o2); - } - - private <T> List<T> iteratorToList(Iterator<T> iter) { - List<T> result = Lists.newArrayList(); - while (iter.hasNext()) { - result.add(iter.next()); - } - return result; - } - - private <K,V> Map.Entry<K,V> newMapEntry(K k, V v) { - return new AbstractMap.SimpleEntry<K, V>(k, v); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/test/java/brooklyn/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java b/core/src/test/java/brooklyn/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java deleted file mode 100644 index e35d50a..0000000 --- a/core/src/test/java/brooklyn/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java +++ /dev/null @@ -1,114 +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.storage.impl; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertTrue; - -import java.util.AbstractMap; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import brooklyn.util.collections.MutableList; -import brooklyn.util.collections.MutableMap; -import brooklyn.util.collections.MutableSet; - -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; - -public class ConcurrentMapAcceptingNullValsTest { - - private ConcurrentMap<String, String> delegateMap; - private ConcurrentMapAcceptingNullVals<String, String> map; - - @BeforeMethod(alwaysRun=true) - public void setUp() throws Exception { - delegateMap = new ConcurrentHashMap<String,String>(); - map = new ConcurrentMapAcceptingNullVals<String,String>(delegateMap); - } - - @Test - public void testSimpleOperations() throws Exception { - map.put("k1", "v1"); - assertEquals(map, ImmutableMap.of("k1", "v1")); - assertEquals(map.keySet(), ImmutableSet.of("k1")); - assertEquals(ImmutableList.copyOf(map.values()), ImmutableList.of("v1")); - assertEquals(map.size(), 1); - assertEquals(map.get("k1"), "v1"); - assertTrue(map.containsKey("k1")); - assertTrue(map.containsValue("v1")); - assertFalse(map.containsKey("notthere")); - assertFalse(map.containsValue("notthere")); - assertFalse(map.isEmpty()); - - map.put("k1", "v2"); - assertEquals(map.get("k1"), "v2"); - assertEquals(map.size(), 1); - assertEquals(map, ImmutableMap.of("k1", "v2")); - - map.remove("k1"); - assertTrue(map.isEmpty()); - assertEquals(map.size(), 0); - assertEquals(map.get("k1"), null); - assertEquals(map, ImmutableMap.of()); - - map.putAll(ImmutableMap.of("k1", "v3", "k2", "v4")); - assertEquals(map, ImmutableMap.of("k1", "v3", "k2", "v4")); - - map.clear(); - assertEquals(map.size(), 0); - assertEquals(map, ImmutableMap.of()); - } - - @Test - public void testAcceptsNullValue() throws Exception { - map.put("k1", null); - assertEquals(map, MutableMap.of("k1", null)); - assertEquals(map.keySet(), MutableSet.of("k1")); - assertEquals(MutableList.copyOf(map.values()), MutableList.of(null)); - assertEquals(map.entrySet(), MutableSet.of(new AbstractMap.SimpleEntry<String,String>("k1", null))); - assertEquals(map.size(), 1); - assertEquals(map.get("k1"), null); - assertTrue(map.containsKey("k1")); - assertTrue(map.containsValue(null)); - assertFalse(map.containsKey("notthere")); - assertFalse(map.containsValue("notthere")); - assertFalse(map.isEmpty()); - - map.put("k2", null); - assertEquals(map.get("k2"), null); - assertEquals(map.size(), 2); - assertEquals(map, MutableMap.of("k1", null, "k2", null)); - assertEquals(MutableList.copyOf(map.values()), MutableList.of(null, null)); - assertEquals(map.entrySet(), MutableSet.of(new AbstractMap.SimpleEntry<String,String>("k1", null), new AbstractMap.SimpleEntry<String,String>("k2", null))); - - map.remove("k1"); - assertEquals(map.get("k1"), null); - assertEquals(map.get("k2"), null); - assertEquals(map.size(), 1); - assertEquals(map, MutableMap.of("k2", null)); - assertEquals(MutableList.copyOf(map.values()), MutableList.of(null)); - assertEquals(map.entrySet(), MutableSet.of(new AbstractMap.SimpleEntry<String,String>("k2", null))); - } -} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/test/java/brooklyn/qa/longevity/EntityCleanupLongevityTestFixture.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/qa/longevity/EntityCleanupLongevityTestFixture.java b/core/src/test/java/brooklyn/qa/longevity/EntityCleanupLongevityTestFixture.java index 790bfe1..2db80ef 100644 --- a/core/src/test/java/brooklyn/qa/longevity/EntityCleanupLongevityTestFixture.java +++ b/core/src/test/java/brooklyn/qa/longevity/EntityCleanupLongevityTestFixture.java @@ -26,6 +26,9 @@ import org.apache.brooklyn.api.entity.proxying.EntitySpec; import org.apache.brooklyn.api.event.SensorEvent; import org.apache.brooklyn.api.event.SensorEventListener; import org.apache.brooklyn.api.location.LocationSpec; +import org.apache.brooklyn.core.internal.storage.BrooklynStorage; +import org.apache.brooklyn.core.internal.storage.DataGrid; +import org.apache.brooklyn.core.internal.storage.impl.BrooklynStorageImpl; import org.apache.brooklyn.core.management.internal.AbstractManagementContext; import org.apache.brooklyn.core.management.internal.LocalManagementContext; import org.apache.brooklyn.core.management.internal.ManagementContextInternal; @@ -42,9 +45,6 @@ import org.testng.annotations.BeforeMethod; import brooklyn.entity.basic.ApplicationBuilder; import brooklyn.entity.basic.Entities; -import brooklyn.internal.storage.BrooklynStorage; -import brooklyn.internal.storage.DataGrid; -import brooklyn.internal.storage.impl.BrooklynStorageImpl; import org.apache.brooklyn.location.basic.SimulatedLocation; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/BrooklynStorageImplTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/BrooklynStorageImplTest.java b/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/BrooklynStorageImplTest.java new file mode 100644 index 0000000..9dc02c5 --- /dev/null +++ b/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/BrooklynStorageImplTest.java @@ -0,0 +1,287 @@ +/* + * 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.storage.impl; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + +import java.util.AbstractMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.apache.brooklyn.core.internal.storage.BrooklynStorage; +import org.apache.brooklyn.core.internal.storage.DataGrid; +import org.apache.brooklyn.core.internal.storage.Reference; +import org.apache.brooklyn.core.internal.storage.impl.BrooklynStorageImpl; +import org.apache.brooklyn.core.internal.storage.impl.inmemory.InmemoryDatagrid; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; + +public class BrooklynStorageImplTest { + + private DataGrid datagrid; + private BrooklynStorage storage; + + @BeforeMethod(alwaysRun=true) + public void setUp() throws Exception { + // TODO Note that InmemoryDatagrid's ConcurrentMap currently returns snapshot for entrySet() and values() + // so the tests here aren't particularly good for confirming it'll work against a real datagrid... + datagrid = new InmemoryDatagrid(); + storage = new BrooklynStorageImpl(datagrid); + } + + @Test + public void testReferenceGetAndSet() throws Exception { + Reference<Object> ref = storage.getReference("mykey"); + assertNull(ref.get()); + assertTrue(ref.isNull()); + assertFalse(ref.contains("different")); + assertTrue(ref.contains(null)); + + ref.set("myval"); + assertEqualsCommutative(ref.get(), storage.getReference("mykey").get(), "myval"); + assertFalse(ref.isNull()); + assertFalse(ref.contains("different")); + assertTrue(ref.contains("myval")); + + ref.clear(); + assertNull(ref.get()); + } + + @Test + public void testReferenceAcceptsNullValue() throws Exception { + Reference<Object> ref = storage.getReference("mykey"); + ref.set(null); + assertNull(ref.get()); + assertTrue(ref.isNull()); + assertTrue(ref.contains(null)); + } + + @Test + public void testCreateMapReturnsSameEachTime() throws Exception { + storage.getMap("mykey").put("k1", "v1"); + assertEqualsCommutative(storage.getMap("mykey"), ImmutableMap.of("k1", "v1")); + } + + @Test + public void testMapOperations() throws Exception { + Map<Object, Object> map = storage.getMap("mykey"); + + map.put("k1", "v1"); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v1")); + assertEqualsCommutative(map.keySet(), storage.getMap("mykey").keySet(), ImmutableSet.of("k1")); + assertEqualsCommutative(ImmutableList.copyOf(map.values()), ImmutableList.copyOf(storage.getMap("mykey").values()), ImmutableList.of("v1")); + + assertEquals(map.size(), 1); + assertEquals(map.get("k1"), "v1"); + assertTrue(map.containsKey("k1")); + assertTrue(map.containsValue("v1")); + assertFalse(map.containsKey("notthere")); + assertFalse(map.containsValue("notthere")); + assertFalse(map.isEmpty()); + + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v1")); + + map.put("k1", "v2"); + assertEquals(map.get("k1"), "v2"); + assertEquals(map.size(), 1); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v2")); + + map.remove("k1"); + assertTrue(map.isEmpty()); + assertEquals(map.size(), 0); + assertEquals(map.get("k1"), null); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of()); + + map.putAll(ImmutableMap.of("k1", "v3", "k2", "v4")); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k1", "v3", "k2", "v4")); + + map.clear(); + assertEquals(map.size(), 0); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of()); + } + + // TODO InmemoryDatagrid's map.entrySet() returns an immutable snapshot + // Want to test against a real datagrid instead. + @Test(enabled=false) + public void testMapEntrySetIterator() throws Exception { + Map<Object,Object> map = storage.getMap("mykey"); + map.put("k1", "v1"); + assertEquals(iteratorToList(map.entrySet().iterator()), ImmutableList.of(newMapEntry("k1", "v1"))); + + // Remove entry while iterating; will use snapshot so still contain k1 + Iterator<Map.Entry<Object, Object>> iter1 = map.entrySet().iterator(); + assertTrue(iter1.hasNext()); + map.remove("k1"); + assertEquals(iteratorToList(iter1), ImmutableList.of(newMapEntry("k1", "v1"))); + + // iter.remove removes value + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Map.Entry<Object, Object>> iter2 = map.entrySet().iterator(); + assertEquals(newMapEntry("k1", "v1"), iter2.next()); + iter2.remove(); + assertEquals(newMapEntry("k2", "v2"), iter2.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + + // iter.remove when value has already been removed + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Map.Entry<Object, Object>> iter3 = map.entrySet().iterator(); + assertEquals(newMapEntry("k1", "v1"), iter3.next()); + map.remove("k1"); + iter3.remove(); + assertEquals(newMapEntry("k2", "v2"), iter3.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + + // iter.remove when value has already been removed, but was then re-added! + // TODO is this really the desired behaviour? + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Map.Entry<Object, Object>> iter4 = map.entrySet().iterator(); + assertEquals(newMapEntry("k1", "v1"), iter4.next()); + map.remove("k1"); + map.put("k1", "v1b"); + iter4.remove(); + assertEquals(newMapEntry("k2", "v2"), iter4.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + } + + @Test + public void testMapKeySetIterator() throws Exception { + Map<Object,Object> map = storage.getMap("mykey"); + map.put("k1", "v1"); + assertEquals(iteratorToList(map.keySet().iterator()), ImmutableList.of("k1")); + + // Remove key while iterating; will use snapshot so still contain k1 + Iterator<Object> iter1 = map.keySet().iterator(); + assertTrue(iter1.hasNext()); + map.remove("k1"); + assertEquals(iteratorToList(iter1), ImmutableList.of("k1")); + + // iter.remove removes value + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Object> iter2 = map.keySet().iterator(); + assertEquals("k1", iter2.next()); + iter2.remove(); + assertEquals("k2", iter2.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + + // iter.remove when value has already been removed + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Object> iter3 = map.keySet().iterator(); + assertEquals("k1", iter3.next()); + map.remove("k1"); + iter3.remove(); + assertEquals("k2", iter3.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + + // iter.remove when value has already been removed, but was then re-added! + // TODO is this really the desired behaviour? + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Object> iter4 = map.keySet().iterator(); + assertEquals("k1", iter4.next()); + map.remove("k1"); + map.put("k1", "v1b"); + iter4.remove(); + assertEquals("k2", iter4.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + } + + // TODO InmemoryDatagrid.getMap().values() returning snapshot, so iter.remove not supported. + // Want to test against a real datagrid instead. + @Test(enabled=false) + public void testMapValuesIterator() throws Exception { + Map<Object,Object> map = storage.getMap("mykey"); + map.put("k1", "v1"); + assertEquals(ImmutableList.copyOf(iteratorToList(map.values().iterator())), ImmutableList.of("v1")); + + // Remove key while iterating; will use snapshot so still contain k1 + Iterator<Object> iter1 = map.values().iterator(); + assertTrue(iter1.hasNext()); + map.remove("v1"); + assertEquals(ImmutableList.copyOf(iteratorToList(iter1)), ImmutableList.of("v1")); + + // iter.remove removes value + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Object> iter2 = map.values().iterator(); + assertEquals("v1", iter2.next()); + iter2.remove(); + assertEquals("v2", iter2.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + + // iter.remove when value has already been removed + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Object> iter3 = map.values().iterator(); + assertEquals("v1", iter3.next()); + map.remove("k1"); + iter3.remove(); + assertEquals("v2", iter3.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + + // iter.remove when value has already been removed, but was then re-added! + // TODO is this really the desired behaviour? + map.clear(); + map.put("k1", "v1"); map.put("k2", "v2"); + Iterator<Object> iter4 = map.values().iterator(); + assertEquals("v1", iter4.next()); + map.remove("k1"); + map.put("k1", "v1b"); + iter4.remove(); + assertEquals("v2", iter4.next()); + assertEqualsCommutative(map, storage.getMap("mykey"), ImmutableMap.of("k2", "v2")); + } + + private void assertEqualsCommutative(Object o1, Object o2) { + assertEquals(o1, o2); + assertEquals(o2, o1); + } + + private void assertEqualsCommutative(Object o1, Object o2, Object o3) { + assertEquals(o1, o3); + assertEquals(o3, o1); + assertEquals(o2, o3); + assertEquals(o3, o2); + } + + private <T> List<T> iteratorToList(Iterator<T> iter) { + List<T> result = Lists.newArrayList(); + while (iter.hasNext()) { + result.add(iter.next()); + } + return result; + } + + private <K,V> Map.Entry<K,V> newMapEntry(K k, V v) { + return new AbstractMap.SimpleEntry<K, V>(k, v); + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java b/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java new file mode 100644 index 0000000..7f7adcf --- /dev/null +++ b/core/src/test/java/org/apache/brooklyn/core/internal/storage/impl/ConcurrentMapAcceptingNullValsTest.java @@ -0,0 +1,115 @@ +/* + * 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.storage.impl; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; +import static org.testng.Assert.assertTrue; + +import java.util.AbstractMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import org.apache.brooklyn.core.internal.storage.impl.ConcurrentMapAcceptingNullVals; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.Test; + +import brooklyn.util.collections.MutableList; +import brooklyn.util.collections.MutableMap; +import brooklyn.util.collections.MutableSet; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; + +public class ConcurrentMapAcceptingNullValsTest { + + private ConcurrentMap<String, String> delegateMap; + private ConcurrentMapAcceptingNullVals<String, String> map; + + @BeforeMethod(alwaysRun=true) + public void setUp() throws Exception { + delegateMap = new ConcurrentHashMap<String,String>(); + map = new ConcurrentMapAcceptingNullVals<String,String>(delegateMap); + } + + @Test + public void testSimpleOperations() throws Exception { + map.put("k1", "v1"); + assertEquals(map, ImmutableMap.of("k1", "v1")); + assertEquals(map.keySet(), ImmutableSet.of("k1")); + assertEquals(ImmutableList.copyOf(map.values()), ImmutableList.of("v1")); + assertEquals(map.size(), 1); + assertEquals(map.get("k1"), "v1"); + assertTrue(map.containsKey("k1")); + assertTrue(map.containsValue("v1")); + assertFalse(map.containsKey("notthere")); + assertFalse(map.containsValue("notthere")); + assertFalse(map.isEmpty()); + + map.put("k1", "v2"); + assertEquals(map.get("k1"), "v2"); + assertEquals(map.size(), 1); + assertEquals(map, ImmutableMap.of("k1", "v2")); + + map.remove("k1"); + assertTrue(map.isEmpty()); + assertEquals(map.size(), 0); + assertEquals(map.get("k1"), null); + assertEquals(map, ImmutableMap.of()); + + map.putAll(ImmutableMap.of("k1", "v3", "k2", "v4")); + assertEquals(map, ImmutableMap.of("k1", "v3", "k2", "v4")); + + map.clear(); + assertEquals(map.size(), 0); + assertEquals(map, ImmutableMap.of()); + } + + @Test + public void testAcceptsNullValue() throws Exception { + map.put("k1", null); + assertEquals(map, MutableMap.of("k1", null)); + assertEquals(map.keySet(), MutableSet.of("k1")); + assertEquals(MutableList.copyOf(map.values()), MutableList.of(null)); + assertEquals(map.entrySet(), MutableSet.of(new AbstractMap.SimpleEntry<String,String>("k1", null))); + assertEquals(map.size(), 1); + assertEquals(map.get("k1"), null); + assertTrue(map.containsKey("k1")); + assertTrue(map.containsValue(null)); + assertFalse(map.containsKey("notthere")); + assertFalse(map.containsValue("notthere")); + assertFalse(map.isEmpty()); + + map.put("k2", null); + assertEquals(map.get("k2"), null); + assertEquals(map.size(), 2); + assertEquals(map, MutableMap.of("k1", null, "k2", null)); + assertEquals(MutableList.copyOf(map.values()), MutableList.of(null, null)); + assertEquals(map.entrySet(), MutableSet.of(new AbstractMap.SimpleEntry<String,String>("k1", null), new AbstractMap.SimpleEntry<String,String>("k2", null))); + + map.remove("k1"); + assertEquals(map.get("k1"), null); + assertEquals(map.get("k2"), null); + assertEquals(map.size(), 1); + assertEquals(map, MutableMap.of("k2", null)); + assertEquals(MutableList.copyOf(map.values()), MutableList.of(null)); + assertEquals(map.entrySet(), MutableSet.of(new AbstractMap.SimpleEntry<String,String>("k2", null))); + } +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGrid.java ---------------------------------------------------------------------- diff --git a/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGrid.java b/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGrid.java index 0b4dfd8..b1ab02a 100644 --- a/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGrid.java +++ b/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGrid.java @@ -24,10 +24,9 @@ import java.util.Set; import java.util.concurrent.ConcurrentMap; import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.core.internal.storage.DataGrid; import org.apache.brooklyn.core.management.internal.ManagementContextInternal; -import brooklyn.internal.storage.DataGrid; - import com.google.common.collect.ImmutableMap; import com.hazelcast.config.Config; import com.hazelcast.config.SerializerConfig; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGridFactory.java ---------------------------------------------------------------------- diff --git a/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGridFactory.java b/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGridFactory.java index c723f67..67a5b44 100644 --- a/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGridFactory.java +++ b/storage/hazelcast/src/main/java/org/apache/brooklyn/internal/storage/impl/hazelcast/HazelcastDataGridFactory.java @@ -18,11 +18,10 @@ */ package org.apache.brooklyn.internal.storage.impl.hazelcast; +import org.apache.brooklyn.core.internal.storage.DataGrid; +import org.apache.brooklyn.core.internal.storage.DataGridFactory; import org.apache.brooklyn.core.management.internal.ManagementContextInternal; -import brooklyn.internal.storage.DataGrid; -import brooklyn.internal.storage.DataGridFactory; - import com.hazelcast.core.HazelcastInstance; public class HazelcastDataGridFactory implements DataGridFactory { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/3230e730/storage/hazelcast/src/test/java/org/apache/brooklyn/storage/impl/hazelcast/HazelcastStorageTest.java ---------------------------------------------------------------------- diff --git a/storage/hazelcast/src/test/java/org/apache/brooklyn/storage/impl/hazelcast/HazelcastStorageTest.java b/storage/hazelcast/src/test/java/org/apache/brooklyn/storage/impl/hazelcast/HazelcastStorageTest.java index 464117e..451a6b4 100644 --- a/storage/hazelcast/src/test/java/org/apache/brooklyn/storage/impl/hazelcast/HazelcastStorageTest.java +++ b/storage/hazelcast/src/test/java/org/apache/brooklyn/storage/impl/hazelcast/HazelcastStorageTest.java @@ -29,11 +29,11 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import brooklyn.config.BrooklynProperties; -import brooklyn.internal.storage.BrooklynStorage; -import brooklyn.internal.storage.DataGridFactory; -import brooklyn.internal.storage.Reference; -import brooklyn.internal.storage.impl.BrooklynStorageImpl; +import org.apache.brooklyn.core.internal.storage.BrooklynStorage; +import org.apache.brooklyn.core.internal.storage.DataGridFactory; +import org.apache.brooklyn.core.internal.storage.Reference; +import org.apache.brooklyn.core.internal.storage.impl.BrooklynStorageImpl; import org.apache.brooklyn.core.management.internal.LocalManagementContext; import org.apache.brooklyn.internal.storage.impl.hazelcast.HazelcastDataGrid; import org.apache.brooklyn.internal.storage.impl.hazelcast.HazelcastDataGridFactory;
