You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/08/31 07:16:28 UTC
[isis] 03/03: ISIS-1974: (porting from maint-1.16.2)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit f8f3b56140205cccc75d2a574f23935d31f48c6f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Aug 31 09:16:17 2018 +0200
ISIS-1974: (porting from maint-1.16.2)
working towards removing SpecificationLoader
initializes the Isis metamodel and DN in parallel
---
.../plugins/jdo/dn4/IsisJdoSupportPlugin4.java | 5 +-
.../DataNucleusApplicationComponents4.java | 38 +++++-------
.../persistence/PersistenceSessionFactory4.java | 47 ++++++++------
.../plugins/jdo/dn5/IsisJdoSupportPlugin5.java | 5 +-
.../DataNucleusApplicationComponents5.java | 15 +----
.../persistence/PersistenceSessionFactory5.java | 47 ++++++++------
.../isis/core/metamodel/IsisJdoRuntimePlugin.java | 3 +-
.../persistence/PersistenceSessionFactory.java | 9 ++-
.../system/session/IsisSessionFactoryBuilder.java | 71 +++++++++++++---------
.../objectstore/jdo/service/RegisterEntities.java | 27 ++++----
10 files changed, 133 insertions(+), 134 deletions(-)
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
index 8470ee7..c1026c8 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apacha/isis/plugins/jdo/dn4/IsisJdoSupportPlugin4.java
@@ -22,7 +22,6 @@ import javax.annotation.Nullable;
import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
import org.apache.isis.core.metamodel.IsisJdoRuntimePlugin;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory4;
@@ -42,8 +41,8 @@ public class IsisJdoSupportPlugin4 implements IsisJdoMetamodelPlugin, IsisJdoRun
}
@Override
- public PersistenceSessionFactory getPersistenceSessionFactory(ConfigurationServiceInternal isisConfiguration) {
- return new PersistenceSessionFactory4(isisConfiguration);
+ public PersistenceSessionFactory getPersistenceSessionFactory(/*ConfigurationServiceInternal isisConfiguration*/) {
+ return new PersistenceSessionFactory4(/*isisConfiguration*/);
}
}
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
index 8f08291..fbe6318 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents4.java
@@ -25,6 +25,17 @@ import java.util.Set;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Maps;
+
+import org.datanucleus.PersistenceNucleusContext;
+import org.datanucleus.PropertyNames;
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.datanucleus.metadata.MetaDataListener;
+import org.datanucleus.metadata.MetaDataManager;
+import org.datanucleus.store.StoreManager;
+import org.datanucleus.store.schema.SchemaAwareStoreManager;
+
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.factory.InstanceUtil;
@@ -36,16 +47,6 @@ import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusLifeCycleHelper;
import org.apache.isis.objectstore.jdo.datanucleus.DataNucleusPropertiesAware;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoNamedQuery;
import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoQueryFacet;
-import org.datanucleus.PersistenceNucleusContext;
-import org.datanucleus.PropertyNames;
-import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
-import org.datanucleus.metadata.MetaDataListener;
-import org.datanucleus.metadata.MetaDataManager;
-import org.datanucleus.store.StoreManager;
-import org.datanucleus.store.schema.SchemaAwareStoreManager;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.Maps;
public class DataNucleusApplicationComponents4 implements ApplicationScopedComponent {
@@ -82,35 +83,25 @@ public class DataNucleusApplicationComponents4 implements ApplicationScopedCompo
private final Set<String> persistableClassNameSet;
private final IsisConfiguration jdoObjectstoreConfig;
- private final SpecificationLoader specificationLoader;
private final Map<String, String> datanucleusProps;
- private Map<String, JdoNamedQuery> namedQueryByName;
private PersistenceManagerFactory persistenceManagerFactory;
public DataNucleusApplicationComponents4(
final IsisConfiguration configuration,
- final SpecificationLoader specificationLoader,
final Map<String, String> datanucleusProps,
final Set<String> persistableClassNameSet) {
- this.specificationLoader = specificationLoader;
this.datanucleusProps = datanucleusProps;
this.persistableClassNameSet = persistableClassNameSet;
this.jdoObjectstoreConfig = configuration;
- initialize();
+ persistenceManagerFactory = createPmfAndSchemaIfRequired(this.persistableClassNameSet, this.datanucleusProps);
// for JRebel plugin
instance = this;
}
- private void initialize() {
- persistenceManagerFactory = createPmfAndSchemaIfRequired(persistableClassNameSet, datanucleusProps);
-
- namedQueryByName = catalogNamedQueries(persistableClassNameSet);
- }
-
/**
* Marks the end of DataNucleus' life-cycle. Purges any state associated with DN.
* Subsequent calls have no effect.
@@ -251,8 +242,9 @@ public class DataNucleusApplicationComponents4 implements ApplicationScopedCompo
properties.putAll(props);
return properties;
}
-
- private Map<String, JdoNamedQuery> catalogNamedQueries(Set<String> persistableClassNames) {
+
+ static Map<String, JdoNamedQuery> catalogNamedQueries(
+ Set<String> persistableClassNames, final SpecificationLoader specificationLoader) {
final Map<String, JdoNamedQuery> namedQueryByName = Maps.newHashMap();
for (final String persistableClassName: persistableClassNames) {
final ObjectSpecification spec = specificationLoader.loadSpecification(persistableClassName);
diff --git a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java
index 3e4941a..9c547ae 100644
--- a/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java
+++ b/core/plugins/jdo-datanucleus-4/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory4.java
@@ -24,20 +24,20 @@ import java.util.Set;
import javax.jdo.PersistenceManagerFactory;
+import org.datanucleus.PropertyNames;
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis;
import org.apache.isis.objectstore.jdo.service.RegisterEntities;
-import org.datanucleus.PropertyNames;
-import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
*
@@ -53,11 +53,11 @@ PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstalledFlag {
private static final Logger LOG = LoggerFactory.getLogger(PersistenceSessionFactory4.class);
- private final ConfigurationServiceInternal configuration;
-
- public PersistenceSessionFactory4(final ConfigurationServiceInternal isisConfiguration) {
- this.configuration = isisConfiguration;
- }
+// private final ConfigurationServiceInternal configuration;
+//
+// public PersistenceSessionFactory4(final ConfigurationServiceInternal isisConfiguration) {
+// this.configuration = isisConfiguration;
+// }
public static final String JDO_OBJECTSTORE_CONFIG_PREFIX = "isis.persistor.datanucleus"; // specific to the JDO objectstore
public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; // reserved for datanucleus' own config props
@@ -67,8 +67,8 @@ PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstalledFlag {
@Programmatic
@Override
- public void init(final SpecificationLoader specificationLoader) {
- this.applicationComponents = createDataNucleusApplicationComponents(configuration, specificationLoader);
+ public void init(final IsisConfigurationDefault configuration) {
+ this.applicationComponents = createDataNucleusApplicationComponents(configuration);
}
@Programmatic
@@ -78,9 +78,12 @@ PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstalledFlag {
}
private DataNucleusApplicationComponents4 createDataNucleusApplicationComponents(
- final IsisConfiguration configuration, final SpecificationLoader specificationLoader) {
+ final IsisConfiguration configuration) {
- if (applicationComponents == null || applicationComponents.isStale()) {
+ final RegisterEntities registerEntities = new RegisterEntities(/*configuration.asMap()*/);
+ final Set<String> classesToBePersisted = registerEntities.getEntityTypes();
+
+ if (shouldCreate(this.applicationComponents)) {
final IsisConfiguration jdoObjectstoreConfig = configuration.createSubset(
JDO_OBJECTSTORE_CONFIG_PREFIX);
@@ -89,15 +92,19 @@ PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstalledFlag {
final Map<String, String> datanucleusProps = dataNucleusConfig.asMap();
addDataNucleusPropertiesIfRequired(datanucleusProps);
- final RegisterEntities registerEntities = new RegisterEntities(specificationLoader);
- final Set<String> classesToBePersisted = registerEntities.getEntityTypes();
-
- applicationComponents = new DataNucleusApplicationComponents4(jdoObjectstoreConfig, specificationLoader,
- datanucleusProps, classesToBePersisted);
+ DataNucleusApplicationComponents4 applicationComponents1 =
+ new DataNucleusApplicationComponents4(jdoObjectstoreConfig,
+ datanucleusProps, classesToBePersisted);
+
+ this.applicationComponents = applicationComponents1;
}
return applicationComponents;
}
+
+ private boolean shouldCreate(final DataNucleusApplicationComponents4 applicationComponents) {
+ return applicationComponents == null || applicationComponents.isStale();
+ }
private static void addDataNucleusPropertiesIfRequired(
final Map<String, String> props) {
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apacha/isis/plugins/jdo/dn5/IsisJdoSupportPlugin5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apacha/isis/plugins/jdo/dn5/IsisJdoSupportPlugin5.java
index 94164d0..0db3fee 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apacha/isis/plugins/jdo/dn5/IsisJdoSupportPlugin5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apacha/isis/plugins/jdo/dn5/IsisJdoSupportPlugin5.java
@@ -22,7 +22,6 @@ import javax.annotation.Nullable;
import org.apache.isis.core.metamodel.IsisJdoMetamodelPlugin;
import org.apache.isis.core.metamodel.IsisJdoRuntimePlugin;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory5;
@@ -42,8 +41,8 @@ public class IsisJdoSupportPlugin5 implements IsisJdoMetamodelPlugin, IsisJdoRun
}
@Override
- public PersistenceSessionFactory getPersistenceSessionFactory(ConfigurationServiceInternal isisConfiguration) {
- return new PersistenceSessionFactory5(isisConfiguration);
+ public PersistenceSessionFactory getPersistenceSessionFactory(/*ConfigurationServiceInternal isisConfiguration*/) {
+ return new PersistenceSessionFactory5(/*isisConfiguration*/);
}
}
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents5.java
index 7b0f1ad..56265dd 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/DataNucleusApplicationComponents5.java
@@ -82,35 +82,25 @@ public class DataNucleusApplicationComponents5 implements ApplicationScopedCompo
private final Set<String> persistableClassNameSet;
private final IsisConfiguration jdoObjectstoreConfig;
- private final SpecificationLoader specificationLoader;
private final Map<String, String> datanucleusProps;
- private Map<String, JdoNamedQuery> namedQueryByName;
private PersistenceManagerFactory persistenceManagerFactory;
public DataNucleusApplicationComponents5(
final IsisConfiguration configuration,
- final SpecificationLoader specificationLoader,
final Map<String, String> datanucleusProps,
final Set<String> persistableClassNameSet) {
- this.specificationLoader = specificationLoader;
this.datanucleusProps = datanucleusProps;
this.persistableClassNameSet = persistableClassNameSet;
this.jdoObjectstoreConfig = configuration;
- initialize();
+ persistenceManagerFactory = createPmfAndSchemaIfRequired(this.persistableClassNameSet, this.datanucleusProps);
// for JRebel plugin
instance = this;
}
- private void initialize() {
- persistenceManagerFactory = createPmfAndSchemaIfRequired(persistableClassNameSet, datanucleusProps);
-
- namedQueryByName = catalogNamedQueries(persistableClassNameSet);
- }
-
/**
* Marks the end of DataNucleus' life-cycle. Purges any state associated with DN.
* Subsequent calls have no effect.
@@ -252,7 +242,8 @@ public class DataNucleusApplicationComponents5 implements ApplicationScopedCompo
return properties;
}
- private Map<String, JdoNamedQuery> catalogNamedQueries(Set<String> persistableClassNames) {
+ static Map<String, JdoNamedQuery> catalogNamedQueries(
+ Set<String> persistableClassNames, final SpecificationLoader specificationLoader) {
final Map<String, JdoNamedQuery> namedQueryByName = Maps.newHashMap();
for (final String persistableClassName: persistableClassNames) {
final ObjectSpecification spec = specificationLoader.loadSpecification(persistableClassName);
diff --git a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java
index 2678d50..457632d 100644
--- a/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java
+++ b/core/plugins/jdo-datanucleus-5/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory5.java
@@ -24,20 +24,20 @@ import java.util.Set;
import javax.jdo.PersistenceManagerFactory;
+import org.datanucleus.PropertyNames;
+import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.config.IsisConfiguration;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.runtime.persistence.FixturesInstalledFlag;
import org.apache.isis.objectstore.jdo.datanucleus.JDOStateManagerForIsis;
import org.apache.isis.objectstore.jdo.service.RegisterEntities;
-import org.datanucleus.PropertyNames;
-import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
*
@@ -53,11 +53,11 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
private static final Logger LOG = LoggerFactory.getLogger(PersistenceSessionFactory5.class);
- private final ConfigurationServiceInternal configuration;
-
- public PersistenceSessionFactory5(final ConfigurationServiceInternal isisConfiguration) {
- this.configuration = isisConfiguration;
- }
+// private final ConfigurationServiceInternal configuration;
+//
+// public PersistenceSessionFactory5(final ConfigurationServiceInternal isisConfiguration) {
+// this.configuration = isisConfiguration;
+// }
public static final String JDO_OBJECTSTORE_CONFIG_PREFIX = "isis.persistor.datanucleus"; // specific to the JDO objectstore
public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; // reserved for datanucleus' own config props
@@ -67,8 +67,8 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
@Programmatic
@Override
- public void init(final SpecificationLoader specificationLoader) {
- this.applicationComponents = createDataNucleusApplicationComponents(configuration, specificationLoader);
+ public void init(final IsisConfigurationDefault configuration) {
+ this.applicationComponents = createDataNucleusApplicationComponents(configuration);
}
@Programmatic
@@ -78,9 +78,12 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
}
private DataNucleusApplicationComponents5 createDataNucleusApplicationComponents(
- final IsisConfiguration configuration, final SpecificationLoader specificationLoader) {
+ final IsisConfiguration configuration) {
- if (applicationComponents == null || applicationComponents.isStale()) {
+ final RegisterEntities registerEntities = new RegisterEntities();
+ final Set<String> classesToBePersisted = registerEntities.getEntityTypes();
+
+ if (shouldCreate(this.applicationComponents)) {
final IsisConfiguration jdoObjectstoreConfig = configuration.createSubset(
JDO_OBJECTSTORE_CONFIG_PREFIX);
@@ -89,15 +92,19 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
final Map<String, String> datanucleusProps = dataNucleusConfig.asMap();
addDataNucleusPropertiesIfRequired(datanucleusProps);
- final RegisterEntities registerEntities = new RegisterEntities(specificationLoader);
- final Set<String> classesToBePersisted = registerEntities.getEntityTypes();
-
- applicationComponents = new DataNucleusApplicationComponents5(jdoObjectstoreConfig, specificationLoader,
- datanucleusProps, classesToBePersisted);
+ DataNucleusApplicationComponents5 applicationComponents1 =
+ new DataNucleusApplicationComponents5(jdoObjectstoreConfig,
+ datanucleusProps, classesToBePersisted);
+
+ this.applicationComponents = applicationComponents1;
}
return applicationComponents;
}
+
+ private boolean shouldCreate(final DataNucleusApplicationComponents5 applicationComponents) {
+ return applicationComponents == null || applicationComponents.isStale();
+ }
private static void addDataNucleusPropertiesIfRequired(
final Map<String, String> props) {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/metamodel/IsisJdoRuntimePlugin.java b/core/runtime/src/main/java/org/apache/isis/core/metamodel/IsisJdoRuntimePlugin.java
index 1d33cc7..d60491f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/metamodel/IsisJdoRuntimePlugin.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/metamodel/IsisJdoRuntimePlugin.java
@@ -17,14 +17,13 @@
package org.apache.isis.core.metamodel;
import org.apache.isis.commons.internal.context._Plugin;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
public interface IsisJdoRuntimePlugin {
// -- INTERFACE
- public PersistenceSessionFactory getPersistenceSessionFactory(ConfigurationServiceInternal configuration);
+ public PersistenceSessionFactory getPersistenceSessionFactory(/*ConfigurationServiceInternal configuration*/);
// -- LOOKUP
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
index d72c10c..4ec2de2 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSessionFactory.java
@@ -17,10 +17,9 @@
package org.apache.isis.core.runtime.system.persistence;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.IsisJdoRuntimePlugin;
import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.metamodel.services.configinternal.ConfigurationServiceInternal;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
public interface PersistenceSessionFactory {
@@ -29,7 +28,7 @@ public interface PersistenceSessionFactory {
PersistenceSession createPersistenceSession(ServicesInjector servicesInjector,
AuthenticationSession authenticationSession);
- void init(SpecificationLoader specificationLoader);
+ void init(IsisConfigurationDefault configuration);
boolean isInitialized();
@@ -37,8 +36,8 @@ public interface PersistenceSessionFactory {
// -- FACTORY
- static PersistenceSessionFactory of(ConfigurationServiceInternal configuration) {
- return IsisJdoRuntimePlugin.get().getPersistenceSessionFactory(configuration);
+ static PersistenceSessionFactory of(/*ConfigurationServiceInternal configuration*/) {
+ return IsisJdoRuntimePlugin.get().getPersistenceSessionFactory(/*configuration*/);
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
index fb0ba74..6b95018 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryBuilder.java
@@ -22,6 +22,9 @@ package org.apache.isis.core.runtime.system.session;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,6 +34,7 @@ import org.apache.isis.applib.clock.Clock;
import org.apache.isis.applib.fixtures.FixtureClock;
import org.apache.isis.applib.fixturescripts.FixtureScripts;
import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
+import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.commons.lang.ListExtensions;
@@ -52,6 +56,7 @@ import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory
import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactoryMetamodelRefiner;
import org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProvider;
import org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProviderDefault2;
+import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
public class IsisSessionFactoryBuilder {
@@ -155,7 +160,7 @@ public class IsisSessionFactoryBuilder {
servicesInjector.addFallbackIfRequired(SpecificationLoader.class, specificationLoader);
// persistenceSessionFactory
- final PersistenceSessionFactory persistenceSessionFactory = PersistenceSessionFactory.of(configuration);
+ final PersistenceSessionFactory persistenceSessionFactory = PersistenceSessionFactory.of(/*configuration*/);
servicesInjector.addFallbackIfRequired(PersistenceSessionFactory.class, persistenceSessionFactory);
@@ -178,33 +183,43 @@ public class IsisSessionFactoryBuilder {
// yet inject.
_Context.putSingleton(IsisSessionFactory.class, isisSessionFactory);
- // time to initialize...
- specificationLoader.init();
-
- // we need to do this before checking if the metamodel is valid.
- //
- // eg ActionChoicesForCollectionParameterFacetFactory metamodel validator requires a runtime...
- // at o.a.i.core.metamodel.specloader.specimpl.ObjectActionContributee.getServiceAdapter(ObjectActionContributee.java:287)
- // at o.a.i.core.metamodel.specloader.specimpl.ObjectActionContributee.determineParameters(ObjectActionContributee.java:138)
- // at o.a.i.core.metamodel.specloader.specimpl.ObjectActionDefault.getParameters(ObjectActionDefault.java:182)
- // at o.a.i.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory$1.validate(ActionChoicesForCollectionParameterFacetFactory.java:85)
- // at o.a.i.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory$1.visit(ActionChoicesForCollectionParameterFacetFactory.java:76)
- // at o.a.i.core.metamodel.specloader.validator.MetaModelValidatorVisiting.validate(MetaModelValidatorVisiting.java:47)
- //
- // also, required so that can still call isisSessionFactory#doInSession
- //
- // eg todoapp has a custom UserSettingsThemeProvider that is called when rendering any page
- // (including the metamodel invalid page)
- // at o.a.i.core.runtime.system.session.IsisSessionFactory.doInSession(IsisSessionFactory.java:327)
- // at todoapp.webapp.UserSettingsThemeProvider.getActiveTheme(UserSettingsThemeProvider.java:36)
-
- authenticationManager.init(deploymentCategory);
- authorizationManager.init(deploymentCategory);
-
- persistenceSessionFactory.init(specificationLoader);
+ final List<Callable<Object>> tasks = _Lists.<Callable<Object>>of(
+ ()->{
+ // time to initialize...
+ specificationLoader.init();
+ // we need to do this before checking if the metamodel is valid.
+ //
+ // eg ActionChoicesForCollectionParameterFacetFactory metamodel validator requires a runtime...
+ // at o.a.i.core.metamodel.specloader.specimpl.ObjectActionContributee.getServiceAdapter(ObjectActionContributee.java:287)
+ // at o.a.i.core.metamodel.specloader.specimpl.ObjectActionContributee.determineParameters(ObjectActionContributee.java:138)
+ // at o.a.i.core.metamodel.specloader.specimpl.ObjectActionDefault.getParameters(ObjectActionDefault.java:182)
+ // at o.a.i.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory$1.validate(ActionChoicesForCollectionParameterFacetFactory.java:85)
+ // at o.a.i.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory$1.visit(ActionChoicesForCollectionParameterFacetFactory.java:76)
+ // at o.a.i.core.metamodel.specloader.validator.MetaModelValidatorVisiting.validate(MetaModelValidatorVisiting.java:47)
+ //
+ // also, required so that can still call isisSessionFactory#doInSession
+ //
+ // eg todoapp has a custom UserSettingsThemeProvider that is called when rendering any page
+ // (including the metamodel invalid page)
+ // at o.a.i.core.runtime.system.session.IsisSessionFactory.doInSession(IsisSessionFactory.java:327)
+ // at todoapp.webapp.UserSettingsThemeProvider.getActiveTheme(UserSettingsThemeProvider.java:36)
+ authenticationManager.init(deploymentCategory);
+ authorizationManager.init(deploymentCategory);
+ return null;
+ },
+ ()->{
+ persistenceSessionFactory.init(configuration);
+ return null;
+ }
+ );
- isisSessionFactory.constructServices();
+ // execute tasks using a threadpool
+ final List<Future<Object>> futures = ThreadPoolSupport.getInstance().invokeAll(tasks);
+
+ // wait on this thread for tasks to complete
+ ThreadPoolSupport.join(futures);
+ isisSessionFactory.constructServices();
isisSessionFactory.doInSession(
() -> {
@@ -236,13 +251,9 @@ public class IsisSessionFactoryBuilder {
return ListExtensions.filtered(Arrays.asList(possibleRefiners), MetaModelRefiner.class);
}
-
-
// region > metaModel validity
public boolean isMetaModelValid() {
return IsisContext.getMetaModelInvalidExceptionIfAny() == null;
}
-
-
}
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
index 3587b75..97c191f 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/service/RegisterEntities.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.objectstore.jdo.service;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@@ -25,14 +26,13 @@ import javax.jdo.annotations.PersistenceCapable;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.isis.applib.AppManifest;
+import org.apache.isis.commons.internal.base._LazyThreadSafe;
import org.apache.isis.core.metamodel.JdoMetamodelUtil;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
public class RegisterEntities {
@@ -45,20 +45,17 @@ public class RegisterEntities {
@Deprecated
public final static String PACKAGE_PREFIX_KEY = "isis.persistor.datanucleus.RegisterEntities.packagePrefix";
- // //////////////////////////////////////
-
-
- // -- entityTypes
- private final Set<String> entityTypes = Sets.newLinkedHashSet();
- private final SpecificationLoader specificationLoader;
+ private final _LazyThreadSafe<Set<String>> entityTypes = _LazyThreadSafe.of(this::findEntityTypes);
public Set<String> getEntityTypes() {
- return entityTypes;
+ return entityTypes.get();
}
+ // -- HELPER
- public RegisterEntities(final SpecificationLoader specificationLoader) {
- this.specificationLoader = specificationLoader;
+ private Set<String> findEntityTypes() {
+
+ Set<String> entityTypes = new LinkedHashSet<String>();
Set<Class<?>> persistenceCapableTypes = AppManifest.Registry.instance().getPersistenceCapableTypes();
@@ -74,13 +71,15 @@ public class RegisterEntities {
if(!JdoMetamodelUtil.isPersistenceEnhanced(persistenceCapableType)) {
classNamesNotEnhanced.add(persistenceCapableType.getCanonicalName());
}
- this.entityTypes.add(persistenceCapableType.getCanonicalName());
+ entityTypes.add(persistenceCapableType.getCanonicalName());
}
if(!classNamesNotEnhanced.isEmpty()) {
final String classNamesNotEnhancedStr = Joiner.on("\n* ").join(classNamesNotEnhanced);
throw new IllegalStateException("Non-enhanced @PersistenceCapable classes found, will abort. The classes in error are:\n\n* " + classNamesNotEnhancedStr + "\n\nDid the DataNucleus enhancer run correctly?\n");
}
+
+ return entityTypes;
}
@@ -98,8 +97,4 @@ public class RegisterEntities {
}
- SpecificationLoader getSpecificationLoader() {
- return specificationLoader;
- }
-
}