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 2021/04/05 09:16:11 UTC

[isis] branch ISIS-2594 created (now d9383ff)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-2594
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at d9383ff  ISIS-2594: adds EL config props

This branch includes the following new commits:

     new d9383ff  ISIS-2594: adds EL config props

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[isis] 01/01: ISIS-2594: adds EL config props

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2594
in repository https://gitbox.apache.org/repos/asf/isis.git

commit d9383ff2a99726db4c36254d2964d6765e819a25
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Apr 5 10:15:25 2021 +0100

    ISIS-2594: adds EL config props
---
 .../isis/core/config/EclipselinkConfiguration.java | 535 +++++++++++++++++++++
 .../apache/isis/core/config/IsisConfiguration.java |  37 ++
 .../isis/core/config/IsisModuleCoreConfig.java     |   8 +-
 .../additional-spring-configuration-metadata.json  | 104 ++++
 4 files changed, 683 insertions(+), 1 deletion(-)

diff --git a/core/config/src/main/java/org/apache/isis/core/config/EclipselinkConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/EclipselinkConfiguration.java
new file mode 100644
index 0000000..5ee8732
--- /dev/null
+++ b/core/config/src/main/java/org/apache/isis/core/config/EclipselinkConfiguration.java
@@ -0,0 +1,535 @@
+/*
+ *  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.config;
+
+import org.eclipse.persistence.config.ProfilerType;
+import org.eclipse.persistence.sessions.SessionProfiler;
+import org.eclipse.persistence.tools.profiler.PerformanceMonitor;
+import org.eclipse.persistence.tools.profiler.PerformanceProfiler;
+import org.eclipse.persistence.tools.profiler.QueryMonitor;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.validation.annotation.Validated;
+
+import lombok.Data;
+
+/**
+ * Selected configuration for Eclipselink, to provide IDE support.
+ *
+ * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm">Eclipselink Config Property docs</a>
+ */
+@ConfigurationProperties("eclipselink")
+@Data
+@Validated
+public class EclipselinkConfiguration {
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#weaving">eclipse.weaving</a> docs
+     */
+    private boolean weaving = false;
+
+    @ConfigurationProperties("eclipselink.weaving")
+    @Validated
+    @Data
+    public static class Weaving {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDCEEFC">eclipse.weaving.changetracking</a> docs
+         */
+        private boolean changetracking = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BABGGCGC">eclipse.weaving.eager</a> docs
+         */
+        private boolean eager = false;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDDIFGE">eclipse.weaving.fetchgroups</a> docs
+         */
+        private boolean fetchgroups = false;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BABJICDJ">eclipse.weaving.internal</a> docs
+         */
+        private boolean internal = false;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BABDBIFE">eclipse.weaving.lazy</a> docs
+         */
+        private boolean lazy = false;
+    }
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#delayonstartup">eclipselink.deploy-on-startup</a> docs
+     */
+    private boolean deployOnStartup = false;
+
+    private final Descriptor descriptor = new Descriptor();
+    @Data
+    public static class Descriptor {
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CCHIEAIA">eclipselink.descriptor.customizer</a> docs
+         */
+        @IsisConfiguration.AssignableFrom("org.eclipse.persistence.descriptors.ClassDescriptor")
+        Class<?> customizer = null;
+    }
+
+    private final Session session = new Session();
+    @Data
+    public static class Session {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#session.customizer">eclipselink.session.customizer</a> docs
+         */
+        @IsisConfiguration.AssignableFrom("org.eclipse.persistence.config.SessionCustomizer")
+        Class<?> customizer = null;
+
+        private final Include include = new Include();
+        @Data
+        public static class Include {
+            private final Descriptor descriptor = new Descriptor();
+            @Data
+            public static class Descriptor {
+
+                /**
+                 * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDFDJJD">eclipselink.session.include.descriptor.queries</a> docs
+                 */
+                private boolean queries = false;
+            }
+        }
+    }
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#session-event-listener">eclipselink.session-event-listener</a> docs
+     */
+    @IsisConfiguration.AssignableFrom("org.eclipse.persistence.sessions.SessionEventListener")
+    Class<?> sessionEventListener = null;
+
+
+    private final Logging logging = new Logging();
+    @Data
+    public static class Logging {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDJCBIF">eclipselink.logging.connection</a> docs
+         */
+        private boolean connection = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BEIFJBIE">eclipselink.logging.exceptions</a> docs
+         */
+        private boolean exceptions = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BEIHGBBC">eclipselink.logging.file</a> docs
+         */
+        private String file = null;
+
+        public enum LoggingLevel {
+            OFF,
+            SEVERE,
+            WARNING,
+            INFO,
+            CONFIG,
+            FINE,
+            FINER,
+            FINEST,
+            ALL
+        }
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDGFDDH">eclipselink.logging.level</a> docs
+         */
+        private LoggingLevel level = LoggingLevel.INFO;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BEIHGGHH">eclipselink.logging.session</a>
+         */
+        private boolean session = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BEIFFGGB">eclipselink.logging.thread</a>
+         */
+        private boolean thread = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BEIJCEBJ">eclipselink.logging.timestamp</a>
+         */
+        private boolean timestamp = true;
+    }
+
+    private final Cache cache = new Cache();
+    @Data
+    public static class Cache {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CCHEEFGA">eclipselink.cache.database-event-listener</a> docs
+         */
+        @IsisConfiguration.AssignableFrom("org.eclipse.persistence.platform.database.events.DatabaseEventListener")
+        Class<?> databaseEventListener;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDEJCJJ">eclipselink.cache.shared</a> docs
+         */
+        boolean shared = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDIGIEC">eclipselink.cache.size</a> docs
+         */
+        int size = 100; // bytes
+
+
+        /**
+         * The CacheType enum is used with the Cache annotation for a persistent class.
+         * It defines the type of cache (IdentityMap) used for the class. By default the
+         * SOFT_WEAK cache type is used.
+         *
+         * @see org.eclipse.persistence.annotations.Cache
+         * @author Guy Pelletier
+         * @since Oracle TopLink 11.1.1.0.0
+         */
+        public enum CacheType {
+            /**
+             * Provides full caching and guaranteed identity. Caches all objects
+             * and does not remove them.
+             * WARNING: This method may be memory intensive when many objects are
+             * read.  If used on a large data set it will eventually causes an out of memory error.
+             */
+            Full,
+
+            /**
+             * Similar to the FULL identity map except that the map holds the
+             * objects using weak references. This method allows full garbage
+             * collection and guaranteed identity.  It will only hold objects
+             * that are referenced by the application so may not provide a large caching benefit.
+             */
+            Weak,
+
+            /**
+             * Similar to the FULL identity map except that the map holds the
+             * objects using soft references. This method allows full garbage
+             * collection when memory is low and provides full caching and guaranteed identity.
+             */
+            Soft,
+
+            /**
+             * Similar to the WEAK identity map except that it maintains a
+             * most-frequently-used sub-cache. The size of the sub-cache is
+             * proportional to the size of the identity map as specified by
+             * {@literal @}Cache size attribute. The sub-cache
+             * uses soft references to ensure that these objects are
+             * garbage-collected only if the system is low on memory.
+             */
+            SoftWeak,
+
+            /**
+             * Identical to the soft cache weak (SOFT_WEAK) identity map except
+             * that it uses hard references in the sub-cache. Use this identity
+             * map if soft references do not behave properly on your platform.
+             */
+            HardWeak,
+
+            /**
+             * WARNING: Does not preserve object identity and does not cache
+             * objects.  This cache type is not recommend and should normally not be used.
+             * This cache type should not be used to disable caching, to properly disable
+             * caching set the @Cache isolation attribute to ISOLATED.
+             */
+            NONE
+        }
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDGDIEI">eclipselink.cache.type</a> docs
+         */
+        CacheType type = CacheType.SoftWeak;
+    }
+
+    private final FlushClear flushClear = new FlushClear();
+    @Data
+    public static class FlushClear {
+
+
+        /**
+         * FlushClearCache persistence property
+         * defines modes of cache handling after em.flush call followed by em.clear call.
+         * This property could be specified while creating either EntityManagerFactory
+         * (createEntityManagerFactory or persistence.xml)
+         * or EntityManager (createEntityManager); the latter overrides the former.
+         *
+         * <p>JPA persistence property Usage:
+         *
+         * <p><code>properties.add(PersistenceUnitProperties.FLUSH_CLEAR_CACHE, FlushClearCache.Drop);</code>
+         *
+         * <p>Values are case-insensitive.
+         * "" could be used instead of default value FlushClearCache.DEFAULT.
+         */
+        public enum FlushClearCache {
+
+            /**
+             * Call to clear method causes to drop from EntityManager cache only the objects that haven't been flushed.
+             * This is the most accurate mode: shared cache is perfect after commit;
+             * but the least memory effective: smbd repeatedly using flush followed by clear
+             * may eventually run out of memory in a huge transaction.
+             */
+            Merge,
+
+            /**
+             * Call to clear method causes to drop the whole EntityManager cache.
+             * This is the fasteset and using the least memory mode -
+             * but after commit the shared cache potentially contains stale data.
+             */
+            Drop,
+
+            /** Call to clear method causes to drops the whole EntityManager cache,
+             * on commit the classes that have at least one object updated or deleted
+             * are invalidated in the shared cache.
+             * This is a compromise mode: potentially a bit slower than drop,
+             * but has virtually the same memory efficiency.
+             * After commit all potentially stale data is invalidated in the shared cache.
+             */
+            DropInvalidate,
+        }
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CDEJGBEI">eclipselink.flush-clear.cache</a> docs
+         */
+        FlushClearCache cache = FlushClearCache.DropInvalidate;
+    }
+
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#createddljdbcfilename">eclipselink.create-ddl-jdbc-file-name</a> docs
+     */
+    String createDdlJdbcFileName = null;
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BABFEBCG">eclipselink.drop-ddl-jdbc-file-name</a> docs
+     */
+    String dropDdlJdbcFileName = null;
+
+    private final Ddl ddl = new Ddl();
+    @Data
+    public static class Ddl {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BEHBIEJG">eclipselink.ddl.table-creation-suffix</a> docs
+         */
+        String tableCreationSuffix = null;
+    }
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BABHEJJI">eclipselink.ddl-generation</a> docs
+     */
+    @IsisConfiguration.OneOf(value={"create-tables", "create-or-extend-tables", "drop-and-create-tables", "none"})
+    String ddlGeneration = "none";
+
+    @ConfigurationProperties("eclipselink.ddl-generation")
+    @Validated
+    @Data
+    public static class DdlGeneration {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#BABCDHBB">eclipselink.ddl-generation.output-mode</a> docs
+         */
+        @IsisConfiguration.OneOf(value={"both", "database", "sql-script"})
+        String outputMode = "database";
+
+    }
+
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CCHCJCDJ">eclipselink.exception-handler</a> docs
+     */
+    @IsisConfiguration.AssignableFrom("org.eclipse.persistence.exceptions.ExceptionHandler")
+    Class<?> exceptionHandler = null;
+
+    /**
+     * The "<code>eclipselink.profiler</code>" property configures the type of
+     * profiler used to capture runtime statistics.
+     * <p>
+     * <b>Allowed Values:</b>
+     * <ul>
+     * <li>"<code>NoProfiler</code>" (DEFAULT)
+     * <li>"<code>PerformanceMonitor</code>" - use {@link PerformanceMonitor}
+     * <li>"<code>PerformanceProfiler</code>" - use {@link PerformanceProfiler}
+     * <li>"<code>QueryMonitor</code>" - use {@link QueryMonitor}
+     * <li>"<code>DMSProfiler</code>" - use {@link org.eclipse.persistence.tools.profiler.oracle.DMSPerformanceProfiler}
+     * <li>the fully qualified name for a class that implements {@link SessionProfiler} interface
+     * </ul>
+     *
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#profiler">eclipselink.profiler</a> docs
+     */
+    private String profiler = "NoProfiler";
+
+    private final Jdbc jdbc = new Jdbc();
+    @Data
+    public static class Jdbc {
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CIHHJBFB">eclipselink.jdbc.allow-native-sql-queries</a> docs
+         */
+        private boolean allowNativeSqlQueries = true;
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CIHIAGAF">eclipselink.jdbc.batch-writing</a> docs
+         */
+        @IsisConfiguration.OneOf(value={"jdbc", "buffered", "oracle-jdbc", "none"})
+        String batchWriting = "none";
+
+        @ConfigurationProperties("eclipselink.jdbc.batch-writing")
+        @Validated
+        @Data
+        public static class BatchWriting {
+
+            /**
+             * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CIHJADHF">eclipse.jdbc.batchwriting.size</a> docs
+             */
+            private int size;
+        }
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDHAFAA">eclipselink.jdbc.cache-statements</a> docs
+         */
+        private boolean cacheStatements = true;
+
+        @ConfigurationProperties("eclipselink.jdbc.cache-statements")
+        @Validated
+        @Data
+        public static class CacheStatements {
+
+            /**
+             * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CACBICGG">eclipse.jdbc.cache-statements.size</a> docs
+             */
+            private int size;
+        }
+
+        /**
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm">eclipselink.jdbc.native-sql</a> docs
+         */
+        private boolean nativeSql = true;
+
+    }
+
+    private final Concurrency concurrency = new Concurrency();
+    @Data
+    public static class Concurrency {
+
+        private final Manager manager = new Manager();
+        @Data
+        public static class Manager {
+
+            /**
+             * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.waittime">eclipselink.concurrency.manager.waittime</a> docs
+             */
+            private long waittime = 0; // ms
+
+            /**
+             * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.maxsleeptime">eclipselink.concurrency.manager.maxsleeptime</a> docs
+             */
+            private long maxsleeptime = 40000; // ms
+
+            /**
+             * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.maxfrequencytodumptinymessage">eclipselink.concurrency.manager.maxfrequencytodumptinymessage</a> docs
+             */
+            private long maxfrequencytodumptinymessage = 40000; // ms
+
+            /**
+             * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.maxfrequencytodumptinymessage">eclipselink.concurrency.manager.maxfrequencytodumpmassivemessage</a> docs
+             */
+            private long maxfrequencytodumpmassivemessage = 60000; // ms
+
+            private final Allow allow = new Allow();
+            @Data
+            public static class Allow {
+
+                /**
+                 * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.allow.interruptedexception">eclipselink.concurrency.manager.allow.interruptedexception</a> docs
+                 */
+                private boolean interruptedexception = true;
+
+                /**
+                 * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.allow.concurrencyexception">eclipselink.concurrency.manager.allow.concurrencyexception</a> docs
+                 */
+                private boolean concurrencyexception = true;
+
+                /**
+                 * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#concurrency.manager.allow.readlockstacktrace">eclipselink.concurrency.manager.allow.readlockstacktrace</a> docs
+                 */
+                private boolean readlockstacktrace = true;
+            }
+        }
+    }
+
+    public enum IdValidation {
+        /**
+         * Null, 0 and negative values are invalid for IDs extending Number and primitive int and long IDs.
+         */
+        Negative,
+        /**
+         * EclipseLink performs no ID validation.
+         */
+        None,
+        /**
+         * Null is invalid All other values are valid.
+         */
+        Null,
+        /**
+         * Null, 0 and negative values are invalid for primitive int and long IDs.
+         */
+        Zero
+    }
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CACEEGCC">eclipselink.id-validation</a> docs
+     */
+    private IdValidation idValidation = IdValidation.None;
+
+    private final Jpa jpa = new Jpa();
+    @Data
+    public static class Jpa {
+        /**
+         * Specify JPA processing to uppercase all column name definitions (simulating case insensitivity).
+         *
+         * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDJGCBD">eclipselink.jpa.uppercase-column-names</a> docs
+         */
+        private boolean upperCaseColumnNames = false;
+    }
+
+    private final Jpql jpql = new Jpql();
+    @Data
+    public static class Jpql {
+
+        @IsisConfiguration.OneOf(value={"EclipseLink", "JPA 1.0", "JPA 2.0", "JPA 2.1", "None"})
+        private String validation = "EclipseLink";
+    }
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#CHDHBGIE">eclipselink.tenant-id</a> docs
+     */
+    private String tenantId;
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#validate-existence">eclipselink.validate-existence</a> docs
+     */
+    private boolean validateExistence = false;
+
+    /**
+     * @see <a href="https://www.eclipse.org/eclipselink/documentation/2.7/jpa/extensions/persistenceproperties_ref.htm#validation-only">eclipselink.validation-only</a> docs
+     */
+    private boolean validationOnly = false;
+
+}
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index c0c7758..8e6108a 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -23,6 +23,7 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
@@ -3009,4 +3010,40 @@ public class IsisConfiguration {
             return superType.isAssignableFrom(candidateClass);
         }
     }
+
+    @Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
+    @Retention(RUNTIME)
+    @Constraint(validatedBy = OneOfValidator.class)
+    @Documented
+    public @interface OneOf {
+
+        String[] value();
+
+        String message()
+                default "{org.apache.isis.core.config.IsisConfiguration.OneOf.message}";
+
+        Class<?>[] groups() default { };
+
+        Class<? extends Payload>[] payload() default { };
+    }
+
+
+    public static class OneOfValidator implements ConstraintValidator<OneOf, String> {
+
+        private List<String> allowed;
+
+        @Override
+        public void initialize(final OneOf assignableFrom) {
+            val value = assignableFrom.value();
+            allowed = value != null? Collections.unmodifiableList(Arrays.asList(value)): Collections.emptyList();
+        }
+
+        @Override
+        public boolean isValid(
+                final String candidateValue,
+                final ConstraintValidatorContext constraintContext) {
+            return allowed.contains(candidateValue);
+        }
+    }
+
 }
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java b/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
index 1111ab7..576f713 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisModuleCoreConfig.java
@@ -55,10 +55,16 @@ import lombok.Data;
     IsisBeanTypeRegistryDefault.class,
     IsisSystemEnvironment.class,
     WebAppContextPath.class,
-    
+
 })
 @EnableConfigurationProperties({
         IsisConfiguration.class,
+        DatanucleusConfiguration.class,
+        EclipselinkConfiguration.class,
+        EclipselinkConfiguration.Weaving.class,
+        EclipselinkConfiguration.DdlGeneration.class,
+        EclipselinkConfiguration.Jdbc.BatchWriting.class,
+        EclipselinkConfiguration.Jdbc.CacheStatements.class,
         RestEasyConfiguration.class,
         IsisModuleCoreConfig.ConfigProps.class,
 })
diff --git a/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index b682866..58ba3ae 100644
--- a/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/core/config/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -33,6 +33,110 @@
           "target": "org.apache.isis.viewer.wicket.viewer.wicketapp.IsisWicketApplication"
         }
       }]
+    },
+    {
+      "name": "eclipselink.cache.database-event-listener",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.eclipse.persistence.platform.database.events.DatabaseEventListener"
+        }
+      }]
+    },
+    {
+      "name": "eclipselink.descriptor.customizer",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.eclipse.persistence.descriptors.ClassDescriptor"
+        }
+      }]
+    },
+    {
+      "name": "eclipselink.session.customizer",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.eclipse.persistence.config.SessionCustomizer"
+        }
+      }]
+    },
+    {
+      "name": "eclipselink.exception-handler",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.eclipse.persistence.exceptions.ExceptionHandler"
+        }
+      }]
+    },
+    {
+      "name": "eclipselink.ddl-generation",
+      "values": [
+        {
+          "value": "create-tables"
+        },
+        {
+          "value": "create-or-extend-tables"
+        },
+        {
+          "value": "drop-and-create-tables"
+        },
+        {
+          "value": "none"
+        }
+      ]
+    },
+    {
+      "name": "eclipselink.ddl-generation.output-mode",
+      "values": [
+        {
+          "value": "both"
+        },
+        {
+          "value": "database"
+        },
+        {
+          "value": "sql-script"
+        }
+      ]
+    },
+    {
+      "name": "eclipselink.jdbc.batch-writing",
+      "values": [
+        {
+          "value": "jdbc"
+        },
+        {
+          "value": "buffered"
+        },
+        {
+          "value": "oracle-jdbc"
+        },
+        {
+          "value": "none"
+        }
+      ]
+    },
+    {
+      "name": "eclipselink.jpql.validation",
+      "values": [
+        {
+          "value": "EclipseLink"
+        },
+        {
+          "value": "JPA 1.0"
+        },
+        {
+          "value": "JPA 2.0"
+        },
+        {
+          "value": "JPA 2.1"
+        },
+        {
+          "value": "None"
+        }
+      ]
     }
   ]
 }