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 2022/05/12 15:28:50 UTC
[isis] branch v1-lab updated: runs helloworld v1 on Spring
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v1-lab
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v1-lab by this push:
new fd20e69ced runs helloworld v1 on Spring
fd20e69ced is described below
commit fd20e69ced6cdea969681ddecd7803210d0acb39
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu May 12 17:28:42 2022 +0200
runs helloworld v1 on Spring
---
.../apache/isis/applib/util/ObjectContracts.java | 5 +-
.../apache/isis/applib/util/ObjectContracts2.java | 5 +-
.../configbuilder/IsisConfigurationBuilder.java | 13 +-
.../facets/all/i18n/NamedFacetTranslated.java | 7 +-
.../services/appfeat/ApplicationFeatureId.java | 17 +-
.../metamodel/specloader/SpecificationLoader.java | 33 ++-
.../core/runtime/threadpool/ThreadPoolSupport.java | 273 ---------------------
core/pom.xml | 42 ++--
.../isis/core/runtime/runner/IsisInjectModule.java | 12 +-
.../system/session/IsisSessionFactoryBuilder.java | 114 +++------
.../service/support/TimestampService.java | 8 +-
core/viewer-restfulobjects-applib/pom.xml | 32 +--
.../wicket/viewer/IsisWicketApplication.java | 157 +++++-------
.../viewer/wicket/viewer/IsisWicketModule.java | 17 +-
.../isis/DeploymentTypeWicketAbstract.java | 9 +-
.../viewer/wicket/viewer/IsisWicket_providers.java | 19 +-
.../WicketObjectModule_bindingsStandard.java | 27 +-
examples/helloworld/pom.xml | 38 +++
.../java/domainapp/application/HelloWorldApp.java | 46 ++++
.../application/HelloWorldAppConfiguration.java | 74 ++++++
examples/pom.xml | 2 +
21 files changed, 379 insertions(+), 571 deletions(-)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
index e53696c7af..382e568b2b 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
@@ -21,8 +21,9 @@ import java.util.Comparator;
import java.util.List;
import com.google.common.base.Function;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Splitter;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Iterables;
@@ -266,7 +267,7 @@ public class ObjectContracts {
}
private String toStringOf(final Object p, final Iterable<String> propertyNamesIter) {
- final ToStringHelper stringHelper = Objects.toStringHelper(p);
+ final ToStringHelper stringHelper = MoreObjects.toStringHelper(p);
for (final Clause clause : clausesFor(propertyNamesIter)) {
stringHelper.add(clause.getPropertyName(), asString(clause, p));
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts2.java b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts2.java
index 0c5455cab4..eb8ba71801 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts2.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts2.java
@@ -21,8 +21,9 @@ import java.util.Comparator;
import java.util.List;
import com.google.common.base.Function;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.base.Objects;
-import com.google.common.base.Objects.ToStringHelper;
import com.google.common.base.Splitter;
import com.google.common.collect.ComparisonChain;
import com.google.common.collect.Iterables;
@@ -275,7 +276,7 @@ public class ObjectContracts2 {
}
private String toStringOf(final Object p, final Iterable<String> propertyNamesIter) {
- final ToStringHelper stringHelper = Objects.toStringHelper(p);
+ final ToStringHelper stringHelper = MoreObjects.toStringHelper(p);
for (final Clause clause : clausesFor(propertyNamesIter)) {
stringHelper.add(clause.getPropertyName(), asString(clause, p));
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
index 725b64640a..ad7c92db68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/configbuilder/IsisConfigurationBuilder.java
@@ -25,17 +25,11 @@ import java.util.List;
import java.util.Properties;
import java.util.Set;
-import com.google.common.base.Objects;
-import com.google.common.collect.Sets;
-
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import org.apache.isis.core.commons.config.ConfigurationConstants;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
@@ -47,6 +41,11 @@ import org.apache.isis.core.commons.resource.ResourceStreamSourceChainOfResponsi
import org.apache.isis.core.commons.resource.ResourceStreamSourceFileSystem;
import org.apache.isis.core.runtime.optionhandler.BootPrinter;
import org.apache.isis.core.runtime.optionhandler.OptionHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.MoreObjects;
+import com.google.common.collect.Sets;
/**
* Holds a mutable set of properties representing the configuration.
@@ -389,7 +388,7 @@ public final class IsisConfigurationBuilder {
@Override
public String toString() {
- return Objects.toStringHelper(this)
+ return MoreObjects.toStringHelper(this)
.add("resourceStream", resourceStreamSourceChain)
.add("configResources", configurationResourcesFound)
.toString();
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java
index a7d12b37e5..36a1486027 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/all/i18n/NamedFacetTranslated.java
@@ -41,7 +41,8 @@ public class NamedFacetTranslated extends FacetAbstract implements NamedFacet {
this.originalText = originalText;
this.translationService = translationService;
- if(translationService.getMode().isWrite()) {
+ if(translationService!=null
+ && translationService.getMode().isWrite()) {
// force PoWriter to be called to capture this text that needs translating
translateText();
}
@@ -53,7 +54,9 @@ public class NamedFacetTranslated extends FacetAbstract implements NamedFacet {
}
private String translateText() {
- return translationService.translate(context, originalText);
+ return translationService!=null
+ ? translationService.translate(context, originalText)
+ : originalText;
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
index 76a81fc8eb..c8f9f9c480 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/appfeat/ApplicationFeatureId.java
@@ -27,9 +27,16 @@ import java.util.List;
import javax.annotation.Nullable;
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
+import org.apache.isis.applib.util.TitleBuffer;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
import com.google.common.base.Function;
import com.google.common.base.Joiner;
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
@@ -37,12 +44,6 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Ordering;
import com.google.common.io.BaseEncoding;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.annotation.Value;
-import org.apache.isis.applib.services.appfeat.ApplicationMemberType;
-import org.apache.isis.applib.util.TitleBuffer;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-
/**
* Value type representing a package, class or member.
*
@@ -522,7 +523,7 @@ public class ApplicationFeatureId implements Comparable<ApplicationFeatureId>, S
// https://issues.apache.org/jira/browse/ISIS-1590
// not using our ObjectContracts helper for efficiency.
- final Objects.ToStringHelper stringHelper = Objects.toStringHelper(this);
+ final ToStringHelper stringHelper = MoreObjects.toStringHelper(this);
switch (type) {
case PACKAGE:
stringHelper.add("type", getType());
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
index 67a5906d35..d5620e22b4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoader.java
@@ -20,16 +20,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.annotation.DomainService;
@@ -62,9 +52,16 @@ import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificati
import org.apache.isis.core.metamodel.specloader.specimpl.standalonelist.ObjectSpecificationOnStandaloneList;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
import org.apache.isis.core.metamodel.specloader.validator.ValidationFailures;
-import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
import org.apache.isis.progmodels.dflt.ProgrammingModelFacetsJava5;
import org.apache.isis.schema.utils.CommonDtoUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
/**
* Builds the meta-model.
@@ -299,13 +296,13 @@ public class SpecificationLoader implements ApplicationScopedComponent {
}
private void invokeAndWait(final List<Callable<Object>> callables) {
- final ThreadPoolSupport threadPoolSupport = ThreadPoolSupport.getInstance();
- final boolean parallelize = CONFIG_PROPERTY_PARALLELIZE.from(configuration);
-
- final List<Future<Object>> futures = parallelize
- ? threadPoolSupport.invokeAll(callables)
- : threadPoolSupport.invokeAllSequential(callables);
- threadPoolSupport.joinGatherFailures(futures);
+ callables.forEach(c->{
+ try {
+ c.call();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ });
}
private List<ObjectSpecification> loadSpecificationsFor(
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
deleted file mode 100644
index 87f162fa0d..0000000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/runtime/threadpool/ThreadPoolSupport.java
+++ /dev/null
@@ -1,273 +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 org.apache.isis.core.runtime.threadpool;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Future;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-import javax.annotation.Nullable;
-
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public final class ThreadPoolSupport {
-
- private static final Logger LOG = LoggerFactory.getLogger(ThreadPoolSupport.class);
-
- private final static int KEEP_ALIVE_TIME_SECS = 5;
- private final static int QUEUE_CAPACITY = 5000;
-
- private static final int MIN_CORE_POOL_SIZE = 4;
- private static final int MIN_MAX_POOL_SIZE = 4;
-
- private final ThreadGroup group;
- private final ThreadPoolExecutor concurrentExecutor;
- private final ThreadPoolExecutor sequentialExecutor;
-
- private static ThreadPoolSupport threadPoolSupport;
-
- public static synchronized ThreadPoolSupport getInstance() {
- if (threadPoolSupport == null) {
- threadPoolSupport = new ThreadPoolSupport();
- }
- return threadPoolSupport;
- }
-
- private ThreadPoolSupport() {
- group = new ThreadGroup(ThreadPoolSupport.class.getName());
-
- final int corePoolSize = Math.max(Runtime.getRuntime().availableProcessors(), MIN_CORE_POOL_SIZE);
- final int maximumPoolSize = Math.max(Runtime.getRuntime().availableProcessors(), MIN_MAX_POOL_SIZE);
-
- ThreadFactory threadFactory = new ThreadFactory() {
- @Override
- public Thread newThread(final Runnable r) {
- return new Thread(group, r);
- }
- };
-
- Supplier<BlockingQueue<Runnable>> workQueueFactory = new Supplier<BlockingQueue<Runnable>>() {
- @Override
- public BlockingQueue<Runnable> get() {
- return new LinkedBlockingQueue<>(QUEUE_CAPACITY);
- }
- };
-
- concurrentExecutor = new ThreadPoolExecutor(
- corePoolSize,
- maximumPoolSize,
- KEEP_ALIVE_TIME_SECS,
- TimeUnit.SECONDS,
- workQueueFactory.get(),
- threadFactory);
-
- sequentialExecutor = new ThreadPoolExecutor(
- 1,
- 1,
- KEEP_ALIVE_TIME_SECS,
- TimeUnit.SECONDS,
- workQueueFactory.get(),
- threadFactory);
-
- }
-
- public void close() throws Exception {
- try {
- concurrentExecutor.shutdown();
- } finally {
- // in case the previous throws, continue execution here
- sequentialExecutor.shutdown();
- }
- }
-
- /**
- * Executes specified {@code callables} on the default executor.
- * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
- * @param callables nullable
- * @return non-null
- */
- public List<Future<Object>> invokeAll(@Nullable final List<Callable<Object>> callables) {
- return invokeAll(concurrentExecutor, callables);
- }
-
- /**
- * Executes specified {@code callables} on the default executor.
- * See {@link ThreadPoolExecutor#invokeAll(java.util.Collection)}
- * @param callables nullable
- * @return non-null
- */
- public List<Future<Object>> invokeAll(final Callable<Object>... callables) {
- return invokeAll(Arrays.asList(callables));
- }
-
- /**
- * Executes specified {@code callables} on the sequential executor in sequence, one by one.
- * @param callables nullable
- * @return non-null
- */
- public List<Future<Object>> invokeAllSequential(@Nullable final List<Callable<Object>> callables) {
- return invokeAll(sequentialExecutor, callables);
- }
-
- /**
- * Executes specified {@code callables} on the sequential executor in sequence, one by one.
- * @param callables nullable
- * @return non-null
- */
- public List<Future<Object>> invokeAllSequential(final Callable<Object>... callables) {
- return invokeAllSequential(Arrays.asList(callables));
- }
-
-
- public List<Object> join(final List<Future<Object>> futures) {
- if (futures == null) {
- return null;
- }
-
- final long t0 = System.currentTimeMillis();
- try{
- final List<Object> returnValues = Lists.newArrayList();
- for (Future<Object> future : futures) {
- Object result;
- try {
- result = future.get();
- } catch (InterruptedException | ExecutionException e) {
- // ignore
- result = null;
- }
- returnValues.add(result);
- }
- return returnValues;
- } finally {
- final long t1 = System.currentTimeMillis();
- if(LOG.isInfoEnabled()) {
- LOG.info("join'ing {} tasks: waited {} milliseconds ", futures.size(), (t1-t0));
- }
- }
- }
-
- public List<Object> joinGatherFailures(final List<Future<Object>> futures) {
- if (futures == null) {
- return null;
- }
-
- final long t0 = System.currentTimeMillis();
- try{
- final List<Object> returnValues = Lists.newArrayList();
- for (Future<Object> future : futures) {
- final Object result;
- try {
- result = future.get();
- } catch (InterruptedException | ExecutionException e) {
- throw new RuntimeException(e);
- }
- returnValues.add(result);
- }
- return returnValues;
- } finally {
- final long t1 = System.currentTimeMillis();
- LOG.info("join'ing {} tasks: waited {} milliseconds ", futures.size(), (t1-t0));
- }
- }
-
- public Object join(final Future<Object> future) {
- try {
- return future.get();
- } catch (InterruptedException | ExecutionException e) {
- // ignore
- return null;
- }
- }
-
- // -- HELPER
-
- private List<Future<Object>> invokeAll(ThreadPoolExecutor executor, @Nullable final List<Callable<Object>> callables) {
- if(isEmpty(callables)) {
- return Collections.emptyList();
- }
- try {
- return executor.invokeAll(timed(executor, callables));
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
-
- private static List<Callable<Object>> timed(
- final ThreadPoolExecutor executor,
- final List<Callable<Object>> callables) {
- final long queuedAt = System.currentTimeMillis();
- return FluentIterable.from(callables).transform(
- new Function<Callable<Object>, Callable<Object>>() {
- @Override
- public Callable<Object> apply(final Callable<Object> callable) {
- final int queueSize = executor.getQueue().size();
- return timed(callable, queueSize, queuedAt);
- }
- }).toList();
- }
-
- private static Callable<Object> timed(
- final Callable<Object> callable,
- final int queueSize,
- final long queuedAt) {
- return new Callable<Object>() {
- @Override
- public Object call() throws Exception {
-
- final long startedAt = System.currentTimeMillis();
- if(LOG.isDebugEnabled()) {
- LOG.debug("START: workQueue.size: {}, waited for: {}ms, {}",
- queueSize,
- startedAt - queuedAt,
- callable.toString());
- }
- try {
- return callable.call();
- } finally {
- final long completedAt = System.currentTimeMillis();
- if(LOG.isDebugEnabled()) {
- LOG.debug("END: completed in: {}ms, {}",
- completedAt - startedAt,
- callable.toString());
- }
- }
- }
- };
- }
-
- private static boolean isEmpty(Collection<?> x) { return x==null || x.size() == 0; }
-
-
-}
diff --git a/core/pom.xml b/core/pom.xml
index d8ab5be6c9..e70ab63f87 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -81,7 +81,7 @@
<log4j.version>1.2.17</log4j.version>
<joda-time.version>2.9.4</joda-time.version>
- <guava.version>19.0</guava.version>
+ <guava.version>30.1-jre</guava.version>
<hamcrest.version>1.3</hamcrest.version>
<assertj.version>3.6.2</assertj.version>
@@ -100,7 +100,6 @@
<axon-core.version>2.4.4</axon-core.version>
- <jackson.version>2.9.8</jackson.version>
<gson.version>2.9.0</gson.version>
<swagger-core.version>1.5.9</swagger-core.version>
@@ -329,6 +328,14 @@
<type>pom</type>
<version>${project.version}</version>
</dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson</groupId>
+ <artifactId>jackson-bom</artifactId>
+ <version>2.13.2.1</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
<!-- unittestsupport -->
<dependency>
@@ -681,28 +688,6 @@
<version>${xstream.version}</version>
</dependency>
-
- <!-- JSON libraries -->
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <version>${jackson.version}</version>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
- <artifactId>jackson-module-jaxb-annotations</artifactId>
- <version>${jackson.version}</version>
- </dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
@@ -1286,6 +1271,15 @@
<version>1.18.24</version>
</dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.module</groupId>
+ <artifactId>jackson-module-jaxb-annotations</artifactId>
+ </dependency>
+
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
index 1d9f3cdafe..f0d460def9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/runner/IsisInjectModule.java
@@ -22,20 +22,20 @@ package org.apache.isis.core.runtime.runner;
import java.util.List;
import java.util.Map;
-import com.google.inject.AbstractModule;
-import com.google.inject.Provides;
-import com.google.inject.Singleton;
-
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.metamodel.services.ServicesInjector;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
import org.apache.isis.core.runtime.systemusinginstallers.IsisComponentProviderUsingInstallers;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provides;
+import com.google.inject.Singleton;
+
public class IsisInjectModule extends AbstractModule {
/**
@@ -86,7 +86,7 @@ public class IsisInjectModule extends AbstractModule {
*/
@Override
protected void configure() {
- bind(AppManifest.class).toInstance(APP_MANIFEST_NOOP);
+ //bind(AppManifest.class).toInstance(APP_MANIFEST_NOOP);
}
@Provides
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 28e9e3bbd3..61e2dae2ba 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,12 +22,6 @@ 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;
import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.clock.Clock;
@@ -54,10 +48,11 @@ 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;
import org.apache.isis.schema.utils.ChangesDtoUtils;
import org.apache.isis.schema.utils.CommandDtoUtils;
import org.apache.isis.schema.utils.InteractionDtoUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class IsisSessionFactoryBuilder {
@@ -185,82 +180,35 @@ public class IsisSessionFactoryBuilder {
IsisContext.setSessionFactory(isisSessionFactory);
- final List<Future<Object>> futures = ThreadPoolSupport.getInstance().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;
- }
- public String toString() {
- return "SpecificationLoader#init()";
- }
-
- },
- new Callable<Object>() {
- @Override public Object call() {
- persistenceSessionFactory.init(configuration);
- return null;
- }
- public String toString() {
- return "persistenceSessionFactory#init(...)";
- }
- },
- new Callable<Object>() {
- @Override public Object call() throws Exception {
- ChangesDtoUtils.init();
- return null;
- }
- public String toString() {
- return "ChangesDtoUtils.init()";
- }
- },
- new Callable<Object>() {
- @Override public Object call() throws Exception {
- InteractionDtoUtils.init();
- return null;
- }
- public String toString() {
- return "InteractionDtoUtils.init()";
- }
- },
- new Callable<Object>() {
- @Override public Object call() throws Exception {
- CommandDtoUtils.init();
- return null;
- }
- public String toString() {
- return "CommandDtoUtils.init()";
- }
- }
-
- );
-
- ThreadPoolSupport.getInstance().joinGatherFailures(futures);
-
+ {
+
+ // 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);
+ ChangesDtoUtils.init();
+ InteractionDtoUtils.init();
+ CommandDtoUtils.init();
+ }
persistenceSessionFactory.catalogNamedQueries(specificationLoader);
diff --git a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/TimestampService.java b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/TimestampService.java
index 6f2b63734a..54b03f0d9e 100644
--- a/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/TimestampService.java
+++ b/core/runtime/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/service/support/TimestampService.java
@@ -40,12 +40,16 @@ public class TimestampService implements
@PostConstruct
public void open() {
- isisJdoSupport.getJdoPersistenceManager().addInstanceLifecycleListener(this, null);
+ if(isisJdoSupport!=null) {
+ isisJdoSupport.getJdoPersistenceManager().addInstanceLifecycleListener(this);
+ }
}
@PreDestroy
public void close() {
- isisJdoSupport.getJdoPersistenceManager().removeInstanceLifecycleListener(this);
+ if(isisJdoSupport!=null) {
+ isisJdoSupport.getJdoPersistenceManager().removeInstanceLifecycleListener(this);
+ }
}
@Programmatic
diff --git a/core/viewer-restfulobjects-applib/pom.xml b/core/viewer-restfulobjects-applib/pom.xml
index cbc701a111..2866f82ee8 100644
--- a/core/viewer-restfulobjects-applib/pom.xml
+++ b/core/viewer-restfulobjects-applib/pom.xml
@@ -70,22 +70,22 @@
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.module</groupId>
- <artifactId>jackson-module-jaxb-annotations</artifactId>
- </dependency>
+<!-- <dependency> -->
+<!-- <groupId>com.fasterxml.jackson.core</groupId> -->
+<!-- <artifactId>jackson-core</artifactId> -->
+<!-- </dependency> -->
+<!-- <dependency> -->
+<!-- <groupId>com.fasterxml.jackson.core</groupId> -->
+<!-- <artifactId>jackson-annotations</artifactId> -->
+<!-- </dependency> -->
+<!-- <dependency> -->
+<!-- <groupId>com.fasterxml.jackson.core</groupId> -->
+<!-- <artifactId>jackson-databind</artifactId> -->
+<!-- </dependency> -->
+<!-- <dependency> -->
+<!-- <groupId>com.fasterxml.jackson.module</groupId> -->
+<!-- <artifactId>jackson-module-jaxb-annotations</artifactId> -->
+<!-- </dependency> -->
<!-- TEST DEPENDENCIES -->
<dependency>
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 5ec7809b4c..d19dbbfac7 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
@@ -26,56 +26,9 @@ import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.UUID;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Future;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-import com.google.common.io.Resources;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
-import org.apache.wicket.Application;
-import org.apache.wicket.Component;
-import org.apache.wicket.ConverterLocator;
-import org.apache.wicket.IConverterLocator;
-import org.apache.wicket.Page;
-import org.apache.wicket.RuntimeConfigurationType;
-import org.apache.wicket.SharedResources;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.authentication.IAuthenticationStrategy;
-import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
-import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
-import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
-import org.apache.wicket.core.request.mapper.MountedMapper;
-import org.apache.wicket.devutils.debugbar.DebugBar;
-import org.apache.wicket.devutils.debugbar.InspectorDebugPanel;
-import org.apache.wicket.devutils.debugbar.PageSizeDebugPanel;
-import org.apache.wicket.devutils.debugbar.SessionSizeDebugPanel;
-import org.apache.wicket.devutils.debugbar.VersionDebugContributor;
-import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
-import org.apache.wicket.guice.GuiceComponentInjector;
-import org.apache.wicket.markup.head.IHeaderResponse;
-import org.apache.wicket.markup.head.filter.JavaScriptFilteredIntoFooterHeaderResponse;
-import org.apache.wicket.markup.html.IHeaderContributor;
-import org.apache.wicket.markup.html.IHeaderResponseDecorator;
-import org.apache.wicket.markup.html.WebPage;
-import org.apache.wicket.request.cycle.IRequestCycleListener;
-import org.apache.wicket.request.cycle.PageRequestHandlerTracker;
-import org.apache.wicket.request.cycle.RequestCycleListenerCollection;
-import org.apache.wicket.request.resource.CssResourceReference;
-import org.apache.wicket.settings.DebugSettings;
-import org.apache.wicket.settings.RequestCycleSettings;
-import org.apache.wicket.util.IContextProvider;
-import org.apache.wicket.util.time.Duration;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.wicketstuff.select2.ApplicationSettings;
+import java.util.function.Supplier;
+import org.apache.isis.applib.AppManifest;
import org.apache.isis.core.commons.authentication.AuthenticationSession;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationDefault;
@@ -88,7 +41,6 @@ import org.apache.isis.core.runtime.runner.IsisInjectModule;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.context.IsisContext;
import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
-import org.apache.isis.core.runtime.threadpool.ThreadPoolSupport;
import org.apache.isis.core.webapp.IsisWebAppBootstrapper;
import org.apache.isis.core.webapp.WebAppConstants;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
@@ -116,6 +68,52 @@ import org.apache.isis.viewer.wicket.viewer.integration.wicket.ConverterForObjec
import org.apache.isis.viewer.wicket.viewer.integration.wicket.ConverterForObjectAdapterMemento;
import org.apache.isis.viewer.wicket.viewer.integration.wicket.WebRequestCycleForIsis;
import org.apache.isis.viewer.wicket.viewer.settings.IsisResourceSettings;
+import org.apache.wicket.Application;
+import org.apache.wicket.Component;
+import org.apache.wicket.ConverterLocator;
+import org.apache.wicket.IConverterLocator;
+import org.apache.wicket.Page;
+import org.apache.wicket.RuntimeConfigurationType;
+import org.apache.wicket.SharedResources;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.authentication.IAuthenticationStrategy;
+import org.apache.wicket.authentication.strategy.DefaultAuthenticationStrategy;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebApplication;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
+import org.apache.wicket.core.request.mapper.MountedMapper;
+import org.apache.wicket.devutils.debugbar.DebugBar;
+import org.apache.wicket.devutils.debugbar.InspectorDebugPanel;
+import org.apache.wicket.devutils.debugbar.PageSizeDebugPanel;
+import org.apache.wicket.devutils.debugbar.SessionSizeDebugPanel;
+import org.apache.wicket.devutils.debugbar.VersionDebugContributor;
+import org.apache.wicket.devutils.diskstore.DebugDiskDataStore;
+import org.apache.wicket.guice.GuiceComponentInjector;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.filter.JavaScriptFilteredIntoFooterHeaderResponse;
+import org.apache.wicket.markup.html.IHeaderContributor;
+import org.apache.wicket.markup.html.IHeaderResponseDecorator;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.request.cycle.IRequestCycleListener;
+import org.apache.wicket.request.cycle.PageRequestHandlerTracker;
+import org.apache.wicket.request.cycle.RequestCycleListenerCollection;
+import org.apache.wicket.request.resource.CssResourceReference;
+import org.apache.wicket.settings.DebugSettings;
+import org.apache.wicket.settings.RequestCycleSettings;
+import org.apache.wicket.util.IContextProvider;
+import org.apache.wicket.util.time.Duration;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.wicketstuff.select2.ApplicationSettings;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.common.io.Resources;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
import de.agilecoders.wicket.core.Bootstrap;
import de.agilecoders.wicket.core.markup.html.bootstrap.behavior.BootstrapBaseBehavior;
@@ -183,7 +181,7 @@ public class IsisWicketApplication
public static final BootswatchTheme BOOTSWATCH_THEME_DEFAULT = BootswatchTheme.Flatly;
-
+ public static Supplier<AppManifest> appManifestProvider;
private final IsisLoggingConfigurer loggingConfigurer = new IsisLoggingConfigurer();
@@ -332,11 +330,13 @@ public class IsisWicketApplication
*/
@Override
protected void init() {
- List<Future<Object>> futures = null;
+
try {
super.init();
- futures = startBackgroundInitializationThreads();
+ configureWebJars();
+ configureWicketBootstrap();
+ configureWicketSelect2();
String isisConfigDir = getServletContext().getInitParameter("isis.config.dir");
@@ -368,7 +368,8 @@ public class IsisWicketApplication
//
final DeploymentCategory deploymentCategory = deploymentType.getDeploymentCategory();
final IsisInjectModule isisModule = newIsisModule(deploymentCategory, configuration);
- final Injector injector = Guice.createInjector(isisModule, newIsisWicketModule(configuration));
+ final Injector injector = Guice.createInjector(isisModule,
+ newIsisWicketModule(appManifestProvider.get(), configuration));
initWicketComponentInjection(injector);
@@ -442,9 +443,7 @@ public class IsisWicketApplication
// because Wicket's handling in its WicketFilter (that calls this method) does not log the exception.
LOG.error("Failed to initialize", ex);
throw ex;
- } finally {
- ThreadPoolSupport.getInstance().join(futures);
- }
+ }
final String themeName = configuration.getString(
"isis.viewer.wicket.themes.initial", BOOTSWATCH_THEME_DEFAULT.name());
@@ -461,40 +460,9 @@ public class IsisWicketApplication
}
- protected List<Future<Object>> startBackgroundInitializationThreads() {
- return ThreadPoolSupport.getInstance().invokeAll(
- new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- configureWebJars();
- return null;
- }
- public String toString() {
- return "configureWebJars()";
- }
- },
- new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- configureWicketBootstrap();
- return null;
- }
- public String toString() {
- return "configureWicketBootstrap()";
- }
- },
- new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- configureWicketSelect2();
- return null;
- }
- public String toString() {
- return "configureWicketSelect2()";
- }
- }
- );
- }
+
+
+
/**
* protected visibility to allow ad-hoc overriding of some other authentication strategy.
@@ -688,12 +656,13 @@ public class IsisWicketApplication
/**
* Override if required
* @param isisConfiguration
+ * @param appManifest
*/
- protected Module newIsisWicketModule(final IsisConfiguration isisConfiguration) {
- return new IsisWicketModule(getServletContext(), isisConfiguration);
+ protected Module newIsisWicketModule(final AppManifest appManifest, final IsisConfiguration isisConfiguration) {
+ return new IsisWicketModule(appManifest, getServletContext(), isisConfiguration);
}
protected Module newIsisWicketModule() {
- return newIsisWicketModule(null);
+ return newIsisWicketModule(null, null);
}
// //////////////////////////////////////
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
index a06414e51c..e394bed3c2 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketModule.java
@@ -19,21 +19,20 @@
package org.apache.isis.viewer.wicket.viewer;
+import static org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.readLines;
+
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import javax.servlet.ServletContext;
-import com.google.inject.AbstractModule;
-import com.google.inject.Provider;
-import com.google.inject.name.Names;
-
+import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.services.email.EmailService;
import org.apache.isis.applib.services.userreg.EmailNotificationService;
+import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.runtime.services.email.EmailServiceDefault;
import org.apache.isis.core.runtime.services.userreg.EmailNotificationServiceDefault;
-import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.models.ImageResourceCache;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
@@ -51,7 +50,9 @@ import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassRegistryDe
import org.apache.isis.viewer.wicket.viewer.registries.pages.PageNavigationServiceDefault;
import org.apache.isis.viewer.wicket.viewer.settings.WicketViewerSettingsDefault;
-import static org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.readLines;
+import com.google.inject.AbstractModule;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
/**
* To override
@@ -72,18 +73,22 @@ import static org.apache.isis.viewer.wicket.viewer.IsisWicketApplication.readLin
*/
public class IsisWicketModule extends AbstractModule {
+ private AppManifest appManifest;
private ServletContext servletContext;
private IsisConfiguration isisConfigIfAny;
public IsisWicketModule(
+ final AppManifest appManifest,
final ServletContext servletContext,
final IsisConfiguration isisConfigurationIfAny) {
+ this.appManifest = appManifest;
this.servletContext = servletContext;
this.isisConfigIfAny = isisConfigurationIfAny;
}
@Override
protected void configure() {
+ bind(AppManifest.class).to(appManifest.getClass());
bind(ComponentFactoryRegistry.class).to(ComponentFactoryRegistryDefault.class);
bind(PageClassRegistry.class).to(PageClassRegistryDefault.class);
bind(EmailVerificationUrlService.class).to(EmailVerificationUrlServiceDefault.class);
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/DeploymentTypeWicketAbstract.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/DeploymentTypeWicketAbstract.java
index dcefd4c619..d4afcbbeae 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/DeploymentTypeWicketAbstract.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/isis/DeploymentTypeWicketAbstract.java
@@ -19,12 +19,11 @@
package org.apache.isis.viewer.wicket.viewer.integration.isis;
-import org.apache.wicket.Application;
-import org.apache.wicket.RuntimeConfigurationType;
-
import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
+import org.apache.wicket.Application;
+import org.apache.wicket.RuntimeConfigurationType;
/**
* {@link DeploymentType} for production usage.
@@ -42,7 +41,9 @@ public class DeploymentTypeWicketAbstract extends DeploymentTypeAbstract {
}
public RuntimeConfigurationType getConfigurationType() {
- return getDeploymentCategory().isProduction()? RuntimeConfigurationType.DEPLOYMENT: RuntimeConfigurationType.DEVELOPMENT;
+ return getDeploymentCategory().isProduction()
+ ? RuntimeConfigurationType.DEPLOYMENT:
+ RuntimeConfigurationType.DEVELOPMENT;
}
diff --git a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
index 6bd752ddb5..db042ccf6e 100644
--- a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
+++ b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/IsisWicket_providers.java
@@ -19,20 +19,19 @@
package org.apache.isis.viewer.wicket.viewer;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertThat;
import org.apache.isis.core.commons.configbuilder.IsisConfigurationBuilder;
import org.apache.isis.core.runtime.system.DeploymentType;
import org.apache.isis.core.runtime.system.session.IsisSessionFactoryBuilder;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertThat;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
public class IsisWicket_providers {
@@ -41,7 +40,7 @@ public class IsisWicket_providers {
@Before
public void setUp() throws Exception {
- isisWicketModule = new IsisWicketModule(null, null);
+ isisWicketModule = new IsisWicketModule(null, null, null);
injector = Guice.createInjector(isisWicketModule);
}
diff --git a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java
index c59e9e49b2..1049111492 100644
--- a/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java
+++ b/core/viewer-wicket-impl/src/test/java/org/apache/isis/viewer/wicket/viewer/WicketObjectModule_bindingsStandard.java
@@ -19,19 +19,13 @@
package org.apache.isis.viewer.wicket.viewer;
+import static org.hamcrest.Matchers.instanceOf;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
import java.util.Arrays;
import java.util.Collection;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar;
import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistry;
import org.apache.isis.viewer.wicket.ui.pages.PageClassList;
@@ -40,10 +34,15 @@ import org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFacto
import org.apache.isis.viewer.wicket.viewer.registries.components.ComponentFactoryRegistryDefault;
import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassListDefault;
import org.apache.isis.viewer.wicket.viewer.registries.pages.PageClassRegistryDefault;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
@RunWith(Parameterized.class)
public class WicketObjectModule_bindingsStandard {
@@ -66,7 +65,7 @@ public class WicketObjectModule_bindingsStandard {
@Before
public void setUp() throws Exception {
- wicketObjectsModule = new IsisWicketModule(null,null);
+ wicketObjectsModule = new IsisWicketModule(null,null, null);
injector = Guice.createInjector(wicketObjectsModule);
}
diff --git a/examples/helloworld/pom.xml b/examples/helloworld/pom.xml
index 6f68bdb809..4ebd804e51 100644
--- a/examples/helloworld/pom.xml
+++ b/examples/helloworld/pom.xml
@@ -25,9 +25,47 @@
<name>Apache Isis App - HelloWorld</name>
<properties>
+ <spring-boot.version>2.6.7</spring-boot.version>
+ <wicket-spring-boot-starter.version>3.1.6</wicket-spring-boot-starter.version>
</properties>
<dependencies>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>${spring-boot.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ <version>${spring-boot.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <version>${spring-boot.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.isis.core</groupId>
+ <artifactId>isis-jdk-supplemental</artifactId>
+ <type>pom</type>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-jsr310</artifactId>
+ </dependency>
<!-- ISIS API -->
<dependency>
diff --git a/examples/helloworld/src/main/java/domainapp/application/HelloWorldApp.java b/examples/helloworld/src/main/java/domainapp/application/HelloWorldApp.java
new file mode 100644
index 0000000000..deee94be0e
--- /dev/null
+++ b/examples/helloworld/src/main/java/domainapp/application/HelloWorldApp.java
@@ -0,0 +1,46 @@
+/*
+ * 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 domainapp.application;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.Import;
+
+@SpringBootApplication
+@Import({
+ HelloWorldAppConfiguration.class
+})
+public class HelloWorldApp extends SpringBootServletInitializer {
+
+ public static void main(final String[] args) throws Exception {
+
+ //_OsUtil.thereCanBeOnlyOne(new File("pid.log"));
+
+ com.google.common.base.Preconditions p;
+
+ new SpringApplicationBuilder()
+ .sources(HelloWorldApp.class)
+ .run(args);
+ }
+
+
+
+}
+
diff --git a/examples/helloworld/src/main/java/domainapp/application/HelloWorldAppConfiguration.java b/examples/helloworld/src/main/java/domainapp/application/HelloWorldAppConfiguration.java
new file mode 100644
index 0000000000..ba5c38eff2
--- /dev/null
+++ b/examples/helloworld/src/main/java/domainapp/application/HelloWorldAppConfiguration.java
@@ -0,0 +1,74 @@
+/*
+ * 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 domainapp.application;
+
+import org.apache.isis.applib.AppManifest;
+import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
+import org.apache.isis.viewer.wicket.viewer.IsisWicketApplication;
+import org.apache.wicket.protocol.http.WicketFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import lombok.val;
+
+@Configuration
+public class HelloWorldAppConfiguration {
+
+ @Bean
+ public FilterRegistrationBean<WicketFilter> wicketFilterRegistration() {
+ val registration = new FilterRegistrationBean<WicketFilter>();
+ registration.setFilter(wicketFilter());
+ registration.setName("wicketFilter");
+ registration.setOrder(1);
+ setupWicket(registration);
+ return registration;
+ }
+
+ public WicketFilter wicketFilter() {
+ return new WicketFilter();
+ }
+
+ private AppManifest appManifest() {
+ return new HelloWorldAppManifest();
+ }
+
+ private DeploymentCategory deploymentCategory() {
+ return DeploymentCategory.PROTOTYPING;
+ }
+
+ private void setupWicket(FilterRegistrationBean<WicketFilter> filterReg) {
+
+ String deploymentMode = deploymentCategory().isPrototyping() ? "development" : "deployment";
+ String wicketApp = IsisWicketApplication.class.getName();
+ String urlPattern = "/wicket/*";
+
+ filterReg.addInitParameter("applicationClassName", wicketApp);
+ filterReg.addInitParameter("filterMappingUrlPattern", urlPattern);
+ filterReg.addInitParameter("configuration", deploymentMode);
+ filterReg.addUrlPatterns(urlPattern);
+
+ IsisWicketApplication.appManifestProvider = this::appManifest;
+
+ }
+
+
+
+}
+
diff --git a/examples/pom.xml b/examples/pom.xml
index 89e71a1893..fd03514720 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -77,7 +77,9 @@
<modules>
<module>helloworld</module>
+ <!--
<module>simpleapp</module>
+ -->
</modules>
</project>