Merge branch 'master' into type-registry
Conflicts - CI parameters removed, and TypeRegistry expanded; resolved, except
we'll want to add a test for StaticTypePlanTransformer
api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
core/src/main/resources/META-INF/services/org.apache.brooklyn.core.typereg.BrooklynTypePlanTransformer
core/src/test/java/org/apache/brooklyn/core/catalog/internal/TestToSpecTransformer.java
usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterUnwrappingTest.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit:
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/03aacd3e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/03aacd3e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/03aacd3e
Branch: refs/heads/master
Commit: 03aacd3e4d64a4d0701e122e0ee6931408c7e07e
Parents: 5dd940b 462e5ea
Author: Alex Heneveld <[email protected]>
Authored: Tue Nov 17 15:41:49 2015 +0000
Committer: Alex Heneveld <[email protected]>
Committed: Tue Nov 17 22:50:17 2015 +0000
----------------------------------------------------------------------
.../brooklyn/api/catalog/CatalogItem.java | 4 -
.../apache/brooklyn/api/location/Location.java | 3 +-
.../api/mgmt/rebind/RebindExceptionHandler.java | 4 +
.../brooklyn/api/typereg/RegisteredType.java | 2 +-
.../catalog/internal/BasicBrooklynCatalog.java | 32 --
.../catalog/internal/CatalogClasspathDo.java | 8 -
.../catalog/internal/CatalogItemBuilder.java | 10 -
.../core/catalog/internal/CatalogItemDo.java | 5 -
.../internal/CatalogItemDtoAbstract.java | 24 +-
.../apache/brooklyn/core/config/ConfigKeys.java | 8 +
.../vault/VaultExternalConfigSupplier.java | 22 +-
.../core/entity/BrooklynConfigKeys.java | 12 +-
.../core/location/AbstractLocation.java | 2 -
.../AggregatingMachineProvisioningLocation.java | 2 -
.../access/PortForwardManagerClient.java | 2 -
.../mgmt/ha/HighAvailabilityManagerImpl.java | 17 +-
.../persist/FileBasedStoreObjectAccessor.java | 10 +-
.../mgmt/rebind/BasicEntityRebindSupport.java | 9 +-
.../mgmt/rebind/RebindExceptionHandlerImpl.java | 27 ++
.../core/mgmt/rebind/RebindManagerImpl.java | 8 +
.../brooklyn/core/sensor/AttributeMap.java | 5 +-
.../entity/stock/EffectorStartableImpl.java | 2 -
.../byon/SingleMachineProvisioningLocation.java | 1 -
.../LocalhostMachineProvisioningLocation.java | 6 +-
.../brooklyn/location/multi/MultiLocation.java | 2 -
.../location/ssh/SshMachineLocation.java | 83 ++--
.../util/core/internal/ssh/SshTool.java | 14 +-
.../internal/SpecParameterInMetaTest.java | 200 ----------
.../catalog/internal/TestToSpecTransformer.java | 120 ------
.../brooklyn/core/config/ConfigKeysTest.java | 21 +-
.../core/location/AbstractLocationTest.java | 1 -
.../core/location/LocationExtensionsTest.java | 2 -
.../core/location/SimulatedLocation.java | 2 -
.../FileBasedStoreObjectAccessorWriterTest.java | 32 +-
.../core/mgmt/rebind/RebindLocationTest.java | 8 -
.../qa/performance/AbstractPerformanceTest.java | 47 ++-
.../qa/performance/EntityPerformanceTest.java | 84 ++--
.../FilePersistencePerformanceTest.java | 146 ++++---
.../GroovyYardStickPerformanceTest.groovy | 7 +-
.../JavaYardStickPerformanceTest.java | 35 +-
.../SubscriptionPerformanceTest.java | 58 ++-
.../qa/performance/TaskPerformanceTest.java | 63 ++-
.../SshMachineLocationReuseIntegrationTest.java | 11 +-
.../ssh/SshMachineLocationSshToolTest.java | 96 +++++
.../location/ssh/SshMachineLocationTest.java | 27 +-
.../core/task/DynamicSequentialTaskTest.java | 41 +-
docs/guide/index.md | 1 +
docs/guide/ops/catalog/index.md | 25 --
docs/guide/ops/persistence/index.md | 2 +
docs/guide/test/entities.md | 143 +++++++
docs/guide/test/index.md | 8 +
docs/guide/yaml/yaml-reference.md | 35 +-
docs/website/documentation/faq.md | 28 ++
.../jclouds/JcloudsSshMachineLocation.java | 1 -
.../BlobStorePersistencePerformanceTest.java | 39 +-
.../jclouds/BailOutJcloudsLocation.java | 3 -
.../policy/jclouds/os/CreateUserPolicyTest.java | 2 -
.../entity/machine/pool/ServerPoolLocation.java | 2 -
.../brooklyn/entity/java/JavaOptsTest.java | 17 +-
.../entity/software/base/EntitySshToolTest.java | 103 +++++
.../base/SoftwareProcessEntityRebindTest.java | 2 -
.../base/SoftwareProcessEntityTest.java | 2 -
.../base/lifecycle/StartStopSshDriverTest.java | 4 +-
.../mgmt/usage/LocationUsageTrackingTest.java | 2 -
.../nginx/NginxRebindWithHaIntegrationTest.java | 9 +-
usage/all/pom.xml | 6 +
.../brooklyn/catalog/CatalogParametersTest.java | 365 ------------------
.../catalog/SpecParameterParsingTest.java | 156 ++++++++
.../catalog/SpecParameterUnwrappingTest.java | 379 +++++++++++++++++++
usage/dist/licensing/overrides.yaml | 44 ++-
usage/dist/src/main/license/files/LICENSE | 92 +++--
.../assets/js/view/application-add-wizard.js | 11 +-
.../org/apache/brooklyn/rest/api/ServerApi.java | 4 +-
.../rest/transform/CatalogTransformer.java | 5 +-
.../rest/resources/UsageResourceTest.java | 2 -
usage/test-framework/README.md | 109 ------
usage/test-framework/pom.xml | 27 +-
.../brooklyn/test/framework/AbstractTest.java | 19 +-
.../brooklyn/test/framework/BaseTest.java | 18 +
.../test/framework/ParallelTestCase.java | 18 +
.../test/framework/ParallelTestCaseImpl.java | 59 ++-
.../brooklyn/test/framework/TestCase.java | 18 +
.../brooklyn/test/framework/TestCaseImpl.java | 18 +
.../brooklyn/test/framework/TestEffector.java | 20 +-
.../test/framework/TestEffectorImpl.java | 18 +
.../brooklyn/test/framework/TestHttpCall.java | 18 +
.../test/framework/TestHttpCallImpl.java | 18 +
.../brooklyn/test/framework/TestSensor.java | 23 +-
.../brooklyn/test/framework/TestSensorImpl.java | 19 +-
.../test/framework/TestEffectorTest.java | 19 +
.../brooklyn/test/framework/TestSensorTest.java | 19 +
.../test/framework/entity/TestEntity.java | 19 +
.../test/framework/entity/TestEntityImpl.java | 19 +
.../resources/test-framework-examples/README.md | 19 +
.../example-catalog-test.bom | 18 +
.../test-framework-examples/example-catalog.bom | 18 +
.../nginx-test-examples.yml | 18 +
.../testhttpcall-examples.yml | 18 +
.../tomcat-test-examples.yml | 18 +
.../brooklyn/test/PerformanceTestUtils.java | 82 +---
.../test/performance/FilePersister.java | 85 +++++
.../brooklyn/test/performance/Histogram.java | 89 +++++
.../performance/MeasurementResultPersister.java | 29 ++
.../test/performance/PerformanceMeasurer.java | 156 ++++++++
.../performance/PerformanceTestDescriptor.java | 208 ++++++++++
.../test/performance/PerformanceTestResult.java | 62 +++
.../test/performance/PerformanceTestUtils.java | 107 ++++++
.../brooklyn/util/JavaGroovyEquivalents.java | 9 +-
.../brooklyn/util/exceptions/Exceptions.java | 29 +-
.../org/apache/brooklyn/util/io/FileUtil.java | 18 +-
.../util/exceptions/ExceptionsTest.java | 22 ++
.../brooklyn/util/maven/MavenArtifactTest.java | 10 +-
.../brooklyn/util/ssh/IptablesCommandsTest.java | 2 +-
.../osgi/more-entities-v2-evil-twin/pom.xml | 2 +-
.../dependencies/osgi/more-entities-v2/pom.xml | 4 +-
.../brooklyn-test-osgi-more-entities_0.2.0.jar | Bin 15745 -> 15646 bytes
...-test-osgi-more-entities_evil-twin_0.2.0.jar | Bin 13922 -> 13811 bytes
.../TestResourceUnavailableException.java | 3 +-
118 files changed, 2888 insertions(+), 1433 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
----------------------------------------------------------------------
diff --cc api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
index fe21daa,610967b..795e393
--- a/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
+++ b/api/src/main/java/org/apache/brooklyn/api/catalog/CatalogItem.java
@@@ -33,9 -26,6 +32,8 @@@ import org.apache.brooklyn.api.mgmt.reb
import org.apache.brooklyn.api.mgmt.rebind.Rebindable;
import org.apache.brooklyn.api.mgmt.rebind.mementos.CatalogItemMemento;
import org.apache.brooklyn.api.objs.BrooklynObject;
- import org.apache.brooklyn.api.objs.SpecParameter;
+import org.apache.brooklyn.api.policy.Policy;
+import org.apache.brooklyn.api.policy.PolicySpec;
import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
import com.google.common.annotations.Beta;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
----------------------------------------------------------------------
diff --cc api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
index ed84179,6ffa09c..2674736
--- a/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
+++ b/api/src/main/java/org/apache/brooklyn/api/typereg/RegisteredType.java
@@@ -58,12 -48,9 +58,12 @@@ public interface RegisteredType extend
* such as if the concrete type is private and callers should know only
about a particular public interface,
* or if precise type details are unavailable and all that is known at
creation is some higher level interface/supertype
* (e.g. this may return {@link Entity} even though the spec points at a
specific subclass,
- * for instance because the YAML has not yet been parsed or OSGi bundles
downloaded).
+ * for instance because the YAML has not yet been parsed or OSGi bundles
downloaded).
+ * <p>
+ * This may include other registered types such as marker interfaces.
*/
- Class<?> getJavaType();
+ @Beta
- @Nullable Set<Object> getSuperTypes();
++ Set<Object> getSuperTypes();
/**
* @return True if the item has been deprecated (i.e. its use is
discouraged)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --cc
core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index 1b5d381,0a39725..e3fc287
---
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
@@@ -37,14 -37,13 +37,12 @@@ import org.apache.brooklyn.api.internal
import org.apache.brooklyn.api.location.Location;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.api.mgmt.classloading.BrooklynClassLoadingContext;
- import org.apache.brooklyn.api.objs.SpecParameter;
import org.apache.brooklyn.core.catalog.CatalogPredicates;
import
org.apache.brooklyn.core.catalog.internal.CatalogClasspathDo.CatalogScanningModes;
import org.apache.brooklyn.core.location.BasicLocationRegistry;
-import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext;
import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
- import org.apache.brooklyn.core.objs.BasicSpecParameter;
-import org.apache.brooklyn.core.plan.PlanToSpecFactory;
-import org.apache.brooklyn.core.plan.PlanToSpecTransformer;
+import org.apache.brooklyn.core.typereg.BrooklynTypePlanTransformer;
import org.apache.brooklyn.util.collections.MutableList;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.collections.MutableSet;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
----------------------------------------------------------------------
diff --cc
core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
index 59bc3a9,8918a74..8e23329
---
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
+++
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogItemBuilder.java
@@@ -20,11 -20,8 +20,9 @@@ package org.apache.brooklyn.core.catalo
import java.util.Collection;
import java.util.Collections;
- import java.util.List;
import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.catalog.CatalogItem.CatalogItemType;
- import org.apache.brooklyn.api.objs.SpecParameter;
import com.google.common.base.Preconditions;
@@@ -118,12 -104,7 +116,7 @@@ public class CatalogItemBuilder<CIConcr
return this;
}
- public CatalogItemBuilder<CIConcreteType>
parameters(List<SpecParameter<?>> inputs) {
- dto.setParameters(inputs);
- return this;
- }
-
- public CatalogItemBuilder<CatalogItemType>
libraries(Collection<CatalogBundle> libraries) {
+ public CatalogItemBuilder<CIConcreteType>
libraries(Collection<CatalogBundle> libraries) {
dto.setLibraries(libraries);
return this;
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/03aacd3e/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
----------------------------------------------------------------------
diff --cc
usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
index 0000000,022a216..fdf5807
mode 000000,100644..100644
---
a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
+++
b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/SpecParameterParsingTest.java
@@@ -1,0 -1,140 +1,156 @@@
+ /*
+ * 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.camp.brooklyn.catalog;
+
+ import static org.testng.Assert.assertEquals;
+ import static org.testng.Assert.assertFalse;
+ import static org.testng.Assert.assertTrue;
+
+ import java.util.List;
+
+ import org.apache.brooklyn.api.catalog.CatalogItem;
++import org.apache.brooklyn.api.entity.EntitySpec;
+ import org.apache.brooklyn.api.internal.AbstractBrooklynObjectSpec;
+ import org.apache.brooklyn.api.objs.SpecParameter;
++import org.apache.brooklyn.api.typereg.RegisteredType;
+ import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
-import org.apache.brooklyn.core.catalog.internal.CatalogUtils;
+ import org.apache.brooklyn.entity.stock.BasicApplication;
+ import org.apache.brooklyn.test.support.TestResourceUnavailableException;
+ import org.apache.brooklyn.util.osgi.OsgiTestResources;
++import org.testng.Assert;
+ import org.testng.annotations.Test;
+
++import com.google.common.base.Function;
+ import com.google.common.base.Joiner;
+ import com.google.common.collect.Iterables;
+ import com.google.common.reflect.TypeToken;
+
+ public class SpecParameterParsingTest extends AbstractYamlTest {
-
++
+ @Test
+ public void testYamlInputsParsed() {
- CatalogItem<?, ?> item = add(
++ String itemId = add(
+ "brooklyn.catalog:",
+ " id: test.inputs",
+ " version: 0.0.1",
+ " item: ",
+ " type: "+ BasicApplication.class.getName(),
+ " brooklyn.parameters:",
+ " - simple",
+ " - name: explicit_name",
+ " - name: third_input",
+ " type: integer");
- AbstractBrooklynObjectSpec<?,?> spec = createSpec(item);
- List<SpecParameter<?>> inputs = spec.getParameters();
++ EntitySpec<?> item =
mgmt().getTypeRegistry().createSpec(mgmt().getTypeRegistry().get(itemId), null,
EntitySpec.class);
++ List<SpecParameter<?>> inputs = item.getParameters();
+ assertEquals(inputs.size(), 3);
+ SpecParameter<?> firstInput = inputs.get(0);
+ assertEquals(firstInput.getLabel(), "simple");
+ assertEquals(firstInput.isPinned(), true);
+ assertEquals(firstInput.getType().getName(), "simple");
+ assertEquals(firstInput.getType().getTypeToken(),
TypeToken.of(String.class));
+
+ SpecParameter<?> secondInput = inputs.get(1);
+ assertEquals(secondInput.getLabel(), "explicit_name");
+ assertEquals(secondInput.isPinned(), true);
+ assertEquals(secondInput.getType().getName(), "explicit_name");
+ assertEquals(secondInput.getType().getTypeToken(),
TypeToken.of(String.class));
+
+ SpecParameter<?> thirdInput = inputs.get(2);
+ assertEquals(thirdInput.getLabel(), "third_input");
+ assertEquals(thirdInput.isPinned(), true);
+ assertEquals(thirdInput.getType().getName(), "third_input");
+ assertEquals(thirdInput.getType().getTypeToken(),
TypeToken.of(Integer.class));
+ }
+
+ @Test
+ public void testOsgiType() {
+
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(),
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+
- CatalogItem<?, ?> item = add(
++ String itemId = add(
+ "brooklyn.catalog:",
+ " id: test.inputs",
+ " version: 0.0.1",
+ " libraries:",
+ " - classpath://" +
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH,
+ " item: ",
+ " type: "+ BasicApplication.class.getName(),
+ " brooklyn.parameters:",
+ " - name: simple",
+ " type: " +
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_ENTITY);
- AbstractBrooklynObjectSpec<?,?> spec = createSpec(item);
++ AbstractBrooklynObjectSpec<?,?> spec = createSpec(itemId);
+ List<SpecParameter<?>> inputs = spec.getParameters();
+ assertEquals(inputs.size(), 1);
+ SpecParameter<?> firstInput = inputs.get(0);
+ assertEquals(firstInput.getLabel(), "simple");
+ assertTrue(firstInput.isPinned());
+ assertEquals(firstInput.getType().getName(), "simple");
+
assertEquals(firstInput.getType().getTypeToken().getRawType().getName(),
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_ENTITY);
+ }
+
+ @Test
+ public void testOsgiClassScanned() {
+
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(),
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH);
+
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(),
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_V2_PATH);
+
+ addMulti("brooklyn.catalog:",
+ " items:",
+ " - scanJavaAnnotations: true",
+ " version: 2.0.test_java",
+ " libraries:",
+ " - classpath://" +
OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH,
+ " - classpath://" +
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_V2_PATH);
+
- CatalogItem<?, ?> item =
CatalogUtils.getCatalogItemOptionalVersion(mgmt(),
OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY);
++ RegisteredType item =
mgmt().getTypeRegistry().get(OsgiTestResources.BROOKLYN_TEST_MORE_ENTITIES_MORE_ENTITY);
+ assertEquals(item.getVersion(), "2.0.test_java");
+ assertEquals(item.getLibraries().size(), 2);
+ AbstractBrooklynObjectSpec<?,?> spec = createSpec(item);
+ List<SpecParameter<?>> inputs = spec.getParameters();
++ if (inputs.isEmpty()) Assert.fail("no inputs (if you're in the IDE,
mvn clean install may need to be run to rebuild osgi test JARs)");
++ assertEquals(inputs.size(), 1);
+ SpecParameter<?> input = inputs.get(0);
+ assertEquals(input.getLabel(), "more_config");
+ assertFalse(input.isPinned());
+ assertEquals(input.getType().getName(), "more_config");
+ }
+
- private CatalogItem<?,?> add(String... def) {
++ private String add(String... def) {
+ return Iterables.getOnlyElement(addMulti(def));
+ }
+
- private Iterable<? extends CatalogItem<?, ?>> addMulti(String... def) {
- return catalog.addItems(Joiner.on('\n').join(def));
++ private Iterable<String> addMulti(String... def) {
++ return
Iterables.transform(catalog.addItems(Joiner.on('\n').join(def)),
++ new Function<CatalogItem<?,?>, String>() {
++ @Override
++ public String apply(CatalogItem<?, ?> input) {
++ return input.getId();
++ }
++ });
+ }
+
- @SuppressWarnings({"unchecked", "rawtypes"})
- private AbstractBrooklynObjectSpec<?, ?> createSpec(CatalogItem<?, ?>
item) {
- return (AbstractBrooklynObjectSpec<?,?>)
catalog.createSpec((CatalogItem)item);
++ private AbstractBrooklynObjectSpec<?, ?> createSpec(String itemId) {
++ RegisteredType item = mgmt().getTypeRegistry().get(itemId);
++ Assert.assertNotNull(item, "Could not load: "+itemId);
++ return createSpec(item);
++ }
++
++ private AbstractBrooklynObjectSpec<?, ?> createSpec(RegisteredType item) {
++ return mgmt().getTypeRegistry().createSpec(item, null,
EntitySpec.class);
+ }
+
+ }