You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2013/11/27 08:51:28 UTC
git commit: ISIS-611: call RegisterEntities from
DataNucleusPersistenceMechanismInstaller
Updated Branches:
refs/heads/master cd586fef6 -> 37beb951e
ISIS-611: call RegisterEntities from DataNucleusPersistenceMechanismInstaller
No longer necessary to register as a service (the key is still needed, indeed is now mandatory).
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/37beb951
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/37beb951
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/37beb951
Branch: refs/heads/master
Commit: 37beb951ec55170062eb1f9ae5023e428d619016
Parents: cd586fe
Author: Dan Haywood <da...@apache.org>
Authored: Wed Nov 27 07:45:59 2013 +0000
Committer: Dan Haywood <da...@apache.org>
Committed: Wed Nov 27 07:45:59 2013 +0000
----------------------------------------------------------------------
.../DataNucleusApplicationComponents.java | 33 ++++++++----------
...ataNucleusPersistenceMechanismInstaller.java | 25 +++++++++++++-
.../jdo/service/RegisterEntities.java | 35 +++++++++++++-------
.../src/main/webapp/WEB-INF/isis.properties | 2 --
.../src/main/webapp/WEB-INF/isis.properties | 2 --
5 files changed, 60 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/37beb951/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
index 791c8e6..fb0ed0b 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusApplicationComponents.java
@@ -18,7 +18,6 @@
*/
package org.apache.isis.objectstore.jdo.datanucleus;
-import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
@@ -28,8 +27,8 @@ import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManager;
import javax.jdo.PersistenceManagerFactory;
+import com.google.common.base.Joiner;
import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
import org.datanucleus.NucleusContext;
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
@@ -37,10 +36,9 @@ import org.datanucleus.store.schema.SchemaAwareStoreManager;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.objectstore.jdo.datanucleus.persistence.FrameworkSynchronizer;
import org.apache.isis.objectstore.jdo.datanucleus.persistence.IsisLifecycleListener;
-import org.apache.isis.objectstore.jdo.metamodel.facets.object.embeddedonly.JdoEmbeddedOnlyFacet;
-import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoNamedQuery;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoQueryFacet;
@@ -57,17 +55,20 @@ public class DataNucleusApplicationComponents implements ApplicationScopedCompon
//
///////////////////////////////////////////////////////////////////////////
- public DataNucleusApplicationComponents(final Map<String, String> props, final Collection<ObjectSpecification> objectSpecs) {
- persistenceManagerFactory = JDOHelper.getPersistenceManagerFactory(props);
+ public DataNucleusApplicationComponents(
+ final Map<String, String> props,
+ final Set<String> persistableClassNameSet) {
+ final String persistableClassNames = Joiner.on(',').join(persistableClassNameSet);
- final Set<String> classesToBePersisted = catalogClassesToBePersisted(objectSpecs);
+ props.put("datanucleus.autoStartClassNames", persistableClassNames);
+ persistenceManagerFactory = JDOHelper.getPersistenceManagerFactory(props);
final boolean createSchema = Boolean.parseBoolean( props.get("datanucleus.autoCreateSchema") );
if(createSchema) {
- createSchema(props, classesToBePersisted);
+ createSchema(props, persistableClassNameSet);
}
- namedQueryByName = Collections.unmodifiableMap(catalogNamedQueries(objectSpecs));
+ namedQueryByName = Collections.unmodifiableMap(catalogNamedQueries(persistableClassNameSet));
synchronizer = new FrameworkSynchronizer();
lifecycleListener = new IsisLifecycleListener(synchronizer);
@@ -80,15 +81,6 @@ public class DataNucleusApplicationComponents implements ApplicationScopedCompon
storeManager.createSchema(classesToBePersisted, asProperties(props));
}
- private static Set<String> catalogClassesToBePersisted(Collection<ObjectSpecification> objectSpecs) {
- Set<String> classNames = Sets.newTreeSet();
- for (final ObjectSpecification spec : objectSpecs) {
- if(spec.containsFacet(JdoPersistenceCapableFacet.class) || spec.containsFacet(JdoEmbeddedOnlyFacet.class)) {
- classNames.add(spec.getFullIdentifier());
- }
- }
- return Collections.unmodifiableSet(classNames);
- }
private static Properties asProperties(Map<String, String> props) {
Properties properties = new Properties();
@@ -96,9 +88,10 @@ public class DataNucleusApplicationComponents implements ApplicationScopedCompon
return properties;
}
- private static Map<String, JdoNamedQuery> catalogNamedQueries(Collection<ObjectSpecification> objectSpecs) {
+ private static Map<String, JdoNamedQuery> catalogNamedQueries(Set<String> persistableClassNames) {
final Map<String, JdoNamedQuery> namedQueryByName = Maps.newHashMap();
- for (final ObjectSpecification spec : objectSpecs) {
+ for (final String persistableClassName: persistableClassNames) {
+ final ObjectSpecification spec = IsisContext.getSpecificationLoader().loadSpecification(persistableClassName);
final JdoQueryFacet facet = spec.getFacet(JdoQueryFacet.class);
if (facet == null) {
continue;
http://git-wip-us.apache.org/repos/asf/isis/blob/37beb951/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
index 8b68d9b..bf4eb15 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
@@ -18,7 +18,12 @@
*/
package org.apache.isis.objectstore.jdo.datanucleus;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Map;
+import java.util.Set;
+
+import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -28,6 +33,7 @@ import org.apache.isis.core.commons.components.Installer;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.adapter.ObjectAdapterFactory;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidatorComposite;
@@ -48,7 +54,9 @@ import org.apache.isis.objectstore.jdo.metamodel.facets.object.auditable.Auditab
import org.apache.isis.objectstore.jdo.metamodel.facets.object.datastoreidentity.JdoDatastoreIdentityAnnotationFacetFactory;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.discriminator.JdoDiscriminatorAnnotationFacetFactory;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.embeddedonly.JdoEmbeddedOnlyAnnotationFacetFactory;
+import org.apache.isis.objectstore.jdo.metamodel.facets.object.embeddedonly.JdoEmbeddedOnlyFacet;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableAnnotationFacetFactory;
+import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableFacet;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoQueryAnnotationFacetFactory;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.version.JdoVersionAnnotationFacetFactory;
import org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.BigDecimalDerivedFromJdoColumnAnnotationFacetFactory;
@@ -57,6 +65,7 @@ import org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.MaxLengthDer
import org.apache.isis.objectstore.jdo.metamodel.facets.prop.notpersistent.JdoNotPersistentAnnotationFacetFactory;
import org.apache.isis.objectstore.jdo.metamodel.facets.prop.primarykey.JdoPrimaryKeyAnnotationFacetFactory;
import org.apache.isis.objectstore.jdo.metamodel.specloader.validator.JdoMetaModelValidator;
+import org.apache.isis.objectstore.jdo.service.RegisterEntities;
/**
* Configuration files are read in the usual fashion (as per {@link Installer#getConfigurationResources()}, ie will consult all of:
@@ -108,8 +117,22 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani
final IsisConfiguration dataNucleusConfig = configuration.createSubset(ISIS_CONFIG_PREFIX);
final Map<String, String> props = dataNucleusConfig.asMap();
addDataNucleusPropertiesIfRequired(props);
+
+ final Set<String> classesToBePersisted = catalogClassesToBePersisted(configuration, getSpecificationLoader().allSpecifications());
+ applicationComponents = new DataNucleusApplicationComponents(props, classesToBePersisted);
+ }
+
+ private static Set<String> catalogClassesToBePersisted(final IsisConfiguration configuration, Collection<ObjectSpecification> objectSpecs) {
+ final RegisterEntities registerEntities = new RegisterEntities();
+ registerEntities.init(configuration.asMap());
- applicationComponents = new DataNucleusApplicationComponents(props, getSpecificationLoader().allSpecifications());
+ Set<String> classNames = Sets.newTreeSet();
+ for (final ObjectSpecification spec : objectSpecs) {
+ if(spec.containsFacet(JdoPersistenceCapableFacet.class) || spec.containsFacet(JdoEmbeddedOnlyFacet.class)) {
+ classNames.add(spec.getFullIdentifier());
+ }
+ }
+ return Collections.unmodifiableSet(classNames);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/37beb951/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
index 921b06c..d8e260b 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
@@ -27,6 +27,7 @@ import javax.jdo.annotations.PersistenceCapable;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
+import com.google.common.base.Strings;
import com.google.common.collect.Iterables;
import org.reflections.Reflections;
@@ -34,20 +35,28 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.applib.annotation.Hidden;
+import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.runtime.system.context.IsisContext;
@Hidden
public class RegisterEntities {
+
private final static Logger LOG = LoggerFactory.getLogger(RegisterEntities.class);
- private final static String PACKAGE_PREFIX_KEY = "isis.persistor.datanucleus.RegisterEntities.packagePrefix";
+ private static final String LOCAL_KEY = "datanucleus.RegisterEntities.packagePrefix";
+ private final static String QUALIFIED_KEY = "isis.persistor." + LOCAL_KEY;
private String packagePrefixes;
+
+
@PostConstruct
- public void init(Map<String,String> props) {
- packagePrefixes = props.get(PACKAGE_PREFIX_KEY);
+ public void init(Map<String,String> configuration) {
+ packagePrefixes = configuration.get(QUALIFIED_KEY);
+ if(Strings.isNullOrEmpty(packagePrefixes)) {
+ throw new IllegalStateException("Could not locate '" + QUALIFIED_KEY + "' key in property files - aborting");
+ }
registerAllPersistenceCapables();
}
@@ -58,22 +67,17 @@ public class RegisterEntities {
private void registerAllPersistenceCapables() {
- if(packagePrefixes == null) {
- LOG.warn("Did not find key '" + PACKAGE_PREFIX_KEY + "' and so entities will not be eagerly registered in the Isis metamodel");
- return;
- }
-
- for (String packagePrefix : Splitter.on(",").split(packagePrefixes)) {
+ for (final String packagePrefix : Splitter.on(",").split(packagePrefixes)) {
Reflections reflections = new Reflections(packagePrefix);
Set<Class<?>> entityTypes =
reflections.getTypesAnnotatedWith(PersistenceCapable.class);
if(noEntitiesIn(entityTypes)) {
- LOG.error("Could not locate any PersistenceCapable entities in " + packagePrefix);
+ throw new IllegalStateException("Could not locate any @PersistenceCapable entities in package " + packagePrefix);
}
for (Class<?> entityType : entityTypes) {
- IsisContext.getSpecificationLoader().loadSpecification(entityType);
+ getSpecificationLoader().loadSpecification(entityType);
}
}
}
@@ -94,6 +98,13 @@ public class RegisterEntities {
}
};
}
-
+
+ // //////////////////////////////////////
+
+ SpecificationLoaderSpi getSpecificationLoader() {
+ return IsisContext.getSpecificationLoader();
+ }
+
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/37beb951/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
index 98bddb4..f6f9f0e 100644
--- a/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/quickstart_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -158,8 +158,6 @@ isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i
#isis.services.prefix =
isis.services = \
- 0:org.apache.isis.objectstore.jdo.service.RegisterEntities,\
- \
10:dom.todo.ToDoItems,\
20:app.ToDoItemAnalysis,\
dom.todo.ToDoItemContributions,\
http://git-wip-us.apache.org/repos/asf/isis/blob/37beb951/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
----------------------------------------------------------------------
diff --git a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
index 3944f0f..7c1f234 100644
--- a/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
+++ b/example/application/simple_wicket_restful_jdo/webapp/src/main/webapp/WEB-INF/isis.properties
@@ -158,8 +158,6 @@ isis.reflector.facet-decorators=org.apache.isis.core.progmodel.facetdecorators.i
#isis.services.prefix =
isis.services = \
- 0:org.apache.isis.objectstore.jdo.service.RegisterEntities,\
- \
10:dom.simple.SimpleObjects,\
services.ClockService,\
\