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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new d8c508843f CAUSEWAY-3411: fixes PersistenceStack auto-detection
d8c508843f is described below
commit d8c508843f579eae98e256ad2f9084bab45594bf
Author: Andi Huber <[email protected]>
AuthorDate: Tue Apr 4 19:27:54 2023 +0200
CAUSEWAY-3411: fixes PersistenceStack auto-detection
---
core/config/src/main/java/module-info.java | 7 ++--
.../core/config/beans/CausewayBeanMetaData.java | 43 ++++++++++++++--------
.../beans/CausewayBeanTypeClassifierDefault.java | 8 ++--
.../config/beans/CausewayBeanTypeRegistry.java | 18 ++++-----
.../core/config/beans/PersistenceStack.java | 16 ++++----
.../jdo/metamodel/beans/JdoBeanTypeClassifier.java | 4 +-
6 files changed, 52 insertions(+), 44 deletions(-)
diff --git a/core/config/src/main/java/module-info.java
b/core/config/src/main/java/module-info.java
index b1e40e92d1..0d733bb2dd 100644
--- a/core/config/src/main/java/module-info.java
+++ b/core/config/src/main/java/module-info.java
@@ -34,6 +34,10 @@ module org.apache.causeway.core.config {
exports org.apache.causeway.core.config.validators;
exports org.apache.causeway.core.config.viewer.web;
+ requires static lombok;
+
+ requires transitive org.apache.causeway.applib;
+ requires transitive org.apache.causeway.commons;
requires jakarta.activation;
requires java.annotation;
requires java.persistence;
@@ -41,9 +45,6 @@ module org.apache.causeway.core.config {
requires java.validation;
requires java.ws.rs;
requires java.inject;
- requires lombok;
- requires org.apache.causeway.applib;
- requires org.apache.causeway.commons;
requires org.apache.logging.log4j;
requires org.eclipse.persistence.core;
requires org.hibernate.validator;
diff --git
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
index ef507d741c..c9abb20f5e 100644
---
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
+++
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanMetaData.java
@@ -18,6 +18,8 @@
*/
package org.apache.causeway.core.config.beans;
+import java.util.Optional;
+
import org.apache.causeway.applib.id.LogicalType;
import org.apache.causeway.applib.services.metamodel.BeanSort;
@@ -33,9 +35,6 @@ public class CausewayBeanMetaData {
SPRING,
/** other Spring managed component, or not managed at all */
INDIFFERENT,
- /** @deprecated in support of deprecated {@code
@DomainService(logicalTypeName=...)}*/
- @Deprecated
- SPRING_NAMED_BY_CAUSEWAY,
;
public boolean isNone() { return this == NONE; }
public boolean isCauseway() { return this == CAUSEWAY; }
@@ -53,12 +52,16 @@ public class CausewayBeanMetaData {
* Whether we interfere with Spring's naming strategy.
*/
public boolean isBeanNameOverride() {
- return this == CAUSEWAY
- || this == SPRING_NAMED_BY_CAUSEWAY;
+ return this == CAUSEWAY;
}
}
private final @NonNull BeanSort beanSort;
+ /**
+ * Optionally the {@link PersistenceStack},
+ * based on whether {@link #getBeanSort()} is {@link BeanSort#ENTITY}.
+ */
+ private final @NonNull Optional<PersistenceStack> persistenceStack;
private final @NonNull LogicalType logicalType;
private @NonNull ManagedBy managedBy;
@@ -75,7 +78,7 @@ public class CausewayBeanMetaData {
public static CausewayBeanMetaData notManaged(
final @NonNull BeanSort beanSort,
final @NonNull LogicalType logicalType) {
- return of(beanSort, logicalType, ManagedBy.NONE);
+ return of(beanSort, Optional.empty(), logicalType, ManagedBy.NONE);
}
public static CausewayBeanMetaData notManaged(
@@ -87,16 +90,16 @@ public class CausewayBeanMetaData {
public static CausewayBeanMetaData injectable(
final @NonNull BeanSort beanSort,
final @NonNull LogicalType logicalType) {
- return of(beanSort, logicalType, ManagedBy.SPRING);
+ return of(beanSort, Optional.empty(), logicalType, ManagedBy.SPRING);
}
- /** @deprecated in support of deprecated {@code
@DomainService(logicalTypeName=...)}*/
- @Deprecated
- public static CausewayBeanMetaData injectableNamedByCauseway(
- final @NonNull BeanSort beanSort,
- final @NonNull LogicalType logicalType) {
- return of(beanSort, logicalType, ManagedBy.SPRING_NAMED_BY_CAUSEWAY);
- }
+// /** @deprecated in support of deprecated {@code
@DomainService(logicalTypeName=...)}*/
+// @Deprecated
+// public static CausewayBeanMetaData injectableNamedByCauseway(
+// final @NonNull BeanSort beanSort,
+// final @NonNull LogicalType logicalType) {
+// return of(beanSort, logicalType, ManagedBy.SPRING_NAMED_BY_CAUSEWAY);
+// }
/**
* Let <i>Spring</i> decide.
@@ -104,14 +107,20 @@ public class CausewayBeanMetaData {
public static CausewayBeanMetaData indifferent(
final @NonNull BeanSort beanSort,
final @NonNull Class<?> type) {
- return of(beanSort, LogicalType.infer(type),
+ return of(beanSort, Optional.empty(), LogicalType.infer(type),
ManagedBy.INDIFFERENT);
}
+ public static CausewayBeanMetaData entity(
+ final @NonNull PersistenceStack persistenceStack,
+ final @NonNull LogicalType logicalType) {
+ return of(BeanSort.ENTITY, Optional.of(persistenceStack), logicalType,
ManagedBy.CAUSEWAY);
+ }
+
public static CausewayBeanMetaData causewayManaged(
final @NonNull BeanSort beanSort,
final @NonNull LogicalType logicalType) {
- return of(beanSort, logicalType, ManagedBy.CAUSEWAY);
+ return of(beanSort, Optional.empty(), logicalType, ManagedBy.CAUSEWAY);
}
public static CausewayBeanMetaData causewayManaged(
@@ -120,4 +129,6 @@ public class CausewayBeanMetaData {
return causewayManaged(beanSort, LogicalType.infer(type));
}
+
+
}
diff --git
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
index c6789ad558..da5a5cc183 100644
---
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
+++
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeClassifierDefault.java
@@ -51,7 +51,6 @@ implements CausewayBeanTypeClassifier {
private final Can<CausewayBeanTypeClassifier> classifierPlugins =
CausewayBeanTypeClassifier.get();
// handle arbitrary types ...
- @SuppressWarnings("deprecation")
@Override
public CausewayBeanMetaData classify(
final @NonNull Class<?> type) {
@@ -126,20 +125,19 @@ implements CausewayBeanTypeClassifier {
val entityAnnotation = _Annotations.synthesize(type,
Entity.class).orElse(null);
if(entityAnnotation!=null) {
- return CausewayBeanMetaData.causewayManaged(BeanSort.ENTITY,
LogicalType.infer(type));
+ return CausewayBeanMetaData.entity(PersistenceStack.JPA,
LogicalType.infer(type));
}
val aDomainObject = _Annotations.synthesize(type,
DomainObject.class).orElse(null);
if(aDomainObject!=null) {
switch (aDomainObject.nature()) {
case BEAN:
- val logicalType = LogicalType.infer(type);
return CausewayBeanMetaData
-
.injectableNamedByCauseway(BeanSort.MANAGED_BEAN_CONTRIBUTING, logicalType);
+ .indifferent(BeanSort.MANAGED_BEAN_CONTRIBUTING, type);
case MIXIN:
return CausewayBeanMetaData.causewayManaged(BeanSort.MIXIN,
type);
case ENTITY:
- return CausewayBeanMetaData.causewayManaged(BeanSort.ENTITY,
type);
+ return
CausewayBeanMetaData.entity(PersistenceStack.UNSPECIFIED,
LogicalType.infer(type));
case VIEW_MODEL:
case NOT_SPECIFIED:
//because object is not associated with a persistence context
unless discovered above
diff --git
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
index 2394dcc0e6..5de5d01821 100644
---
a/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
+++
b/core/config/src/main/java/org/apache/causeway/core/config/beans/CausewayBeanTypeRegistry.java
@@ -55,17 +55,17 @@ public interface CausewayBeanTypeRegistry {
}
/**
- * Returns either 'JDO' or 'JPA' based on what {@link
CausewayBeanTypeClassifier} we find
- * registered with <i>Spring</i>.
- * Alternative implementations could be considered, however this works for
now.
+ * Returns 'JDO' or 'JPA' based on metadata found during {@link
CausewayBeanTypeClassifier type-classification}.
+ * If no (concrete) entity type is found, returns 'UNSPECIFIED'.
*/
default PersistenceStack determineCurrentPersistenceStack() {
- return CausewayBeanTypeClassifier.get().stream()
- .map(CausewayBeanTypeClassifier::getClass)
- .map(Class::getSimpleName)
- .anyMatch(classifierName->classifierName.startsWith("Jdo"))
- ? PersistenceStack.JDO
- : PersistenceStack.JPA;
+ return getEntityTypes().values().stream()
+ .map(meta->meta.getPersistenceStack())
+ .filter(Optional::isPresent)
+ .map(Optional::get)
+ .filter(persistenceStack->!persistenceStack.isUnspecified())
+ .findFirst()
+ .orElse(PersistenceStack.UNSPECIFIED);
}
}
\ No newline at end of file
diff --git
a/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
b/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
index 547bb80306..4c562ce353 100644
---
a/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
+++
b/core/config/src/main/java/org/apache/causeway/core/config/beans/PersistenceStack.java
@@ -23,16 +23,14 @@ import org.apache.causeway.commons.internal.base._Strings;
public enum PersistenceStack {
JPA,
JDO,
- OTHER,
+ /**
+ * eg. abstract entity type
+ */
+ UNSPECIFIED,
;
-
- public boolean isJpa() {
- return this == JPA;
- }
-
- public boolean isJdo() {
- return this == JDO;
- }
+ public boolean isJpa() { return this == JPA; }
+ public boolean isJdo() { return this == JDO; }
+ public boolean isUnspecified() { return this == UNSPECIFIED; }
public String titleCase() {
return _Strings.capitalize(_Strings.lower(name()));
diff --git
a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
index 97e31d96ec..eb0dc0aead 100644
---
a/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
+++
b/persistence/jdo/metamodel/src/main/java/org/apache/causeway/persistence/jdo/metamodel/beans/JdoBeanTypeClassifier.java
@@ -23,11 +23,11 @@ import java.util.Locale;
import javax.jdo.annotations.EmbeddedOnly;
import org.apache.causeway.applib.id.LogicalType;
-import org.apache.causeway.applib.services.metamodel.BeanSort;
import org.apache.causeway.commons.internal.base._Strings;
import org.apache.causeway.commons.internal.reflection._Annotations;
import org.apache.causeway.core.config.beans.CausewayBeanMetaData;
import org.apache.causeway.core.config.beans.CausewayBeanTypeClassifier;
+import org.apache.causeway.core.config.beans.PersistenceStack;
import lombok.val;
@@ -73,7 +73,7 @@ public class JdoBeanTypeClassifier implements
CausewayBeanTypeClassifier {
}
}
- return CausewayBeanMetaData.causewayManaged(BeanSort.ENTITY,
logicalType);
+ return CausewayBeanMetaData.entity(PersistenceStack.JDO,
logicalType);
}
return null; // we don't see fit to classify given type