This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 2b3dda3830 ISIS-2651: don't notify JDO listeners with JPA entities
2b3dda3830 is described below
commit 2b3dda3830883142ebd7c2e297fc016f37b56961
Author: Andi Huber <[email protected]>
AuthorDate: Fri May 20 15:20:48 2022 +0200
ISIS-2651: don't notify JDO listeners with JPA entities
---
.../core/config/beans/IsisBeanTypeRegistry.java | 19 ++++++++++++++
.../config/beans/IsisBeanTypeRegistryDefault.java | 4 ++-
.../isis/core/config/beans}/PersistenceStack.java | 2 +-
.../facets/object/entity/EntityFacet.java | 1 +
.../object/entity/_EntityFacetForTesting.java | 1 +
.../isis/core/metamodel/spec/ManagedObjects.java | 2 +-
.../specloader/SpecificationLoaderDefault.java | 2 +-
.../isis/core/metamodel/specloader/_Util.java | 15 -----------
.../IsisModulePersistenceJdoDatanucleus.java | 29 ++++++++++++++++------
.../datanucleus/config/DatanucleusSettings.java | 5 ++--
.../metamodel/facets/entity/JdoEntityFacet.java | 2 +-
.../testing/AbstractFacetFactoryTest.java | 2 +-
.../integration/entity/JpaEntityFacetFactory.java | 2 +-
.../isis/testdomain/HasPersistenceStandard.java | 2 +-
.../testdomain/jdo/HasPersistenceStandardJdo.java | 2 +-
.../testdomain/jpa/HasPersistenceStandardJpa.java | 2 +-
16 files changed, 57 insertions(+), 35 deletions(-)
diff --git
a/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistry.java
b/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistry.java
index e64e1a286c..bb8f9f0557 100644
---
a/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistry.java
+++
b/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistry.java
@@ -55,5 +55,24 @@ public interface IsisBeanTypeRegistry {
.map(IsisBeanMetaData::getBeanName);
}
+ default Set<Class<?>> getEntityTypes(final PersistenceStack
persistenceStack) {
+ return determineCurrentPersistenceStack().equals(persistenceStack)
+ ? getEntityTypes()
+ : Set.of();
+ }
+
+ /**
+ * Returns either 'JDO' or 'JPA' based on what {@link
IsisBeanTypeClassifier} we find
+ * registered with <i>Spring</i>.
+ * Alternative implementations could be considered, however this works for
now.
+ */
+ default PersistenceStack determineCurrentPersistenceStack() {
+ return IsisBeanTypeClassifier.get().stream()
+ .map(IsisBeanTypeClassifier::getClass)
+ .map(Class::getSimpleName)
+ .anyMatch(classifierName->classifierName.startsWith("Jdo"))
+ ? PersistenceStack.JDO
+ : PersistenceStack.JPA;
+ }
}
\ No newline at end of file
diff --git
a/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistryDefault.java
b/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistryDefault.java
index 9dfce0a533..c11d79ef55 100644
---
a/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistryDefault.java
+++
b/core/config/src/main/java/org/apache/isis/core/config/beans/IsisBeanTypeRegistryDefault.java
@@ -65,7 +65,7 @@ public class IsisBeanTypeRegistryDefault implements
IsisBeanTypeRegistry {
// -- LOOKUPS
@Override
- public Optional<IsisBeanMetaData> lookupIntrospectableType(Class<?> type) {
+ public Optional<IsisBeanMetaData> lookupIntrospectableType(final Class<?>
type) {
return Optional.ofNullable(introspectableTypesByClass.get(type));
}
@@ -117,4 +117,6 @@ public class IsisBeanTypeRegistryDefault implements
IsisBeanTypeRegistry {
}
+
+
}
\ No newline at end of file
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStack.java
b/core/config/src/main/java/org/apache/isis/core/config/beans/PersistenceStack.java
similarity index 94%
rename from
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStack.java
rename to
core/config/src/main/java/org/apache/isis/core/config/beans/PersistenceStack.java
index 22926c60e4..e0f56f6521 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/PersistenceStack.java
+++
b/core/config/src/main/java/org/apache/isis/core/config/beans/PersistenceStack.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.isis.core.metamodel.facets.object.entity;
+package org.apache.isis.core.config.beans;
public enum PersistenceStack {
JPA,
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
index 195c075d97..d4537d1c43 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/EntityFacet.java
@@ -24,6 +24,7 @@ import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.repository.EntityState;
import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.spec.ManagedObject;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
index 157392c68b..42f30a64cc 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/entity/_EntityFacetForTesting.java
@@ -26,6 +26,7 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.repository.EntityState;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.spec.ManagedObject;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
index 6fe3fc2205..c2e5025c41 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObjects.java
@@ -52,12 +52,12 @@ import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.debug._Debug;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.core.metamodel.commons.CanonicalInvoker;
import org.apache.isis.core.metamodel.commons.ClassExtensions;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
import org.apache.isis.core.metamodel.facets.object.title.TitleRenderRequest;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
import org.apache.isis.core.metamodel.interactions.InteractionHead;
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
index b083fc687c..0b4dc8a6a8 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderDefault.java
@@ -295,7 +295,7 @@ public class SpecificationLoaderDefault implements
SpecificationLoader {
log.info(" - introspecting {} entities ({})",
isisBeanTypeRegistry.getEntityTypes().size(),
- _Util.persistenceLayerName());
+
isisBeanTypeRegistry.determineCurrentPersistenceStack().name());
log.info(" - introspecting {} view models",
isisBeanTypeRegistry.getViewModelTypes().size());
diff --git
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/_Util.java
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/_Util.java
index 93caf9dc6e..6d6cee23d8 100644
---
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/_Util.java
+++
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/_Util.java
@@ -24,7 +24,6 @@ import java.util.stream.Collectors;
import org.apache.logging.log4j.Logger;
-import org.apache.isis.core.config.beans.IsisBeanTypeClassifier;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import lombok.val;
@@ -79,18 +78,4 @@ final class _Util {
cached.size(), cachedAfterNotBefore.size()));
}
- /**
- * Returns either 'JDO' or 'JPA' based on what {@link
IsisBeanTypeClassifier} we find
- * registered with <i>Spring</i>.
- * Alternative implementations could be considered, however this works for
now.
- */
- String persistenceLayerName() {
- return IsisBeanTypeClassifier.get().stream()
- .map(IsisBeanTypeClassifier::getClass)
- .map(Class::getSimpleName)
- .anyMatch(classifierName->classifierName.startsWith("Jdo"))
- ? "JDO"
- : "JPA";
- }
-
}
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
index 69aca51c0e..38c46758d1 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java
@@ -41,6 +41,7 @@ import org.apache.isis.commons.internal.assertions._Assert;
import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.core.config.beans.IsisBeanTypeRegistry;
+import org.apache.isis.core.config.beans.PersistenceStack;
import
org.apache.isis.core.config.beans.aoppatch.TransactionInterceptorFactory;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.transaction.changetracking.EntityChangeTracker;
@@ -145,14 +146,7 @@ public class IsisModulePersistenceJdoDatanucleus {
val pmf = localPmfBean.getObject(); // created once per application
lifecycle
- val entityTypes = beanTypeRegistry.getEntityTypes();
- if(! _NullSafe.isEmpty(entityTypes)) {
- val dnProps = dnSettings.getAsProperties();
- _NullSafe.stream(jdoEntityDiscoveryListeners)
- .forEach(listener->{
- listener.onEntitiesDiscovered(pmf, entityTypes,
dnProps);
- });
- }
+ notifyJdoEntityDiscoveryListeners(pmf, beanTypeRegistry,
jdoEntityDiscoveryListeners, dnSettings);
val tapmfProxy = new
TransactionAwarePersistenceManagerFactoryProxy(metaModelContext);
tapmfProxy.setTargetPersistenceManagerFactory(pmf);
@@ -214,6 +208,25 @@ public class IsisModulePersistenceJdoDatanucleus {
// -- HELPER
+ private static void notifyJdoEntityDiscoveryListeners(
+ final PersistenceManagerFactory pmf,
+ final IsisBeanTypeRegistry beanTypeRegistry,
+ final List<JdoEntityDiscoveryListener> jdoEntityDiscoveryListeners,
+ final DatanucleusSettings dnSettings) {
+
+ if(_NullSafe.isEmpty(jdoEntityDiscoveryListeners)) {
+ return;
+ }
+ val jdoEntityTypes =
beanTypeRegistry.getEntityTypes(PersistenceStack.JDO);
+ if(_NullSafe.isEmpty(jdoEntityTypes)) {
+ return;
+ }
+ val dnProps = dnSettings.getAsProperties();
+ _NullSafe.stream(jdoEntityDiscoveryListeners)
+ .forEach(listener->
+ listener.onEntitiesDiscovered(pmf, jdoEntityTypes,
dnProps));
+ }
+
/**
* integrates with settings from isis.persistence.schema.*
*/
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DatanucleusSettings.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DatanucleusSettings.java
index 20a325b2f2..9f1d06b168 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DatanucleusSettings.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/config/DatanucleusSettings.java
@@ -20,7 +20,6 @@ package org.apache.isis.persistence.jdo.datanucleus.config;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Locale;
import java.util.Map;
import javax.annotation.Priority;
@@ -99,6 +98,8 @@ public class DatanucleusSettings {
return properties;
}
+ // -- HELPER
+
private void addFallbacks(final Map<String, Object> props) {
val connectionFactoryName = (String)
props.get(PropertyNames.PROPERTY_CONNECTION_FACTORY_NAME);
@@ -133,7 +134,7 @@ public class DatanucleusSettings {
}
- private static String sanitizeKey(String key) {
+ private static String sanitizeKey(final String key) {
return key.replaceAll("-", "").toLowerCase();
}
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
index 54299872d6..7460c6127f 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/metamodel/facets/entity/JdoEntityFacet.java
@@ -47,10 +47,10 @@ import org.apache.isis.commons.internal.collections._Maps;
import org.apache.isis.commons.internal.debug._Debug;
import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
diff --git
a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
index b769472315..7f0ea1121f 100644
---
a/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
+++
b/persistence/jdo/metamodel/src/test/java/org/apache/isis/persistence/jdo/metamodel/testing/AbstractFacetFactoryTest.java
@@ -31,6 +31,7 @@ import
org.apache.isis.applib.services.iactn.InteractionProvider;
import org.apache.isis.applib.services.iactnlayer.InteractionContext;
import org.apache.isis.applib.services.repository.EntityState;
import org.apache.isis.commons.collections.ImmutableEnumSet;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
import org.apache.isis.core.metamodel._testing.MethodRemover_forTesting;
@@ -40,7 +41,6 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.core.security.authentication.InteractionContextFactory;
diff --git
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
index 9851d41230..35b5dace81 100644
---
a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
+++
b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/entity/JpaEntityFacetFactory.java
@@ -46,6 +46,7 @@ import org.apache.isis.commons.internal.base._Strings;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.memento._Mementos;
import org.apache.isis.commons.internal.memento._Mementos.SerializingAdapter;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
@@ -53,7 +54,6 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.core.metamodel.facets.object.entity.EntityFacet;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
diff --git
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
index add3355275..781d88a596 100644
---
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
+++
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/HasPersistenceStandard.java
@@ -19,7 +19,7 @@
package org.apache.isis.testdomain;
import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
+import org.apache.isis.core.config.beans.PersistenceStack;
public interface HasPersistenceStandard {
diff --git
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
index b8a8e3985a..fbd3d15f4c 100644
---
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
+++
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/HasPersistenceStandardJdo.java
@@ -18,7 +18,7 @@
*/
package org.apache.isis.testdomain.jdo;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.testdomain.HasPersistenceStandard;
public interface HasPersistenceStandardJdo
diff --git
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
index 5e246851ed..48cb2a62a7 100644
---
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
+++
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jpa/HasPersistenceStandardJpa.java
@@ -18,7 +18,7 @@
*/
package org.apache.isis.testdomain.jpa;
-import org.apache.isis.core.metamodel.facets.object.entity.PersistenceStack;
+import org.apache.isis.core.config.beans.PersistenceStack;
import org.apache.isis.testdomain.HasPersistenceStandard;
public interface HasPersistenceStandardJpa