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 a6664d185d ISIS-3199: purge ObjectRefresher
a6664d185d is described below

commit a6664d185d918fd8edabaca0ecbdaa4d188e0401
Author: Andi Huber <[email protected]>
AuthorDate: Mon Sep 5 07:43:27 2022 +0200

    ISIS-3199: purge ObjectRefresher
---
 .../isis/commons/internal/assertions/_Assert.java  |  75 ++++++++++-----
 .../metamodel/objectmanager/ObjectManager.java     |  10 --
 .../objectmanager/ObjectManagerDefault.java        |   3 -
 .../objectmanager/refresh/ObjectRefresher.java     |  63 -------------
 .../refresh/ObjectRefresher_builtinHandlers.java   | 101 ---------------------
 .../repository/RepositoryServiceDefault.java       |  43 +++++----
 .../jdosupport/JdoSupportServiceDefault.java       |  19 ++--
 7 files changed, 86 insertions(+), 228 deletions(-)

diff --git 
a/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
 
b/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
index 59be48bbe6..61203f5efa 100644
--- 
a/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
+++ 
b/commons/src/main/java/org/apache/isis/commons/internal/assertions/_Assert.java
@@ -51,17 +51,17 @@ public final class _Assert {
 
     // -- TRUE
 
-    public static void assertTrue(boolean condition) {
+    public static void assertTrue(final boolean condition) {
         assertTrue(condition, (String) null);
     }
 
-    public static void assertTrue(boolean condition, String message) {
+    public static void assertTrue(final boolean condition, final String 
message) {
         if (!condition) {
             fail(message, true, false);
         }
     }
 
-    public static void assertTrue(boolean condition, Supplier<String> 
lazyMessage) {
+    public static void assertTrue(final boolean condition, final 
Supplier<String> lazyMessage) {
         if (!condition) {
             fail(lazyMessage.get(), true, false);
         }
@@ -69,17 +69,17 @@ public final class _Assert {
 
     // -- FALSE
 
-    public static void assertFalse(boolean condition) {
+    public static void assertFalse(final boolean condition) {
         assertFalse(condition, (String) null);
     }
 
-    public static void assertFalse(boolean condition, String message) {
+    public static void assertFalse(final boolean condition, final String 
message) {
         if (condition) {
             fail(message, false, true);
         }
     }
 
-    public static void assertFalse(boolean condition, Supplier<String> 
lazyMessage) {
+    public static void assertFalse(final boolean condition, final 
Supplier<String> lazyMessage) {
         if (condition) {
             fail(lazyMessage.get(), true, false);
         }
@@ -87,17 +87,17 @@ public final class _Assert {
 
     // -- NULL
 
-    public static void assertNull(Object object) {
+    public static void assertNull(final Object object) {
         assertNull(object, (String) null);
     }
 
-    public static void assertNull(Object object, String message) {
+    public static void assertNull(final Object object, final String message) {
         if (object!=null) {
             fail(message, "null", "not null");
         }
     }
 
-    public static void assertNull(Object object, Supplier<String> lazyMessage) 
{
+    public static void assertNull(final Object object, final Supplier<String> 
lazyMessage) {
         if (object!=null) {
             fail(lazyMessage.get(), "null", "not null");
         }
@@ -105,29 +105,60 @@ public final class _Assert {
 
     // -- NOT NULL
 
-    public static void assertNotNull(Object object) {
+    public static void assertNotNull(final Object object) {
         assertNotNull(object, (String) null);
     }
 
-    public static void assertNotNull(Object object, String message) {
+    public static void assertNotNull(final Object object, final String 
message) {
         if (object==null) {
             fail(message, "not null", "null");
         }
     }
 
-    public static void assertNotNull(Object object, Supplier<String> 
lazyMessage) {
+    public static void assertNotNull(final Object object, final 
Supplier<String> lazyMessage) {
         if (object==null) {
             fail(lazyMessage.get(), "not null", "null");
         }
     }
 
+    // -- SAMENESS
+
+    /**
+     * <em>Assert</em> that {@code left} == {@code right}.
+     * @return {@code left} if assertion holds
+     */
+    public static <T> T assertSameObject(final T left, final Object right) {
+        assertTrue(left == right);
+        return left;
+    }
+
+    /**
+     * <em>Assert</em> that {@code left} == {@code right}.
+     * @return {@code left} if assertion holds
+     */
+    public static <T> T assertSameObject(final T left, final Object right, 
final String msg) {
+        assertTrue(left == right, msg);
+        return left;
+    }
+
+    /**
+     * <em>Assert</em> that {@code left} == {@code right}.
+     * @return {@code left} if assertion holds
+     */
+    public static <T> T assertSameObject(final T left, final Object right, 
final Supplier<String> lazyMessage) {
+        assertTrue(left == right, lazyMessage);
+        return left;
+    }
+
+    // -- EQUALITY
+
     /**
      * <em>Assert</em> that {@code expected} and {@code actual} are equal.
      * <p>If both are {@code null}, they are considered equal.
      *
      * @see Object#equals(Object)
      */
-    public static void assertEquals(Object left, Object right) {
+    public static void assertEquals(final Object left, final Object right) {
         assertEquals(left, right, (String) null);
     }
 
@@ -138,13 +169,13 @@ public final class _Assert {
      *
      * @see Object#equals(Object)
      */
-    public static void assertEquals(Object left, Object right, String message) 
{
+    public static void assertEquals(final Object left, final Object right, 
final String message) {
         if (!Objects.equals(left, right)) {
             fail(message, left, right);
         }
     }
 
-    public static void assertEquals(Object left, Object right, 
Supplier<String> lazyMessage) {
+    public static void assertEquals(final Object left, final Object right, 
final Supplier<String> lazyMessage) {
         if (!Objects.equals(left, right)) {
             fail(lazyMessage.get(), left, right);
         }
@@ -152,25 +183,25 @@ public final class _Assert {
 
     // -- RANGE CHECKS
 
-    public static void assertRangeContains(_Ints.Range range, int value, 
String message) {
+    public static void assertRangeContains(final _Ints.Range range, final int 
value, final String message) {
         if(!range.contains(value)) {
             fail(message, range.toString(), value);
         }
     }
 
-    public static void assertRangeContains(_Ints.Range range, int value, 
Supplier<String> lazyMessage) {
+    public static void assertRangeContains(final _Ints.Range range, final int 
value, final Supplier<String> lazyMessage) {
         if(!range.contains(value)) {
             fail(lazyMessage.get(), range.toString(), value);
         }
     }
 
-    public static void assertRangeContains(_Longs.Range range, long value, 
String message) {
+    public static void assertRangeContains(final _Longs.Range range, final 
long value, final String message) {
         if(!range.contains(value)) {
             fail(message, range.toString(), value);
         }
     }
 
-    public static void assertRangeContains(_Longs.Range range, long value, 
Supplier<String> lazyMessage) {
+    public static void assertRangeContains(final _Longs.Range range, final 
long value, final Supplier<String> lazyMessage) {
         if(!range.contains(value)) {
             fail(lazyMessage.get(), range.toString(), value);
         }
@@ -178,7 +209,7 @@ public final class _Assert {
 
     // -- TYPE INSTANCE OF
 
-    public static void assertTypeIsInstanceOf(Class<?> type, Class<?> 
requiredType) {
+    public static void assertTypeIsInstanceOf(final Class<?> type, final 
Class<?> requiredType) {
         if(!requiredType.isAssignableFrom(type)) {
             throw _Exceptions.assertionError(String.format(
                     "unexpected type: <%s> is not an instance of <%s> ", 
""+type, ""+requiredType));
@@ -213,11 +244,11 @@ public final class _Assert {
 
     // -- HELPER
 
-    static String buildPrefix(String message) {
+    static String buildPrefix(final String message) {
         return _Strings.isNotEmpty(message) ? message + " ==> " : "";
     }
 
-    private static void fail(String message, Object expected, Object actual) {
+    private static void fail(final String message, final Object expected, 
final Object actual) {
         val error = _Exceptions.assertionError(
                 buildPrefix(message)
                 + String.format("expected: <%s> but was: <%s>", ""+expected, 
""+actual));
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
index 8bde10ba68..ead27b7dc0 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManager.java
@@ -33,7 +33,6 @@ import org.apache.isis.core.metamodel.object.ManagedObject;
 import org.apache.isis.core.metamodel.object.ProtoObject;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemorizer;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
-import org.apache.isis.core.metamodel.objectmanager.refresh.ObjectRefresher;
 import org.apache.isis.core.metamodel.objectmanager.serialize.ObjectSerializer;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -55,7 +54,6 @@ public interface ObjectManager extends HasMetaModelContext {
     ObjectLoader getObjectLoader();
     ObjectBulkLoader getObjectBulkLoader();
     ObjectBookmarker getObjectBookmarker();
-    ObjectRefresher getObjectRefresher();
     ObjectSerializer getObjectSerializer();
     ObjectMemorizer getObjectMemorizer();
 
@@ -120,14 +118,6 @@ public interface ObjectManager extends HasMetaModelContext 
{
                     _Exceptions.unrecoverable("failed to bookmark %s", 
managedObject.getSpecification()));
     }
 
-    /**
-     * Reloads the state of the (entity) instance from the data store.
-     * @param managedObject
-     */
-    public default void refreshObject(final ManagedObject managedObject) {
-        getObjectRefresher().refreshObject(managedObject);
-    }
-
     public default Optional<ObjectSpecification> specForPojo(final @Nullable 
Object pojo) {
         if(pojo==null) {
             return Optional.empty();
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
index f5852c758f..cf159221bd 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/ObjectManagerDefault.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.metamodel.IsisModuleCoreMetamodel;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemorizer;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
-import org.apache.isis.core.metamodel.objectmanager.refresh.ObjectRefresher;
 import org.apache.isis.core.metamodel.objectmanager.serialize.ObjectSerializer;
 
 import lombok.Getter;
@@ -57,7 +56,6 @@ public class ObjectManagerDefault implements ObjectManager {
     @Getter(onMethod_ = {@Override}) private ObjectBulkLoader objectBulkLoader;
     @Getter(onMethod_ = {@Override}) private ObjectCreator objectCreator;
     @Getter(onMethod_ = {@Override}) private ObjectBookmarker objectBookmarker;
-    @Getter(onMethod_ = {@Override}) private ObjectRefresher objectRefresher;
     @Getter(onMethod_ = {@Override}) private ObjectSerializer objectSerializer;
     @Getter(onMethod_ = {@Override}) private ObjectMemorizer objectMemorizer;
 
@@ -67,7 +65,6 @@ public class ObjectManagerDefault implements ObjectManager {
         objectLoader = ObjectLoader.createDefault(metaModelContext);
         objectBulkLoader = ObjectBulkLoader.createDefault(metaModelContext);
         objectBookmarker = ObjectBookmarker.createDefault();
-        objectRefresher = ObjectRefresher.createDefault();
         objectSerializer = ObjectSerializer.createDefault(metaModelContext);
         objectMemorizer = ObjectMemorizer.createDefault(metaModelContext);
     }
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/refresh/ObjectRefresher.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/refresh/ObjectRefresher.java
deleted file mode 100644
index 710f867625..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/refresh/ObjectRefresher.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *  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.core.metamodel.objectmanager.refresh;
-
-import org.apache.isis.commons.handler.ChainOfResponsibility;
-import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-
-import lombok.val;
-
-/**
- *
- * @since 2.0
- *
- */
-public interface ObjectRefresher {
-
-    /**
-     * Reloads the state of the instance from the data store.
-     * @param objectLoadRequest
-     */
-    void refreshObject(ManagedObject managedObject);
-
-    // -- HANDLER
-
-    static interface Handler
-    extends
-        ChainOfResponsibility.Handler<ManagedObject, Void> {
-    }
-
-    // -- FACTORY
-
-    public static ObjectRefresher createDefault() {
-
-        val chainOfHandlers = _Lists.of(
-                new ObjectRefresher_builtinHandlers.GuardAgainstNull(),
-                new ObjectRefresher_builtinHandlers.RefreshEntity(),
-                new ObjectRefresher_builtinHandlers.RefreshOther());
-
-        val chainOfRespo = ChainOfResponsibility.of(chainOfHandlers);
-
-        return chainOfRespo::handle;
-
-    }
-
-
-}
diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/refresh/ObjectRefresher_builtinHandlers.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/refresh/ObjectRefresher_builtinHandlers.java
deleted file mode 100644
index 3cecee0d22..0000000000
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/refresh/ObjectRefresher_builtinHandlers.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *  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.core.metamodel.objectmanager.refresh;
-
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.object.ManagedObject;
-
-import lombok.Data;
-import lombok.val;
-
-/**
- *
- * @since 2.0
- *
- */
-final class ObjectRefresher_builtinHandlers {
-
-    // -- NULL GUARD
-
-    @Data
-    public static class GuardAgainstNull implements ObjectRefresher.Handler {
-
-        private MetaModelContext metaModelContext;
-
-        @Override
-        public boolean isHandling(final ManagedObject managedObject) {
-
-            if(managedObject==null || managedObject.getPojo()==null) {
-                return true;
-            }
-
-            return false;
-        }
-
-        @Override
-        public Void handle(final ManagedObject managedObject) {
-            return null; // noop
-        }
-
-    }
-
-    @Data
-    public static class RefreshEntity implements ObjectRefresher.Handler {
-
-        @Override
-        public boolean isHandling(final ManagedObject request) {
-            val spec = request.getSpecification();
-            return spec.isEntity();
-        }
-
-        @Override
-        public Void handle(final ManagedObject request) {
-
-            val spec = request.getSpecification();
-            val entityFacet = spec.entityFacetElseFail();
-
-            entityFacet.refresh(request.getPojo());
-
-            // we assume that we don't need to inject services again, because 
this should
-            // already have been done, when the entity object got fetched with 
the ObjectLoader
-
-            return null;
-        }
-
-    }
-
-    @Data
-    public static class RefreshOther implements ObjectRefresher.Handler {
-
-        @Override
-        public boolean isHandling(final ManagedObject request) {
-            // if no one else feels responsible, we do
-            return true;
-        }
-
-        @Override
-        public Void handle(final ManagedObject request) {
-            return null; // noop
-        }
-
-    }
-
-
-
-}
diff --git 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
index 87c307623d..9ad3df3915 100644
--- 
a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
+++ 
b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/repository/RepositoryServiceDefault.java
@@ -43,17 +43,20 @@ import 
org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.core.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.context.HasMetaModelContext;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.object.ManagedObjects;
 import org.apache.isis.core.metamodel.object.MmEntityUtil;
 import org.apache.isis.core.metamodel.object.MmUnwrapUtil;
-import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.objectmanager.query.ObjectBulkLoader;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 
+import lombok.Getter;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -64,13 +67,16 @@ import lombok.val;
 @Qualifier("Default")
 @RequiredArgsConstructor
 //@Log4j2
-public class RepositoryServiceDefault implements RepositoryService {
+public class RepositoryServiceDefault
+implements RepositoryService, HasMetaModelContext {
 
     final FactoryService factoryService;
     final WrapperFactory wrapperFactory;
     final TransactionService transactionService;
     final IsisConfiguration isisConfiguration;
-    final ObjectManager objectManager;
+
+    @Getter(onMethod_ = {@Override})
+    final MetaModelContext metaModelContext;
 
     private boolean autoFlush;
 
@@ -82,7 +88,7 @@ public class RepositoryServiceDefault implements 
RepositoryService {
 
     @Override
     public EntityState getEntityState(final @Nullable Object object) {
-        val adapter = objectManager.adapt(unwrapped(object));
+        val adapter = getObjectManager().adapt(unwrapped(object));
         return MmEntityUtil.getEntityState(adapter);
     }
 
@@ -94,7 +100,7 @@ public class RepositoryServiceDefault implements 
RepositoryService {
     @Override
     public <T> T persist(final T domainObject) {
 
-        val adapter = objectManager.adapt(unwrapped(domainObject));
+        val adapter = getObjectManager().adapt(unwrapped(domainObject));
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)) {
             throw new PersistFailedException("Object not known to framework 
(unable to create/obtain an adapter)");
         }
@@ -121,7 +127,7 @@ public class RepositoryServiceDefault implements 
RepositoryService {
         if (domainObject == null) {
             return; // noop
         }
-        val adapter = objectManager.adapt(unwrapped(domainObject));
+        val adapter = getObjectManager().adapt(unwrapped(domainObject));
         if(MmEntityUtil.hasOid(adapter)) {
             MmEntityUtil.destroyInCurrentTransaction(adapter);
         }
@@ -169,8 +175,7 @@ public class RepositoryServiceDefault implements 
RepositoryService {
     }
 
     <T> List<T> submitQuery(final Query<T> query) {
-        val resultTypeSpec = objectManager.getMetaModelContext()
-                .getSpecificationLoader()
+        val resultTypeSpec = getSpecificationLoader()
                 .specForType(query.getResultType())
                 .orElse(null);
 
@@ -179,7 +184,7 @@ public class RepositoryServiceDefault implements 
RepositoryService {
         }
 
         val queryRequest = ObjectBulkLoader.Request.of(resultTypeSpec, query);
-        val allMatching = objectManager.queryObjects(queryRequest);
+        val allMatching = getObjectManager().queryObjects(queryRequest);
         final List<T> resultList = 
_Casts.uncheckedCast(MmUnwrapUtil.multipleAsList(allMatching));
         return resultList;
     }
@@ -217,23 +222,27 @@ public class RepositoryServiceDefault implements 
RepositoryService {
     }
 
     @Override
-    public <T> T refresh(final T pojo) {
-        val managedObject = objectManager.adapt(pojo);
-        objectManager.getObjectRefresher().refreshObject(managedObject);
-        return _Casts.uncheckedCast(managedObject.getPojo());
+    public <T> T refresh(final T entity) {
+        if(entity==null) { return null; }
+
+        getSpecificationLoader()
+        .specForType(entity.getClass())
+        .flatMap(ObjectSpecification::entityFacet)
+        .ifPresent(entityFacet->entityFacet.refresh(entity));
+
+        return entity;
     }
 
     @Override
     public <T> T detach(final T entity) {
         if(entity==null) { return null; }
 
-        val mmc = objectManager.getMetaModelContext();
-
-        return mmc.getSpecificationLoader()
+        return getSpecificationLoader()
         .specForType(entity.getClass())
         .flatMap(ObjectSpecification::entityFacet)
         .map(entityFacet->entityFacet.detach(entity))
-        .map(mmc.getServiceInjector()::injectServicesInto) // just in case
+        .map(detachedEntity->_Assert.assertSameObject(detachedEntity, entity, 
()->
+                "expected same (otherwise would need injection points 
resolved)"))
         .orElse(entity);
     }
 
diff --git 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/jdosupport/JdoSupportServiceDefault.java
 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/jdosupport/JdoSupportServiceDefault.java
index a3202ca1d7..b850cb5c9a 100644
--- 
a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/jdosupport/JdoSupportServiceDefault.java
+++ 
b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/jdosupport/JdoSupportServiceDefault.java
@@ -39,21 +39,20 @@ import javax.jdo.query.BooleanExpression;
 
 import org.datanucleus.store.rdbms.RDBMSPropertyNames;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.exceptions.UnrecoverableException;
 import 
org.apache.isis.applib.exceptions.unrecoverable.ObjectPersistenceException;
+import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.persistence.jdo.applib.services.JdoSupportService;
 import 
org.apache.isis.persistence.jdo.spring.integration.TransactionAwarePersistenceManagerFactoryProxy;
 
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
 
-import lombok.val;
-
 @Service
 @Named("isis.persistence.jdo.JdoSupportServiceDefault")
 @Priority(PriorityPrecedence.MIDPOINT)
@@ -61,7 +60,7 @@ import lombok.val;
 public class JdoSupportServiceDefault implements JdoSupportService {
 
     @Inject private TransactionAwarePersistenceManagerFactoryProxy pmf;
-    @Inject private MetaModelContext mmc;
+    @Inject @Lazy private RepositoryService repositoryService;
 
     @Override
     public PersistenceManagerFactory getPersistenceManagerFactory() {
@@ -70,10 +69,7 @@ public class JdoSupportServiceDefault implements 
JdoSupportService {
 
     @Override
     public <T> T refresh(final T domainObject) {
-        val objectManager = mmc.getObjectManager();
-        val adapter = mmc.getObjectManager().adapt(domainObject);
-        objectManager.refreshObject(adapter);
-        return domainObject;
+        return repositoryService.refresh(domainObject);
     }
 
     @Override
@@ -83,7 +79,6 @@ public class JdoSupportServiceDefault implements 
JdoSupportService {
 
     // //////////////////////////////////////
 
-
     @Override
     public List<Map<String, Object>> executeSql(final String sql) {
         final JDOConnection dataStoreConnection = 
getPersistenceManager().getDataStoreConnection();
@@ -191,7 +186,7 @@ public class JdoSupportServiceDefault implements 
JdoSupportService {
 
 
     @Override
-    public <T> JDOQLTypedQuery<T> newTypesafeQuery(Class<T> cls) {
+    public <T> JDOQLTypedQuery<T> newTypesafeQuery(final Class<T> cls) {
         return getPersistenceManager().newJDOQLTypedQuery(cls);
     }
 
@@ -215,12 +210,12 @@ public class JdoSupportServiceDefault implements 
JdoSupportService {
     }
 
     @Override
-    public void disableMultivaluedFetch(JDOQLTypedQuery<?> query) {
+    public void disableMultivaluedFetch(final JDOQLTypedQuery<?> query) {
         
query.extension(RDBMSPropertyNames.PROPERTY_RDBMS_QUERY_MULTIVALUED_FETCH, 
"none");
     }
 
     @Override
-    public void disableMultivaluedFetch(Query<?> query) {
+    public void disableMultivaluedFetch(final Query<?> query) {
         
query.addExtension(RDBMSPropertyNames.PROPERTY_RDBMS_QUERY_MULTIVALUED_FETCH, 
"none");
     }
 

Reply via email to