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 2019/10/02 07:45:35 UTC
[isis] branch v2 updated: ISIS-2158: smoketests to have their
individual in-mem connections
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new 2a0353a ISIS-2158: smoketests to have their individual in-mem connections
2a0353a is described below
commit 2a0353aee509dd93870da93ab7b8d66467459d73
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 2 09:45:25 2019 +0200
ISIS-2158: smoketests to have their individual in-mem connections
- adds new 'IsisPresets.H2InMemory_withUniqueSchema'
- also converts DN plugin to use new config bean 'DataNucleusSettings'
However, there might be a random number collision when generating unique
schema names, though highly unlikely. Unfortunately using a UUID as
schema name does not seem to work, its too long (has too many
characters).
---
.../presets/H2InMemory_withUniqueSchema.properties | 3 +-
.../isis/jdo/datanucleus/DataNucleusSettings.java | 41 ++++++++++++++++++++++
.../org/apache/isis/jdo/IsisBootDataNucleus.java | 26 ++++++++++----
.../DataNucleusApplicationComponents5.java | 6 ++--
.../persistence/PersistenceSessionFactory5.java | 39 +++++++++++++-------
.../org/apache/isis/testdomain/config/FooTest.java | 23 +++++++++++-
6 files changed, 111 insertions(+), 27 deletions(-)
diff --git a/core/config/src/main/resources/presets/H2InMemory_withUniqueSchema.properties b/core/config/src/main/resources/presets/H2InMemory_withUniqueSchema.properties
index 82df5d8..1ecfb3f 100644
--- a/core/config/src/main/resources/presets/H2InMemory_withUniqueSchema.properties
+++ b/core/config/src/main/resources/presets/H2InMemory_withUniqueSchema.properties
@@ -15,8 +15,7 @@
# specific language governing permissions and limitations
# under the License.
-isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL = jdbc:h2:mem:t${random.long}
-#jdbc:h2:mem:test_${random.uuid}
+isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionURL = jdbc:h2:mem:T${random.long[1,9999999]}
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionDriverName = org.h2.Driver
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionUserName = sa
isis.persistor.datanucleus.impl.javax.jdo.option.ConnectionPassword =
\ No newline at end of file
diff --git a/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusSettings.java b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusSettings.java
new file mode 100644
index 0000000..08b3849
--- /dev/null
+++ b/core/plugins/jdo/common/src/main/java/org/apache/isis/jdo/datanucleus/DataNucleusSettings.java
@@ -0,0 +1,41 @@
+/*
+ * 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.jdo.datanucleus;
+
+import java.util.Map;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.springframework.stereotype.Service;
+
+/**
+ * @since 2.0
+ */
+@Service
+public class DataNucleusSettings {
+
+ @Inject @Named("dn-settings")
+ private Map<String, String> dnSettings;
+
+ public Map<String, String> getAsMap() {
+ return dnSettings;
+ }
+
+}
diff --git a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/IsisBootDataNucleus.java b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/IsisBootDataNucleus.java
index 4face09..787a7a9 100644
--- a/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/IsisBootDataNucleus.java
+++ b/core/plugins/jdo/datanucleus-5/src/main/java/org/apache/isis/jdo/IsisBootDataNucleus.java
@@ -18,12 +18,18 @@
*/
package org.apache.isis.jdo;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.inject.Named;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
-import org.apache.isis.config.beans.IsisBeanScanInterceptorForSpring;
+import org.apache.isis.jdo.datanucleus.DataNucleusSettings;
import org.apache.isis.jdo.jdosupport.IsisJdoSupportDN5;
import org.apache.isis.jdo.jdosupport.mixins.Persistable_datanucleusIdLong;
import org.apache.isis.jdo.metrics.MetricsServiceDefault;
@@ -31,7 +37,7 @@ import org.apache.isis.jdo.persistence.IsisPlatformTransactionManagerForJdo;
@Configuration
@Import({
- //TimestampService.class, //FIXME initializes too early
+ DataNucleusSettings.class, // config bean
MetricsServiceDefault.class,
IsisJdoSupportDN5.class,
IsisPlatformTransactionManagerForJdo.class,
@@ -40,10 +46,16 @@ import org.apache.isis.jdo.persistence.IsisPlatformTransactionManagerForJdo;
basePackageClasses= {
// bring in the mixins
Persistable_datanucleusIdLong.class,
- },
- includeFilters= {
- @ComponentScan.Filter(type = FilterType.CUSTOM, classes= {IsisBeanScanInterceptorForSpring.class})
})
public class IsisBootDataNucleus {
-
+
+ // reserved for datanucleus' own config props
+ public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl";
+
+ @ConfigurationProperties(prefix = DATANUCLEUS_CONFIG_PREFIX)
+ @Bean @Named("dn-settings")
+ public Map<String, String> getAsMap() {
+ return new HashMap<>();
+ }
+
}
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 c90b2af..1a04dca 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
@@ -27,7 +27,6 @@ import javax.enterprise.inject.Vetoed;
import javax.jdo.JDOHelper;
import javax.jdo.PersistenceManagerFactory;
-import org.apache.isis.config.IsisConfiguration;
import org.datanucleus.PersistenceNucleusContext;
import org.datanucleus.PropertyNames;
import org.datanucleus.api.jdo.JDOPersistenceManagerFactory;
@@ -39,8 +38,7 @@ import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.components.ApplicationScopedComponent;
import org.apache.isis.commons.internal.factory.InstanceUtil;
-import org.apache.isis.config.IsisConfigurationLegacy;
-import org.apache.isis.jdo.datanucleus.CreateSchemaObjectFromClassMetadata;
+import org.apache.isis.config.IsisConfiguration;
import org.apache.isis.jdo.datanucleus.DataNucleusLifeCycleHelper;
import org.apache.isis.jdo.datanucleus.DataNucleusPropertiesAware;
import org.apache.isis.jdo.metamodel.facets.object.query.JdoNamedQuery;
@@ -93,8 +91,8 @@ public class DataNucleusApplicationComponents5 implements ApplicationScopedCompo
final IsisConfiguration configuration,
final Map<String, String> datanucleusProps,
final Set<String> persistableClassNameSet) {
+
this.configuration = configuration;
-
this.datanucleusProps = datanucleusProps;
this.persistableClassNameSet = persistableClassNameSet;
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 400fccc..b1d066f 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,21 +26,21 @@ import javax.enterprise.inject.Vetoed;
import javax.jdo.PersistenceManagerFactory;
import javax.jdo.listener.StoreLifecycleListener;
-import org.apache.isis.metamodel.MetaModelContext;
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.IsisConfigurationLegacy;
-import org.apache.isis.config.internal._Config;
+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;
import org.apache.isis.runtime.persistence.FixturesInstalledState;
import org.apache.isis.runtime.persistence.FixturesInstalledStateHolder;
+import org.apache.isis.runtime.system.context.IsisContext;
import org.apache.isis.runtime.system.persistence.PersistenceSession;
import org.apache.isis.runtime.system.persistence.PersistenceSessionFactory;
import org.apache.isis.security.authentication.AuthenticationSession;
@@ -59,13 +59,11 @@ import lombok.extern.log4j.Log4j2;
public class PersistenceSessionFactory5
implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstalledStateHolder {
- public static final String DATANUCLEUS_CONFIG_PREFIX = "isis.persistor.datanucleus.impl"; // reserved for datanucleus' own config props
-
private final _Lazy<DataNucleusApplicationComponents5> applicationComponents =
_Lazy.threadSafe(this::createDataNucleusApplicationComponents);
private StoreLifecycleListener storeLifecycleListener;
- private IsisConfigurationLegacy configuration;
+ private IsisConfiguration configuration;
@Getter(onMethod=@__({@Override}))
@Setter(onMethod=@__({@Override}))
@@ -73,7 +71,7 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
@Override
public void init() {
- this.configuration = _Config.getConfiguration();
+ 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.
@@ -90,16 +88,24 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
private DataNucleusApplicationComponents5 createDataNucleusApplicationComponents() {
- val dataNucleusConfig = configuration.subsetWithNamesStripped(DATANUCLEUS_CONFIG_PREFIX);
- val datanucleusProps = dataNucleusConfig.copyToMap();
+ 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);
addDataNucleusPropertiesIfRequired(datanucleusProps);
val classesToBePersisted = JdoEntityTypeRegistry.current().getEntityTypes();
return new DataNucleusApplicationComponents5(
- MetaModelContext.current().getConfiguration(),
- datanucleusProps, classesToBePersisted);
+ configuration,
+ datanucleusProps,
+ classesToBePersisted);
}
@Override
@@ -108,8 +114,15 @@ implements PersistenceSessionFactory, ApplicationScopedComponent, FixturesInstal
DataNucleusApplicationComponents5.catalogNamedQueries(classesToBePersisted, specificationLoader);
}
- private static void addDataNucleusPropertiesIfRequired(
- final Map<String, String> props) {
+// 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());
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/config/FooTest.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/config/FooTest.java
index bbac121..0494cb2 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/config/FooTest.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/config/FooTest.java
@@ -18,15 +18,22 @@
*/
package org.apache.isis.testdomain.config;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.inject.Inject;
+import javax.inject.Named;
import org.junit.jupiter.api.Test;
+import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.apache.isis.testdomain.Smoketest;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -49,9 +56,19 @@ class FooTest {
@Configuration
static class Setup {
+ @ConfigurationProperties(prefix = "foo")
+ @Bean @Named("foo-as-map")
+ public Map<String, String> getAsMap() {
+ return new HashMap<>();
+ }
+
}
- @Inject private FooProperties foo;
+ @Inject
+ private FooProperties foo;
+
+ @Inject @Named("foo-as-map")
+ private Map<String, String> fooAsMap;
@Test
void foo() {
@@ -64,6 +81,10 @@ class FooTest {
System.out.println(foo);
+ assertNotNull(fooAsMap);
+ assertFalse(fooAsMap.isEmpty());
+ System.out.println(fooAsMap);
+
}
}