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 3ccdc0143d ISIS-3265: just notes and comments
3ccdc0143d is described below
commit 3ccdc0143d0b9effd491c2557f8aaa74013dacb0
Author: Andi Huber <[email protected]>
AuthorDate: Thu Oct 27 10:37:23 2022 +0200
ISIS-3265: just notes and comments
---
.../object/_ManagedObjectEntityBookmarked.java | 2 ++
.../metamodel/objectmanager/ObjectManager.java | 24 ++++++++++++++++------
.../entities/DnObjectProviderForCauseway.java | 2 +-
.../applib/integration/CausewayEntityListener.java | 8 +-------
4 files changed, 22 insertions(+), 14 deletions(-)
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
index 4c9bcb898b..6f4993b60c 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/object/_ManagedObjectEntityBookmarked.java
@@ -89,6 +89,8 @@ implements _Refetchable {
return pojo; // is attached
}
+ //FIXME[ISIS-3265] this getPojo() call might originate from a
CausewayEntityListener.onPostLoad event,
+ // in which case we get into a loop that results in a stack overflow
val refetchedIfSuccess = entityFacet.fetchByBookmark(bookmark);
if(refetchedIfSuccess.isEmpty()) {
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
index c5c967770e..d0686c5450 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/objectmanager/ObjectManager.java
@@ -66,9 +66,9 @@ public interface ObjectManager extends HasMetaModelContext {
_Exceptions.unrecoverable("failed to create memento for
%s", object.getSpecification()));
}
- //FIXME why not use loadObject(bookmark) instead
+ //TODO why not use loadObject(bookmark) instead
ManagedObject demementify(final ObjectMemento memento);
- //FIXME why not use loadObject(bookmark) instead
+ //TODO why not use loadObject(bookmark) instead
default ManagedObject demementify(final ObjectSpecification spec, final
ObjectMemento memento) {
return demementify(memento);
}
@@ -77,7 +77,8 @@ public interface ObjectManager extends HasMetaModelContext {
/**
* Creates and initializes an instance conforming to given request
parameters.
- * @param objectCreateRequest
+ * <p>
+ * Resolves injection-points for the result. (Handles service injection.)
*/
public default ManagedObject createObject(final ObjectSpecification
objectCreateRequest) {
return getObjectCreator().createObject(objectCreateRequest);
@@ -85,7 +86,8 @@ public interface ObjectManager extends HasMetaModelContext {
/**
* Loads an instance identified with given request parameters.
- * @param objectLoadRequest
+ * <p>
+ * Resolves injection-points for the result. (Handles service injection.)
*/
public default ManagedObject loadObject(final ProtoObject
objectLoadRequest) {
return getObjectLoader().loadObject(objectLoadRequest);
@@ -94,7 +96,7 @@ public interface ObjectManager extends HasMetaModelContext {
/**
* Recovers an object (graph) from given {@code bookmark}.
* <p>
- * Resolves injection-points for the result.
+ * Resolves injection-points for the result. (Handles service injection.)
* <p>
* Supports alias lookup.
*/
@@ -107,6 +109,9 @@ public interface ObjectManager extends HasMetaModelContext {
.map(this::loadObject);
}
+ /**
+ * @see #loadObject(Bookmark)
+ */
default ManagedObject loadObjectElseFail(final @NonNull Bookmark bookmark)
{
val adapter = loadObject(bookmark)
.orElseThrow(()->
@@ -118,6 +123,9 @@ public interface ObjectManager extends HasMetaModelContext {
return adapter;
}
+ /**
+ * Resolves injection-points for the result. (Handles service injection.)
+ */
public default Can<ManagedObject> queryObjects(final
ObjectBulkLoader.Request objectQuery) {
return getObjectBulkLoader().loadObject(objectQuery);
}
@@ -151,8 +159,10 @@ public interface ObjectManager extends HasMetaModelContext
{
// -- ADAPTING POJOS
/**
- * Not suitable for adapting a non-scalar
+ * Not suitable for adapting a non-scalar.
* If {@code pojo} is an entity, automatically memoizes its bookmark.
+ * <p>
+ * Resolves injection-points for the result. (Handles service injection.)
*/
public default ManagedObject adapt(final @Nullable Object pojo) {
return adapt(pojo, ()->specForType(Object.class).orElseThrow());
@@ -161,6 +171,8 @@ public interface ObjectManager extends HasMetaModelContext {
/**
* Suitable for adapting a non-scalar.
* If {@code pojo} is an entity, automatically memoizes its bookmark.
+ * <p>
+ * Resolves injection-points for the result. (Handles service injection.)
*/
public default ManagedObject adapt(
final @Nullable Object pojo,
diff --git
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/entities/DnObjectProviderForCauseway.java
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/entities/DnObjectProviderForCauseway.java
index 09f183231d..aaa96fe4b5 100644
---
a/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/entities/DnObjectProviderForCauseway.java
+++
b/persistence/jdo/datanucleus/src/main/java/org/apache/causeway/persistence/jdo/datanucleus/entities/DnObjectProviderForCauseway.java
@@ -190,7 +190,7 @@ extends ReferentialStateManagerImpl {
private final Map<Object, PreDirtyPropagationLock>
preDirtyPropagationLocks =
_Maps.newHashMap();
- //TODO there is probably only ever one id per instance: verify an simplify
+ //TODO there is probably only ever one id per instance: verify and simplify
private final PreDirtyPropagationLock createPreDirtyPropagationLock(final
Object id) {
return ()->preDirtyPropagationLocks.remove(id);
}
diff --git
a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
index fec8f0610f..fa1a8708f6 100644
---
a/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
+++
b/persistence/jpa/applib/src/main/java/org/apache/causeway/persistence/jpa/applib/integration/CausewayEntityListener.java
@@ -62,23 +62,19 @@ import lombok.extern.log4j.Log4j2;
@Log4j2
public class CausewayEntityListener {
- // not managed by Spring (directly)
- //@Inject private ServiceInjector serviceInjector;
+ // injection points resolved via constructor ...
@Inject private ObjectLifecyclePublisher objectLifecyclePublisher;
@Inject private Provider<JpaSupportService> jpaSupportServiceProvider;
@Inject private ObjectManager objectManager;
- //@Inject private EventBusService eventBusService;
@PrePersist void onPrePersist(final Object entityPojo) {
log.debug("onPrePersist: {}", entityPojo);
- //serviceInjector.injectServicesInto(entityPojo);
val entity = objectManager.adapt(entityPojo);
objectLifecyclePublisher.onPrePersist(Either.left(entity));
}
@PostLoad void onPostLoad(final Object entityPojo) {
log.debug("onPostLoad: {}", entityPojo);
- //serviceInjector.injectServicesInto(entityPojo);
val entity = objectManager.adapt(entityPojo);
objectLifecyclePublisher.onPostLoad(entity);
}
@@ -87,7 +83,6 @@ public class CausewayEntityListener {
@PreUpdate void onPreUpdate(final Object entityPojo) {
log.debug("onPreUpdate: {}", entityPojo);
- //serviceInjector.injectServicesInto(entityPojo);
val entity = objectManager.adapt(entityPojo);
val entityManagerResult =
jpaSupportServiceProvider.get().getEntityManager(entityPojo.getClass());
@@ -125,7 +120,6 @@ public class CausewayEntityListener {
@PreRemove void onPreRemove(final Object entityPojo) {
log.debug("onAnyRemove: {}", entityPojo);
- //serviceInjector.injectServicesInto(entityPojo);
val entity = objectManager.adapt(entityPojo);
objectLifecyclePublisher.onPreRemove(entity);
}