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 2018/08/23 09:48:57 UTC
[isis] 07/07: ISIS-1974: initializes the Isis metamodel and DN in
parallel.
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch maint-1.16.2
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 6dc52825cfb0de5f91ec621f803c38bcf00ad2d4
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Aug 23 10:47:34 2018 +0100
ISIS-1974: initializes the Isis metamodel and DN in parallel.
---
.../core/runtime/threadpool/ThreadPoolSupport.java | 14 +++++
.../system/session/IsisSessionFactoryBuilder.java | 70 ++++++++++++++--------
.../wicket/viewer/IsisWicketApplication.java | 4 +-
3 files changed, 62 insertions(+), 26 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
index 0aee0fd..09c9fe7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
@@ -19,6 +19,7 @@
package org.apache.isis.core.runtime.threadpool;
+import java.util.Arrays;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
@@ -99,4 +100,17 @@ public final class ThreadPoolSupport {
throw new RuntimeException(e);
}
}
+ public static List<Future<Object>> invokeAll(final Callable<Object>... callables) {
+ return invokeAll(Arrays.asList(callables));
+ }
+ public static List<Future<Object>> invokeSerial(final Callable<Object>... callables) {
+ List<Future<Object>> futures = Lists.newArrayList();
+ for (Callable<Object> callable : callables) {
+ List<Future<Object>> x = invokeAll(callable);
+ join(x);
+ futures.addAll(x);
+ }
+ return futures;
+ }
+
}
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 3e56fd6..72d8ef2 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;
@@ -51,6 +54,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 {
@@ -177,30 +181,48 @@ public class IsisSessionFactoryBuilder {
// yet inject.
IsisContext.setSessionFactory(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(configuration);
+
+ final List<Future<Object>> futures = ThreadPoolSupport.invokeAll(
+ new Callable<Object>() {
+ @Override
+ public Object call() {
+
+ // 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;
+ }
+ },
+ new Callable<Object>() {
+ @Override public Object call() {
+ persistenceSessionFactory.init(configuration);
+ return null;
+ }
+ }
+ );
+
+ ThreadPoolSupport.join(futures);
+
persistenceSessionFactory.catalogNamedQueries(specificationLoader);
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 03426ac..d6e0874 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -441,7 +441,7 @@ public class IsisWicketApplication
}
protected List<Future<Object>> startBackgroundInitializationThreads() {
- return ThreadPoolSupport.invokeAll(Lists.newArrayList(
+ return ThreadPoolSupport.invokeAll(
new Callable<Object>() {
@Override
public Object call() throws Exception {
@@ -481,7 +481,7 @@ public class IsisWicketApplication
return null;
}
}
- ));
+ );
}
/**