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 2019/10/03 22:23:24 UTC

[isis] branch ISIS-2086 updated (c50cfc9 -> 4cb3e21)

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

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


    from c50cfc9  ISIS-2086: fixes syntax errors in metadata
     add 2a0353a  ISIS-2158: smoketests to have their individual in-mem connections
     add a6fc02a  Merge pull request #150 from apache/ISIS-2086
     add a291c12  ISIS-2158: remove isis system environment SPI
     add 1caca53  ISIS-2163: IsisSystemEnvironment is now a Spring-managed bean.
     add a955ed4  ISIS-2158: move JdoPersistenceLifecycleService -> jdo-common
     add 2bf3f12  ISIS-2158: fixing tests after isis-sys-env was migrated to a bean
     add f7864f4  ISIS-2158: removes the IsisSystemEnvironmentProvider
     add 9a0e111  ISIS-2158: cleanup ServiceRegistryDefault
     add 25a8449  ISIS-2158: more workarounds to fix running a batch of smoketests
     add 41533bc  ISIS-2158: let have the ServiceInjector use the same injection point resolving logic (ordering) as Spring does
     add 9a23647  ISIS-2158: removes the scan-filter as its no longer required
     add 2e77b77  ISIS-2158: have IsisSystemEnvironment cleanup Isis' _Context
     add 37a4a35  ISIS-2158: adds a @Primary annotation instance to _Constants
     add 24438df  ISIS-2158: spec-loading: fixes another concurrent modification issue
     add 35496ed  ISIS-2158: bump to next Spring version -> 2.2.0.RELEASE
     add 6aa8df2  ISIS-2158: spec-loading: another concurrency issue detected and fixed
     add dd1f853  ISIS-2158: spec-loading: more concurrency issues detected and fixed
     add bdb0f5c  ISIS-2158: introduces _Annotations (internal API)
     new 1cc832e  ISIS-2086: wip, converting DN config props to use IsisConfiguration
     new 4cb3e21  ISIS-2086: converts several datanucleus config props to type-safe

The 2 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.


Summary of changes:
 .../isis/applib/annotation/DomainService.java      |   4 +-
 .../exceprecog/ExceptionRecognizerAbstract.java    |   2 +-
 .../apache/isis/commons/internal/_Constants.java   |  10 +
 .../isis/commons/internal/collections/_Arrays.java |  20 ++
 .../isis/commons/internal/collections/_Lists.java  |  10 +-
 .../commons/internal/collections/_Multimaps.java   | 109 +++++++-
 .../isis/commons/internal/context/_Context.java    |  24 +-
 .../{plugins => }/environment/DeploymentType.java  |   2 +-
 .../environment/IsisSystemEnvironment.java         | 153 +++++++++++
 .../isis/commons/internal/ioc/spring/_Spring.java  |  25 +-
 .../plugins/environment/IsisSystemEnvironment.java | 122 ---------
 .../environment/IsisSystemEnvironmentPlugin.java   |  42 ---
 .../commons/internal/reflection/_Annotations.java  |  78 ++++++
 .../org/apache/isis/config/IsisConfigModule.java   |  53 +++-
 .../org/apache/isis/config/IsisConfiguration.java  | 191 +++++++++++++-
 .../isis/config/IsisConfigurationLegacy.java       |  14 +-
 .../beans/IsisBeanScanInterceptorForSpring.java    |  64 -----
 .../metamodel/specloader/IntrospectionMode.java    |   7 +-
 .../additional-spring-configuration-metadata.json  |  70 ++++-
 .../presets/H2InMemory_withUniqueSchema.properties |   3 +-
 .../isis/metamodel/ServiceRegistry_forTesting.java |  14 +-
 .../isis/metamodel/facets/CollectionUtils.java     |   2 +-
 .../apache/isis/metamodel/facets/FacetFactory.java |   1 +
 .../metamodel/facets/MethodRemoverConstants.java   |   2 +-
 .../action/ActionAnnotationFacetFactory.java       |   3 +-
 .../PrototypeFacetForActionAnnotation.java         |   2 +-
 .../actions/prototype/PrototypeFacetAbstract.java  |   2 +-
 .../param/DeriveFacetsPostProcessor.java           |   4 +-
 .../metamodel/services/ServiceInjectorDefault.java |  42 ++-
 .../isis/metamodel/services/ServiceUtil.java       |   5 +-
 .../services/grid/GridLoaderServiceDefault.java    |   4 +-
 .../services/grid/GridSystemServiceAbstract.java   |   4 +-
 .../services/message/MessageServiceNoop.java       |   4 +-
 .../services/registry/ServiceRegistryDefault.java  |  61 +----
 .../isis/metamodel/spec/feature/ObjectAction.java  |   5 +-
 .../metamodel/specloader/SpecificationLoader.java  |   1 -
 .../specloader/SpecificationLoaderDefault.java     |  18 +-
 .../specloader/facetprocessor/FacetProcessor.java  | 292 ++++++++++-----------
 .../specimpl/ObjectSpecificationAbstract.java      | 174 +++++++-----
 .../MetaModelValidatorToCheckModuleExtent.java     |   4 +-
 .../Annotations_getAnnotations_on_Class_Test.java  |  82 +++---
 .../prototype/PrototypeFacetAbstractTest.java      |   2 +-
 .../services/ServiceInjectorDefaultTest.java       |   9 +-
 .../SpecificationLoaderTestAbstract.java           |   2 +
 .../specloader/SpecificationLoaderTest_array.java  |   9 -
 .../datanucleus/DataNucleusPropertiesAware.java    |   4 +
 .../isis/jdo/datanucleus/DataNucleusSettings.java} |  23 +-
 ...rtiesAware.java => IsisConfigurationAware.java} |   6 +-
 .../service}/JdoPersistenceLifecycleService.java   |   4 +-
 .../org/apache/isis/jdo/IsisBootDataNucleus.java   |  28 +-
 .../CreateSchemaObjectFromClassMetadata.java       |  37 ++-
 .../DataNucleusApplicationComponents5.java         |  13 +-
 .../persistence/PersistenceSessionFactory5.java    |  54 ++--
 core/pom.xml                                       |  29 +-
 .../org/apache/isis/runtime/spring/IsisBoot.java   |  21 +-
 .../confmenu/ConfigurationViewServiceDefault.java  |  13 +-
 .../services/i18n/po/TranslationServicePo.java     |   4 +-
 .../menubars/MenuBarsLoaderServiceDefault.java     |   4 +-
 .../menubars/bootstrap3/MenuBarsServiceBS3.java    |   4 +-
 .../services/message/MessageServiceDefault.java    |   3 +-
 .../modules/h2console/WebModuleH2Console.java      |   5 +-
 .../fixtures/LogonFixtureAuthenticator.java        |   8 +-
 .../jmocking/JUnitRuleMockery2.java                |   4 +-
 .../rendering/util/JsonWriterUtil.java             |   7 +-
 .../restfulobjects/IsisBootWebRestfulObjects.java  |   6 -
 .../viewer/wicket/viewer/IsisBootWebWicket.java    |   6 -
 .../wicket/viewer/IsisWicketApplication.java       |  50 ++--
 .../isis/viewer/wicket/viewer/WebModuleWicket.java |   6 +-
 .../collection/AssociatedWithActionsHelper.java    |   3 +-
 .../ajaxtable/PrototypingMessageProvider.java      |   3 +-
 .../java/domainapp/dom/events/EventSubscriber.java |   5 -
 .../dom/types/blob/BlobDemo_downloadLogo.java      |   2 +-
 .../conf/SimpleAppConfigurationForTesting.java     |   6 -
 .../integtests/SimpleModuleManifestForTesting.java |   6 -
 .../bootstrapping/AutoConfigurationTest.java       |   7 +-
 .../SpringServiceInjectOrderTest.java              | 187 +++++++++++++
 .../commandexecution/BackgroundExecutionTest.java  | 135 ----------
 .../testdomain/commandexecution/WrapperTest.java   |  11 +-
 .../org/apache/isis/testdomain/config/FooTest.java |  23 +-
 .../DomainModelTest_usingBadDomain.java            |   7 +-
 .../domainmodel/SpecloaderPerformanceTest.java     |  31 ++-
 .../bootstrapping/builtin-singleton.list           |  22 +-
 .../fixtures/FixturesLifecyleService.java          |   4 +-
 .../secman/model/IsisBootSecmanModel.java          |   7 -
 .../secman/jdo/IsisBootSecmanPersistenceJdo.java   |   7 -
 85 files changed, 1529 insertions(+), 1027 deletions(-)
 rename core/commons/src/main/java/org/apache/isis/commons/internal/{plugins => }/environment/DeploymentType.java (94%)
 create mode 100644 core/commons/src/main/java/org/apache/isis/commons/internal/environment/IsisSystemEnvironment.java
 delete mode 100644 core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironment.java
 delete mode 100644 core/commons/src/main/java/org/apache/isis/commons/internal/plugins/environment/IsisSystemEnvironmentPlugin.java
 create mode 100644 core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Annotations.java
 delete mode 100644 core/config/src/main/java/org/apache/isis/config/beans/IsisBeanScanInterceptorForSpring.java
 copy core/{metamodel/src/main/java/org/apache/isis/metamodel/services/appfeat/ApplicationFeatureFactory.java => plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusSettings.java} (73%)
 copy core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/{DataNucleusPropertiesAware.java => IsisConfigurationAware.java} (84%)
 rename core/{runtime/src/main/java/org/apache/isis/runtime/system/persistence => plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/service}/JdoPersistenceLifecycleService.java (96%)
 create mode 100644 examples/smoketests/src/test/java/org/apache/isis/testdomain/bootstrapping/SpringServiceInjectOrderTest.java
 delete mode 100644 examples/smoketests/src/test/java/org/apache/isis/testdomain/commandexecution/BackgroundExecutionTest.java


[isis] 02/02: ISIS-2086: converts several datanucleus config props to type-safe

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

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

commit 4cb3e2124bf77d9f0d37722f85b16b6a08c5753a
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Oct 3 23:22:50 2019 +0100

    ISIS-2086: converts several datanucleus config props to type-safe
    
    specifically:
    
    isis.persistor.datanucleus.impl.datanucleus.ConnectionFactoryName
    isis.persistor.datanucleus.impl.datanucleus.ConnectionFactory2Name
    isis.persistor.datanucleus.impl.datanucleus.ConnectionPasswordDecrypter
    isis.persistor.datanucleus.impl.datanucleus.PersistenceUnitLoadClasses
    isis.persistor.datanucleus.impl.datanucleus.cache.level2.type
    isis.persistor.datanucleus.impl.datanucleus.objectProvider.className
    isis.persistor.datanucleus.impl.datanucleus.schema.autoCreateAll
    isis.persistor.datanucleus.impl.datanucleus.schema.autoCreateDatabase
    isis.persistor.datanucleus.impl.datanucleus.schema.validateAll
    isis.persistor.datanucleus.impl.javax.jdo.PersistenceManagerFactoryClass
    
    Note that most of these require additional metadata hints, because of casing.
---
 .../org/apache/isis/config/IsisConfiguration.java  | 183 ++++++++++++++++++++-
 .../additional-spring-configuration-metadata.json  |  70 +++++---
 .../DataNucleusApplicationComponents5.java         |   7 +-
 .../persistence/PersistenceSessionFactory5.java    |  49 +-----
 4 files changed, 238 insertions(+), 71 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
index 25135ee..c1444f1 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
@@ -18,7 +18,6 @@
  */
 package org.apache.isis.config;
 
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -116,7 +115,147 @@ public class IsisConfiguration {
                  */
                 @Data
                 public static class DataNucleus {
-                    private String ConnectionPasswordDecrypter;
+
+                    /**
+                     * 	The JNDI name for a connection factory for transactional connections.
+                     *
+                     * 	<p>
+                     * 	    For RBDMS, it must be a JNDI name that points to a javax.sql.DataSource object.
+                     * 	</p>
+                     *
+                     * <p>
+                     *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                     * </p>
+                     */
+                    private String connectionFactoryName;
+
+                    /**
+                     * 	The JNDI name for a connection factory for non-transactional connections.
+                     *
+                     * 	<p>
+                     * 	    For RBDMS, it must be a JNDI name that points to a javax.sql.DataSource object.
+                     * 	</p>
+                     *
+                     * <p>
+                     *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                     * </p>
+                     */
+                    private String connectionFactory2Name;
+
+
+                    /**
+                     * Name of a class that implements <tt>org.datanucleus.store.connection.DecryptionProvider</tt>
+                     * and should only be specified if the password is encrypted in the persistence properties.
+                     *
+                     * <p>
+                     *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                     * </p>
+                     */
+                    private String connectionPasswordDecrypter;
+
+
+                    /**
+                     * 	Used when we have specified the persistence-unit name for a PMF/EMF and where we want the
+                     * 	datastore "tables" for all classes of that persistence-unit loading up into the StoreManager.
+                     *
+                     * <p>
+                     *     Defaults to true, which is the opposite of DataNucleus' own default.
+                     *     (The reason that DN defaults to false is because some databases are slow so such an
+                     *     operation would slow down the startup process).
+                     * </p>
+                     *
+                     * <p>
+                     *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                     * </p>
+                     */
+                    private boolean persistenceUnitLoadClasses = true;
+
+                    public enum TransactionTypeEnum {
+                        RESOURCE_LOCAL,
+                        JTA
+                    }
+
+                    /**
+                     * Type of transaction to use.
+                     *
+                     * <p>
+                     * If running under JavaSE the default is RESOURCE_LOCAL, and if running under JavaEE the default is JTA.
+                     * </p>
+                     *
+                     * <p>
+                     *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                     * </p>
+                     */
+                    private TransactionTypeEnum transactionType;
+
+                    private final Cache cache = new Cache();
+                    @Data
+                    public static class Cache {
+                        private final Level2 level2 = new Level2();
+                        @Data
+                        public static class Level2 {
+                            /**
+                             * Name of the type of Level 2 Cache to use.
+                             *
+                             * <p>
+                             * Can be used to interface with external caching products.
+                             * Use "none" to turn off L2 caching.
+                             * </p>
+                             *
+                             * <p>
+                             * See also Cache docs for JDO, and for JPA
+                             * </p>
+                             */
+                            private String type = "none";
+                        }
+                    }
+                    private final ObjectProvider objectProvider = new ObjectProvider();
+                    @Data
+                    public static class ObjectProvider {
+                        /**
+                         * New feature in DN 3.2.3; enables dependency injection into entities
+                         *
+                         * <p>
+                         *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                         * </p>
+                         */
+                        private String className = "org.apache.isis.jdo.datanucleus.JDOStateManagerForIsis";
+                    }
+                    private final Schema schema = new Schema();
+                    @Data
+                    public static class Schema {
+                        /**
+                         * Whether DN should automatically create the database schema on bootstrapping.
+                         *
+                         * <p>
+                         *     This should be set to <tt>true</tt> when running against an in-memory database, but
+                         *     set to <tt>false</tt> when running against a persistent database (use something like
+                         *     flyway instead to manage schema evolution).
+                         * </p>
+                         *
+                         * <p>
+                         *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                         * </p>
+                         */
+                        private boolean autoCreateAll = false;
+
+                        /**
+                         * Previously we defaulted this property to "true", but that could cause the target database
+                         * to be modified
+                         *
+                         * <p>
+                         *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                         * </p>
+                         */
+                        private boolean autoCreateDatabase = false;
+
+                        /**
+                         * <p>
+                         *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                         * </p>
+                         */
+                        private boolean validateAll = true;
+                    }
                 }
                 private final Javax javax = new Javax();
                 @Data
@@ -124,16 +263,48 @@ public class IsisConfiguration {
                     private final Jdo jdo = new Jdo();
                     @Data
                     public static class Jdo {
+
+                        /**
+                         * <p>
+                         *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                         * </p>
+                         */
+                        private String persistenceManagerFactoryClass = "org.datanucleus.api.jdo.JDOPersistenceManagerFactory";
+
                         private final Option option = new Option();
                         @Data
                         public static class Option {
-                            // this field also appears in additional-spring-configuration-metadata.json, to fix the casing as 'ConnectionDriverName'
+                            /**
+                             * JDBC driver used by DataNucleus Object store to connect.
+                             *
+                             * <p>
+                             *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                             * </p>
+                             */
                             private String connectionDriverName;
-                            // this field also appears in additional-spring-configuration-metadata.json, to fix the casing as 'ConnectionURL'
+                            /**
+                             * URL used by DataNucleus Object store to connect.
+                             *
+                             * <p>
+                             *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                             * </p>
+                             */
                             private String connectionUrl;
-                            // this field also appears in additional-spring-configuration-metadata.json, to fix the casing as 'ConnectionUserName'
+                            /**
+                             * User account used by DataNucleus Object store to connect.
+                             *
+                             * <p>
+                             *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                             * </p>
+                             */
                             private String connectionUserName;
-                            // this field also appears in additional-spring-configuration-metadata.json, to fix the casing as 'ConnectionPassword'
+                            /**
+                             * Password for the user account used by DataNucleus Object store to connect.
+                             *
+                             * <p>
+                             *     See also <tt>additional-spring-configuration-metadata.json</tt> (change casing).
+                             * </p>
+                             */
                             private String connectionPassword;
                         }
                     }
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 acbeb06..04ab67f 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
@@ -1,29 +1,43 @@
 {
   "properties": [
     {
-      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName",
-      "type": "java.lang.String",
-      "description": "JDBC driver used by DataNucleus Object store to connect."
+      "name": "isis.persistor.datanucleus.impl.datanucleus.ConnectionFactoryName"
     },
     {
-      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL",
-      "type": "java.lang.String",
-      "description": "URL used by DataNucleus Object store to connect."
+      "name": "isis.persistor.datanucleus.impl.datanucleus.ConnectionFactory2Name"
     },
     {
-      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName",
-      "type": "java.lang.String",
-      "description": "User account used by DataNucleus Object store to connect."
+      "name": "isis.persistor.datanucleus.impl.datanucleus.ConnectionPasswordDecrypter"
     },
     {
-      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword",
-      "type": "java.lang.String",
-      "description": "Password for the user account used by DataNucleus Object store to connect."
+      "name": "isis.persistor.datanucleus.impl.datanucleus.PersistenceUnitLoadClasses"
     },
     {
-      "name": "isis.persistor.datanucleus.impl.javax.datanucleus.ConnectionPasswordDecrypter",
-      "type": "java.lang.String",
-      "description": "Name of a class that implements org.datanucleus.store.connection.DecryptionProvider and should only be specified if the password is encrypted in the persistence properties"
+      "name": "isis.persistor.datanucleus.impl.datanucleus.objectProvider.className"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.datanucleus.schema.autoCreateAll"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.datanucleus.schema.autoCreateDatabase"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.datanucleus.schema.validateAll"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword"
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.javax.jdo.PersistenceManagerFactoryClass"
     },
     {
       "name": "isis.viewer.wicket.credit.1.url",
@@ -67,20 +81,38 @@
   ],
   "hints": [
     {
-      "name": "isis.viewer.wicket.themes.provider",
+      "name": "isis.persistor.datanucleus.impl.datanucleus.ConnectionPasswordDecrypter",
       "providers": [{
         "name": "class-reference",
         "parameters": {
-          "target": "org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupport"
+          "target": "org.datanucleus.store.connection.DecryptionProvider"
         }
       }]
     },
     {
-      "name": "isis.persistor.datanucleus.impl.javax.datanucleus.ConnectionPasswordDecrypter",
+      "name": "isis.persistor.datanucleus.impl.javax.jdo.PersistenceManagerFactoryClass",
       "providers": [{
         "name": "class-reference",
         "parameters": {
-          "target": "org.datanucleus.store.connection.DecryptionProvider"
+          "target": "javax.jdo.PersistenceManagerFactory"
+        }
+      }]
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.datanucleus.objectProvider.className",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.datanucleus.state.StateManagerImpl"
+        }
+      }]
+    },
+    {
+      "name": "isis.viewer.wicket.themes.provider",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupport"
         }
       }]
     }
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/DataNucleusApplicationComponents5.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/DataNucleusApplicationComponents5.java
index 1a04dca..1737484 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/DataNucleusApplicationComponents5.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/DataNucleusApplicationComponents5.java
@@ -134,7 +134,8 @@ public class DataNucleusApplicationComponents5 implements ApplicationScopedCompo
 
             // rather than reinvent too much of the wheel, we reuse the same property that DN would check
             // for if it were doing the auto-creation itself (read from isis.properties)
-            final boolean createSchema = isSet(datanucleusProps, PropertyNames.PROPERTY_SCHEMA_AUTOCREATE_ALL);
+            final boolean createSchema =
+                    configuration.getPersistor().getDatanucleus().getImpl().getDatanucleus().getSchema().isAutoCreateAll();
 
             if(createSchema) {
 
@@ -207,10 +208,6 @@ public class DataNucleusApplicationComponents5 implements ApplicationScopedCompo
         schemaAwareStoreManager.createSchemaForClasses(persistableClassNameSet, asProperties(datanucleusProps));
     }
 
-    private boolean isSet(final Map<String, String> props, final String key) {
-        return Boolean.parseBoolean( props.get(key) );
-    }
-
     private void registerMetadataListener(
             final MetaDataManager metaDataManager,
             final Map<String, String> datanucleusProps) {
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionFactory5.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionFactory5.java
index b1d066f..9f6931a 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionFactory5.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/persistence/PersistenceSessionFactory5.java
@@ -26,15 +26,11 @@ import javax.enterprise.inject.Vetoed;
 import javax.jdo.PersistenceManagerFactory;
 import javax.jdo.listener.StoreLifecycleListener;
 
-import org.datanucleus.PropertyNames;
-import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
-
 import org.apache.isis.commons.internal.base._Blackhole;
 import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.commons.internal.components.ApplicationScopedComponent;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.jdo.datanucleus.DataNucleusSettings;
-import org.apache.isis.jdo.datanucleus.JDOStateManagerForIsis;
 import org.apache.isis.jdo.entities.JdoEntityTypeRegistry;
 import org.apache.isis.jdo.lifecycles.JdoStoreLifecycleListenerForIsis;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -72,6 +68,7 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
     @Override
     public void init() {
         this.configuration = IsisContext.getConfiguration();
+
         // need to eagerly build, ... must be completed before catalogNamedQueries().
         // Why? because that method causes entity classes to be loaded which register with DN's EnhancementHelper,
         // which are then cached in DN.  It results in our CreateSchema listener not firing.
@@ -88,17 +85,10 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
 
     private DataNucleusApplicationComponents5 createDataNucleusApplicationComponents() {
 
-        this.configuration = IsisContext.getConfiguration();
-        
         val dnSettings = IsisContext.getServiceRegistry().lookupServiceElseFail(DataNucleusSettings.class);
-        
-        //val dataNucleusConfig = configuration.subsetWithNamesStripped(DATANUCLEUS_CONFIG_PREFIX);
-        val datanucleusProps = dnSettings.getAsMap(); 
-                //dataNucleusConfig.copyToMap();
-        
-        System.out.println("############## " + datanucleusProps);
+        val datanucleusProps = dnSettings.getAsMap();
 
-        addDataNucleusPropertiesIfRequired(datanucleusProps);
+        addDataNucleusPropertiesIfRequired(datanucleusProps, configuration);
 
         val classesToBePersisted = JdoEntityTypeRegistry.current().getEntityTypes();
 
@@ -114,33 +104,12 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
         DataNucleusApplicationComponents5.catalogNamedQueries(classesToBePersisted, specificationLoader);
     }
 
-//    private static HashMap<String, String> toMap(Properties props) {
-//        val map = _Maps.<String, String>newHashMap();
-//        for (val name: props.stringPropertyNames()) {
-//            map.put(name, props.getProperty(name));
-//        }
-//        return map;
-//    }
-    
-    private static void addDataNucleusPropertiesIfRequired(Map<String, String> props) {
-
-        // new feature in DN 3.2.3; enables dependency injection into entities
-        putIfNotPresent(props, PropertyNames.PROPERTY_OBJECT_PROVIDER_CLASS_NAME, JDOStateManagerForIsis.class.getName());
-
-        putIfNotPresent(props, "javax.jdo.PersistenceManagerFactoryClass", JDOPersistenceManagerFactory.class.getName());
-
-        // previously we defaulted this property to "true", but that could cause the target database to be modified
-        putIfNotPresent(props, PropertyNames.PROPERTY_SCHEMA_AUTOCREATE_DATABASE, Boolean.FALSE.toString());
-
-        putIfNotPresent(props, PropertyNames.PROPERTY_SCHEMA_VALIDATE_ALL, Boolean.TRUE.toString());
-        putIfNotPresent(props, PropertyNames.PROPERTY_CACHE_L2_TYPE, "none");
+    private static void addDataNucleusPropertiesIfRequired(Map<String, String> props, IsisConfiguration configuration) {
 
-        putIfNotPresent(props, PropertyNames.PROPERTY_PERSISTENCE_UNIT_LOAD_CLASSES, Boolean.TRUE.toString());
-
-        String connectionFactoryName = props.get(PropertyNames.PROPERTY_CONNECTION_FACTORY_NAME);
+        String connectionFactoryName = configuration.getPersistor().getDatanucleus().getImpl().getDatanucleus().getConnectionFactoryName();
         if(connectionFactoryName != null) {
-            String connectionFactory2Name = props.get(PropertyNames.PROPERTY_CONNECTION_FACTORY2_NAME);
-            String transactionType = props.get("javax.jdo.option.TransactionType");
+            String connectionFactory2Name = configuration.getPersistor().getDatanucleus().getImpl().getDatanucleus().getConnectionFactory2Name();
+            IsisConfiguration.Persistor.Datanucleus.Impl.DataNucleus.TransactionTypeEnum transactionType = configuration.getPersistor().getDatanucleus().getImpl().getDatanucleus().getTransactionType();
             // extended logging
             if(transactionType == null) {
                 log.info("found config properties to use non-JTA JNDI datasource ({})", connectionFactoryName);
@@ -168,10 +137,8 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
 
             if(log.isInfoEnabled()) {
                 log.info("using JDBC connection '{}'", 
-                        props.get("javax.jdo.option.ConnectionURL"));
+                        configuration.getPersistor().getDatanucleus().getImpl().getJavax().getJdo().getOption().getConnectionUrl());
             }
-
-
         }
     }
 


[isis] 01/02: ISIS-2086: wip, converting DN config props to use IsisConfiguration

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

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

commit 1cc832e56f893496b17d0123832ac25dddb4927f
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Oct 2 09:44:06 2019 +0100

    ISIS-2086: wip, converting DN config props to use IsisConfiguration
    
    (cherry picked from commit 0a9b39ba4ddceba0f5a2349e1a90eac8f5e6a3f5)
---
 .../org/apache/isis/config/IsisConfiguration.java  | 10 +++++-
 .../additional-spring-configuration-metadata.json  | 14 ++++++++
 .../datanucleus/DataNucleusPropertiesAware.java    |  4 +++
 ...rtiesAware.java => IsisConfigurationAware.java} |  6 ++--
 .../CreateSchemaObjectFromClassMetadata.java       | 37 ++++++++++++++--------
 5 files changed, 54 insertions(+), 17 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
index 1c1516a..25135ee 100644
--- a/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/config/IsisConfiguration.java
@@ -109,6 +109,15 @@ public class IsisConfiguration {
             private final Impl impl = new Impl();
             @Data
             public static class Impl {
+                private final DataNucleus datanucleus = new DataNucleus();
+                /**
+                 * slightly different capitalization is intentional here; cannot have nested class with same name as parent.
+                 * We rely on additional-spring-configuration-metadata.json to specify the desired property names.
+                 */
+                @Data
+                public static class DataNucleus {
+                    private String ConnectionPasswordDecrypter;
+                }
                 private final Javax javax = new Javax();
                 @Data
                 public static class Javax {
@@ -704,7 +713,6 @@ public class IsisConfiguration {
             @Data
             public static class Themes {
 
-// isis.viewer.wicket.themes.showChooser
                 /**
                  * A comma separated list of enabled theme names, as defined by https://bootswatch.com.
                  */
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 351d7be..acbeb06 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
@@ -21,6 +21,11 @@
       "description": "Password for the user account used by DataNucleus Object store to connect."
     },
     {
+      "name": "isis.persistor.datanucleus.impl.javax.datanucleus.ConnectionPasswordDecrypter",
+      "type": "java.lang.String",
+      "description": "Name of a class that implements org.datanucleus.store.connection.DecryptionProvider and should only be specified if the password is encrypted in the persistence properties"
+    },
+    {
       "name": "isis.viewer.wicket.credit.1.url",
       "type": "java.net.URL"
     },
@@ -69,6 +74,15 @@
           "target": "org.apache.isis.viewer.wicket.ui.components.widgets.themepicker.IsisWicketThemeSupport"
         }
       }]
+    },
+    {
+      "name": "isis.persistor.datanucleus.impl.javax.datanucleus.ConnectionPasswordDecrypter",
+      "providers": [{
+        "name": "class-reference",
+        "parameters": {
+          "target": "org.datanucleus.store.connection.DecryptionProvider"
+        }
+      }]
     }
   ]
 }
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java
index 3d2067f..1ead202 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java
@@ -20,6 +20,10 @@ package org.apache.isis.jdo.datanucleus;
 
 import java.util.Map;
 
+/**
+ * @deprecated - should be able to replace with {@link IsisConfigurationAware} instead.
+ */
+@Deprecated
 public interface DataNucleusPropertiesAware {
 
     public void setDataNucleusProperties(final Map<String, String> properties);
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/IsisConfigurationAware.java
similarity index 84%
copy from core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java
copy to core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/IsisConfigurationAware.java
index 3d2067f..a645b7f 100644
--- a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusPropertiesAware.java
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/IsisConfigurationAware.java
@@ -20,7 +20,9 @@ package org.apache.isis.jdo.datanucleus;
 
 import java.util.Map;
 
-public interface DataNucleusPropertiesAware {
+import org.apache.isis.config.IsisConfiguration;
 
-    public void setDataNucleusProperties(final Map<String, String> properties);
+public interface IsisConfigurationAware {
+
+    void setIsisConfiguration(IsisConfiguration isisConfiguration);
 }
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/datanucleus/CreateSchemaObjectFromClassMetadata.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/datanucleus/CreateSchemaObjectFromClassMetadata.java
index aa44645..e3f0af4 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/datanucleus/CreateSchemaObjectFromClassMetadata.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/datanucleus/CreateSchemaObjectFromClassMetadata.java
@@ -25,6 +25,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Map;
 
+import org.apache.isis.config.IsisConfiguration;
 import org.datanucleus.ClassLoaderResolver;
 import org.datanucleus.enhancer.EnhancementNucleusContextImpl;
 import org.datanucleus.metadata.AbstractClassMetaData;
@@ -39,15 +40,12 @@ import lombok.extern.log4j.Log4j2;
  * Implementation note: the methods in this class are <tt>protected</tt> to allow for easy subclassing.
  */
 @Log4j2
-public class CreateSchemaObjectFromClassMetadata implements MetaDataListener, DataNucleusPropertiesAware {
+public class CreateSchemaObjectFromClassMetadata implements MetaDataListener, DataNucleusPropertiesAware, IsisConfigurationAware {
 
     // -- persistenceManagerFactory, properties
 
     private Map<String, String> properties;
-    protected Map<String, String> getProperties() {
-        return properties;
-    }
-
+    private IsisConfiguration isisConfiguration;
 
     // -- loaded (API)
 
@@ -62,9 +60,9 @@ public class CreateSchemaObjectFromClassMetadata implements MetaDataListener, Da
         Connection connection = null;
         Statement statement = null;
 
-        final String driverName = properties.get("javax.jdo.option.ConnectionDriverName");
-        final String url = properties.get("javax.jdo.option.ConnectionURL");
-        final String userName = properties.get("javax.jdo.option.ConnectionUserName");
+        final String driverName = isisConfiguration.getPersistor().getDatanucleus().getImpl().getJavax().getJdo().getOption().getConnectionDriverName();
+        final String url = isisConfiguration.getPersistor().getDatanucleus().getImpl().getJavax().getJdo().getOption().getConnectionUrl();
+        final String userName = isisConfiguration.getPersistor().getDatanucleus().getImpl().getJavax().getJdo().getOption().getConnectionUserName();
         final String password = getConnectionPassword();
 
         if(_Strings.isNullOrEmpty(driverName) || _Strings.isNullOrEmpty(url)) {
@@ -144,7 +142,7 @@ public class CreateSchemaObjectFromClassMetadata implements MetaDataListener, Da
         // db vendors without requiring lots of complex configuration of DataNucleus
         //
 
-        String url = getProperties().get("javax.jdo.option.ConnectionURL");
+        String url = isisConfiguration.getPersistor().getDatanucleus().getImpl().getJavax().getJdo().getOption().getConnectionUrl();
 
         if(url.contains("postgres")) {
             // in DN 4.0, was forcing lower case:
@@ -184,10 +182,10 @@ public class CreateSchemaObjectFromClassMetadata implements MetaDataListener, Da
      * @return Password
      */
     private String getConnectionPassword() {
-        String password = properties.get("javax.jdo.option.ConnectionPassword");
+        String password = isisConfiguration.getPersistor().getDatanucleus().getImpl().getJavax().getJdo().getOption().getConnectionPassword();
         if (password != null)
         {
-            String decrypterName = properties.get("datanucleus.ConnectionPasswordDecrypter");
+            String decrypterName = isisConfiguration.getPersistor().getDatanucleus().getImpl().getDatanucleus().getConnectionPasswordDecrypter();
             if (decrypterName != null)
             {
                 // Decrypt the password using the provided class
@@ -209,11 +207,22 @@ public class CreateSchemaObjectFromClassMetadata implements MetaDataListener, Da
 
 
     // -- injected dependencies
+
     @Override
-    public void setDataNucleusProperties(final Map<String, String> properties) {
-        this.properties = properties;
+    public void setIsisConfiguration(IsisConfiguration isisConfiguration) {
+        this.isisConfiguration = isisConfiguration;
     }
 
+    /**
+     *
+     * @param properties
+     *
+     * @deprecated  - should be able to obtain these from {@link IsisConfiguration}, instead
+     */
+    @Deprecated
+    @Override
+    public void setDataNucleusProperties(final Map<String, String> properties) {
+        this.properties = properties;
 
-
+    }
 }