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 2020/12/22 19:12:18 UTC

[isis] branch master updated (3c77b09 -> e224d88)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 3c77b09  ISIS-2033: simplify DN integration
     new f8526fb  ISIS-2033: remove ParentedOid
     new a8d927b  ISIS-2033: remove ObjectAdpater
     new 6409058  ISIS-2033: remove PojoAdapter
     new e224d88  ISIS-2033: remove ObjectAdapterContext (OMG YES!)

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../isis/core/metamodel/adapter/oid/Oid.java       |  14 --
 .../core/metamodel/adapter/oid/Oid_Marshaller.java |  16 +-
 .../core/metamodel/adapter/oid/Oid_Parented.java   | 133 ------------
 .../core/metamodel/adapter/oid/ParentedOid.java    |  50 -----
 .../oid/CollectionOidTest_valueSemantics.java      |  48 -----
 .../oid/OidMarshallerTest_roundtripping.java       |  10 -
 .../adapter/oid/OidMarshallerTest_unmarshal.java   |  29 ---
 .../integration/jdosupport/IsisJdoSupportDN5.java  |   4 +-
 .../integration/objectadapter/ObjectAdapter.java   |  46 ----
 .../objectadapter/ObjectAdapterContext.java        | 148 -------------
 .../ObjectAdapterContext_NewIdentifier.java        |  64 ------
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  60 ------
 .../objectadapter/ObjectAdapterProvider.java       |  35 ---
 .../jdo/integration/objectadapter/PojoAdapter.java | 148 -------------
 .../jdo/integration/objectadapter/_Factories.java  |  58 -----
 .../jdo/integration/oid/JdoObjectIdSerializer.java |   8 -
 .../persistence/IsisLifecycleListener.java         |  31 ++-
 .../persistence/IsisPersistenceSessionJdo.java     |   3 +-
 .../persistence/PersistenceSession.java            |  14 +-
 .../persistence/PersistenceSession5.java           | 181 +++++++---------
 .../jdo/integration/persistence/_Utils.java        | 113 +++++++++-
 ...sistenceQueryFindUsingApplibQueryProcessor.java |   5 +-
 .../queries/PersistenceQueryProcessorAbstract.java |   3 +-
 .../persistence/query/PersistenceQueryFactory.java |  12 +-
 ...ersistenceQueryFindUsingApplibQueryDefault.java |   8 +-
 .../testing/ObjectMemberAbstractTest.java          | 236 ---------------------
 .../integration/testing/PojoAdapterBuilder.java    | 153 -------------
 .../jdo/integration/testing/PojoAdapterTest.java   |  81 -------
 .../jdo/integration/testing/TestPojo.java          |  52 -----
 29 files changed, 218 insertions(+), 1545 deletions(-)
 delete mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
 delete mode 100644 core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
 delete mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapter.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_NewIdentifier.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
 delete mode 100644 persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
 delete mode 100644 persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/ObjectMemberAbstractTest.java
 delete mode 100644 persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java
 delete mode 100644 persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterTest.java
 delete mode 100644 persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/TestPojo.java


[isis] 02/04: ISIS-2033: remove ObjectAdpater

Posted by ah...@apache.org.
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

commit a8d927bf9dad6eed22545db2b531c787aa0ee91f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 19:18:12 2020 +0100

    ISIS-2033: remove ObjectAdpater
---
 .../integration/jdosupport/IsisJdoSupportDN5.java  |   4 +-
 .../integration/objectadapter/ObjectAdapter.java   |  46 ----
 .../objectadapter/ObjectAdapterContext.java        |  15 +-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   8 +-
 .../objectadapter/ObjectAdapterProvider.java       |   4 +-
 .../jdo/integration/objectadapter/PojoAdapter.java |   7 +-
 .../jdo/integration/objectadapter/_Factories.java  |  55 -----
 .../persistence/IsisLifecycleListener.java         |   4 +-
 .../persistence/PersistenceSession5.java           |   9 +-
 .../jdo/integration/persistence/_Utils.java        |  21 --
 ...sistenceQueryFindUsingApplibQueryProcessor.java |   5 +-
 .../queries/PersistenceQueryProcessorAbstract.java |   3 +-
 .../persistence/query/PersistenceQueryFactory.java |  12 +-
 ...ersistenceQueryFindUsingApplibQueryDefault.java |   8 +-
 .../testing/ObjectMemberAbstractTest.java          | 236 ---------------------
 .../integration/testing/PojoAdapterBuilder.java    | 154 --------------
 .../jdo/integration/testing/PojoAdapterTest.java   |  81 -------
 .../jdo/integration/testing/TestPojo.java          |  52 -----
 18 files changed, 41 insertions(+), 683 deletions(-)

diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/jdosupport/IsisJdoSupportDN5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/jdosupport/IsisJdoSupportDN5.java
index 09a3185..74bb454 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/jdosupport/IsisJdoSupportDN5.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/jdosupport/IsisJdoSupportDN5.java
@@ -47,8 +47,8 @@ import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.metamodel.adapter.oid.ObjectPersistenceException;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.persistence.jdo.applib.services.IsisJdoSupport_v3_2;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
 import org.apache.isis.persistence.jdo.integration.persistence.IsisPersistenceSessionJdo;
 
 import static org.apache.isis.commons.internal.base._NullSafe.stream;
@@ -69,7 +69,7 @@ public class IsisJdoSupportDN5 implements IsisJdoSupport_v3_2 {
     
     @Override
     public <T> T refresh(final T domainObject) {
-        final ObjectAdapter adapter = getPersistenceSession().adapterFor(domainObject);
+        final ManagedObject adapter = getPersistenceSession().adapterFor(domainObject);
         getPersistenceSession().refreshRoot(adapter);
         return domainObject;
     }
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapter.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapter.java
deleted file mode 100644
index 6d87a60..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapter.java
+++ /dev/null
@@ -1,46 +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.persistence.jdo.integration.objectadapter;
-
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-/**
- * Adapters to domain objects, where the application is written in terms of
- * domain objects and those objects are represented within the NOF through these
- * adapter, and not directly.
- */
-public interface ObjectAdapter extends ManagedObject {
-
-    /**
-     * The object's unique {@link Oid}.
-     *
-     * <p>
-     * This id allows the object to added to, stored by,
-     * and retrieved from the object store.  Objects can be looked up by their
-     * {@link Oid}.
-     *
-     * <p>
-     * Note that standalone value objects ("foobar", or 5, or a date),
-     * are not mapped and have a <tt>null</tt> oid.
-     */
-    Oid getOid(); //XXX[2033] referenced by 'metamodel' only to create a bookmark (CommandUtil)
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
index 9eb0ad8..ccec944 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
@@ -22,6 +22,7 @@ import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.context.RuntimeContextBase;
 import org.apache.isis.persistence.jdo.integration.persistence.IsisPersistenceSessionJdo;
@@ -97,22 +98,22 @@ final public class ObjectAdapterContext {
 
     // -- ADAPTER MANAGER LEGACY
 
-    public ObjectAdapter fetchPersistent(final Object pojo) {
+    public ManagedObject fetchPersistent(final Object pojo) {
         if (persistenceSession.getJdoPersistenceManager().getObjectId(pojo) == null) {
             return null;
         }
         final RootOid oid = createPersistentOrViewModelOid(pojo);
-        final ObjectAdapter adapter = recreatePojo(oid, pojo);
+        final ManagedObject adapter = recreatePojo(oid, pojo);
         return adapter;
     }
 
-    public ObjectAdapter recreatePojo(RootOid oid, Object recreatedPojo) {
-        final ObjectAdapter createdAdapter = createRootOrAggregatedAdapter(oid, recreatedPojo);
+    public ManagedObject recreatePojo(RootOid oid, Object recreatedPojo) {
+        final ManagedObject createdAdapter = createRootOrAggregatedAdapter(oid, recreatedPojo);
         return injectServices(createdAdapter);
     }
 
     // package private
-    ObjectAdapter injectServices(final @NonNull ObjectAdapter adapter) {
+    ManagedObject injectServices(final @NonNull ManagedObject adapter) {
         val spec = adapter.getSpecification();
         if(spec==null 
                 || spec.isValue()) {
@@ -123,10 +124,10 @@ final public class ObjectAdapterContext {
         return adapter;
     }
 
-    private ObjectAdapter createRootOrAggregatedAdapter(final RootOid oid, final Object pojo) {
+    private ManagedObject createRootOrAggregatedAdapter(final RootOid oid, final Object pojo) {
         if(oid instanceof RootOid) {
             final RootOid rootOid = (RootOid) oid;
-            return _Factories.createRootAdapter(pojo, rootOid, getSpecificationLoader());
+            return PojoAdapter.of(pojo, rootOid, getSpecificationLoader());
         } 
         throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
     }
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
index 34eef69..9913f14 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -19,6 +19,7 @@
 package org.apache.isis.persistence.jdo.integration.objectadapter;
 
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.context.RuntimeContext;
 
 import lombok.val;
@@ -44,7 +45,7 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
     }
 
     @Override
-    public ObjectAdapter adapterFor(Object pojo) {
+    public ManagedObject adapterFor(Object pojo) {
 
         if(pojo == null) {
             return null;
@@ -52,8 +53,9 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
 
         val adapter = objectManager.adapt(pojo);
         val rootOid = objectManager.identifyObject(adapter);
-        val newAdapter = _Factories.createRootAdapter(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
-        return objectAdapterContext.injectServices(newAdapter);
+        val newAdapter = PojoAdapter.of(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
+        objectAdapterContext.injectServices(newAdapter);
+        return newAdapter;
     }
 
 
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java
index 6889940..71d9297 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java
@@ -20,6 +20,8 @@ package org.apache.isis.persistence.jdo.integration.objectadapter;
 
 import javax.annotation.Nullable;
 
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+
 /**
  * 
  * @since 2.0
@@ -30,6 +32,6 @@ public interface ObjectAdapterProvider {
     /**
      * @return standalone (value) or root adapter
      */
-    @Nullable ObjectAdapter adapterFor(@Nullable Object pojo);
+    @Nullable ManagedObject adapterFor(@Nullable Object pojo);
 
 }
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
index 3f7467d..be0b466 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
@@ -27,6 +27,7 @@ import org.apache.isis.commons.internal.base._Lazy;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.commons.ToString;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
@@ -35,12 +36,12 @@ import static org.apache.isis.commons.internal.base._With.requires;
 import lombok.Getter;
 import lombok.val;
 
-public final class PojoAdapter implements ObjectAdapter {
+final class PojoAdapter implements ManagedObject {
 
     private final SpecificationLoader specificationLoader;
 
     @Getter(onMethod = @__(@Override)) private final Object pojo;
-    @Getter(onMethod = @__(@Override)) private final Oid oid;
+    @Getter private final Oid oid;
 
     // -- FACTORIES
 
@@ -60,7 +61,7 @@ public final class PojoAdapter implements ObjectAdapter {
 
         this.specificationLoader = specificationLoader;
 
-        if (pojo instanceof ObjectAdapter) {
+        if (pojo instanceof ManagedObject) {
             throw new IsisException("ObjectAdapter can't be used to wrap an ObjectAdapter: " + pojo);
         }
         if (pojo instanceof Oid) {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
deleted file mode 100644
index 4087147..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
+++ /dev/null
@@ -1,55 +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.persistence.jdo.integration.objectadapter;
-
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-
-import lombok.NonNull;
-
-final class _Factories {
-
-    public static ObjectAdapter createRootAdapter(
-            final Object pojo, 
-            final @NonNull RootOid rootOid, 
-            final @NonNull SpecificationLoader specificationLoader) {
-        
-        return PojoAdapter.of(pojo, rootOid, specificationLoader);
-    }
-
-//    public static ObjectAdapter createCollectionAdapter(
-//            final Object pojo,
-//            final @NonNull ParentedOid collectionOid, 
-//            final @NonNull SpecificationLoader specificationLoader) {
-//        return PojoAdapter.of(pojo, collectionOid, specificationLoader);
-//    }
-
-//    private static ObjectAdapter createCollectionAdapter(
-//            final @NonNull Object pojo,
-//            final RootOid parentOid,
-//            final OneToManyAssociation otma, 
-//            final @NonNull SpecificationLoader specificationLoader) {
-//
-//        // persistence of collection follows the parent
-//        final ParentedOid collectionOid = Oid.Factory.parented(parentOid, otma);
-//        return createCollectionAdapter(pojo, collectionOid, specificationLoader);
-//    }
-
-    
-}
\ No newline at end of file
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java
index 9b38992..d4d44a4 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java
@@ -33,7 +33,7 @@ import javax.jdo.listener.StoreLifecycleListener;
 import org.datanucleus.enhancement.Persistable;
 
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 public class IsisLifecycleListener
 implements AttachLifecycleListener, ClearLifecycleListener, CreateLifecycleListener, DeleteLifecycleListener,
@@ -44,7 +44,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
      */
     interface PersistenceSessionLifecycleManagement {
 
-        ObjectAdapter initializeEntity(Persistable pojo);
+        ManagedObject initializeEntity(Persistable pojo);
 
         void invokeIsisPersistingCallback(Persistable pojo);
         void enlistCreatedAndInvokeIsisPersistedCallback(Persistable pojo);
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
index a20cfef..94874bf 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
@@ -50,7 +50,6 @@ import org.apache.isis.persistence.jdo.applib.exceptions.UnsupportedFindExceptio
 import org.apache.isis.persistence.jdo.applib.fixturestate.FixturesInstalledStateHolder;
 import org.apache.isis.persistence.jdo.integration.lifecycles.JdoStoreLifecycleListenerForIsis;
 import org.apache.isis.persistence.jdo.integration.lifecycles.LoadLifecycleListenerForIsis;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
 import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapterContext;
 import org.apache.isis.persistence.jdo.integration.oid.JdoObjectIdSerializer;
 import org.apache.isis.persistence.jdo.integration.persistence.command.CreateObjectCommand;
@@ -570,14 +569,14 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
     }
 
     @Override
-    public ObjectAdapter initializeEntity(final Persistable pojo) {
+    public ManagedObject initializeEntity(final Persistable pojo) {
 
 //        // need to do eagerly, because (if a viewModel then) a
 //        // viewModel's #viewModelMemento might need to use services
 //        serviceInjector.injectServicesInto(pojo); //redundant
 
         final RootOid originalOid = objectAdapterContext.createPersistentOrViewModelOid(pojo);
-        final ObjectAdapter entity = objectAdapterContext.recreatePojo(originalOid, pojo);
+        final ManagedObject entity = objectAdapterContext.recreatePojo(originalOid, pojo);
 
         getEntityChangeTracker().recognizeLoaded(entity);
 
@@ -654,7 +653,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
     public EntityState getEntityState(@Nullable Object pojo) {
 
         // guard against misuse
-        if(pojo instanceof ObjectAdapter) {
+        if(pojo instanceof ManagedObject) {
             throw _Exceptions.unexpectedCodeReach();
         }
 
@@ -685,7 +684,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
     }
 
     @Override
-    public ObjectAdapter adapterFor(Object pojo) {
+    public ManagedObject adapterFor(Object pojo) {
         return objectAdapterContext.getObjectAdapterProvider().adapterFor(pojo);
     }
     
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
index be1a261..549f6d0 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
@@ -24,11 +24,8 @@ import javax.jdo.listener.InstanceLifecycleEvent;
 import org.datanucleus.enhancement.Persistable;
 
 import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
-import org.apache.isis.persistence.jdo.integration.objectadapter.PojoAdapter;
 
 import lombok.NonNull;
 import lombok.val;
@@ -66,24 +63,6 @@ final class _Utils {
     // -- LOW LEVEL
     
     @Nullable
-    static ObjectAdapter adapterFor(
-            final @NonNull ObjectManager objectManager, 
-            final @Nullable Object pojo) {
-
-        if(pojo == null) {
-            return null;
-        }
-
-        val adapter = objectManager.adapt(pojo);
-        val rootOid = objectManager.identifyObject(adapter);
-        val newAdapter = PojoAdapter.of(pojo, rootOid, 
-                objectManager.getMetaModelContext().getSpecificationLoader()); 
-                
-        injectServices(objectManager.getMetaModelContext().getServiceInjector(), newAdapter);
-        return newAdapter;
-    }
-    
-    @Nullable
     static ManagedObject injectServices(
             final @NonNull ServiceInjector serviceInjector,
             final @Nullable ManagedObject adapter) {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
index 0c367d4..9d03f79 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryFindUsingApplibQueryProcessor.java
@@ -33,7 +33,6 @@ import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.persistence.jdo.integration.metamodel.JdoPropertyUtils;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
 import org.apache.isis.persistence.jdo.integration.persistence.PersistenceSession5;
 import org.apache.isis.persistence.jdo.integration.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
 
@@ -147,10 +146,10 @@ public class PersistenceQueryFindUsingApplibQueryProcessor extends PersistenceQu
                         : results.subList(0, 1);
     }
 
-    private static Map<String, Object> unwrap(final Map<String, ObjectAdapter> argumentAdaptersByParameterName) {
+    private static Map<String, Object> unwrap(final Map<String, ManagedObject> argumentAdaptersByParameterName) {
         final Map<String, Object> argumentsByParameterName = _Maps.newHashMap();
         for (final String parameterName : argumentAdaptersByParameterName.keySet()) {
-            final ObjectAdapter argumentAdapter = argumentAdaptersByParameterName.get(parameterName);
+            final ManagedObject argumentAdapter = argumentAdaptersByParameterName.get(parameterName);
             final Object argument = ManagedObjects.UnwrapUtil.single(argumentAdapter);
             argumentsByParameterName.put(parameterName, argument);
         }
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java
index 125d096..092d0ff 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java
@@ -30,7 +30,6 @@ import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.persistence.jdo.applib.services.IsisJdoSupport_v3_2;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
 import org.apache.isis.persistence.jdo.integration.persistence.IsisLifecycleListener;
 import org.apache.isis.persistence.jdo.integration.persistence.PersistenceSession5;
 import org.apache.isis.persistence.jdo.integration.persistence.query.PersistenceQuery;
@@ -58,7 +57,7 @@ implements PersistenceQueryProcessor<T> {
         for (val pojo : pojos) {
             // ought not to be necessary, however for some queries it seems that the
             // lifecycle listener is not called
-            ObjectAdapter adapter;
+            ManagedObject adapter;
             if(pojo instanceof Persistable) {
                 // an entity
                 adapter = persistenceSession.initializeEntity((Persistable) pojo);
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java
index 929dc9d..cf43d99 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java
@@ -27,9 +27,9 @@ import org.apache.isis.applib.query.Query;
 import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
@@ -37,7 +37,7 @@ import lombok.extern.log4j.Log4j2;
 @RequiredArgsConstructor(staticName = "of") @Log4j2
 public class PersistenceQueryFactory {
 
-    private final Function<Object, ObjectAdapter> adapterProvider;
+    private final Function<Object, ManagedObject> adapterProvider;
     private final SpecificationLoader specificationLoader;
 
     /**
@@ -59,7 +59,7 @@ public class PersistenceQueryFactory {
         } if (query instanceof NamedQuery) {
             final NamedQuery<?> queryDefault = (NamedQuery<?>) query;
             final String queryName = queryDefault.getName();
-            final Map<String, ObjectAdapter> parametersByName = 
+            final Map<String, ManagedObject> parametersByName = 
                     wrap(queryDefault.getParametersByName());
             return new PersistenceQueryFindUsingApplibQueryDefault(noSpec, queryName, parametersByName, cardinality,
                     specificationLoader, queryDefault.getStart(), queryDefault.getCount());
@@ -72,12 +72,12 @@ public class PersistenceQueryFactory {
      * Converts a map of pojos keyed by string to a map of adapters keyed by the
      * same strings.
      */
-    private Map<String, ObjectAdapter> wrap(final Map<String, Object> argumentsByParameterName) {
-        final Map<String, ObjectAdapter> argumentsAdaptersByParameterName = _Maps.newHashMap();
+    private Map<String, ManagedObject> wrap(final Map<String, Object> argumentsByParameterName) {
+        final Map<String, ManagedObject> argumentsAdaptersByParameterName = _Maps.newHashMap();
         for (final Map.Entry<String, Object> entry : argumentsByParameterName.entrySet()) {
             final String parameterName = entry.getKey();
             final Object argument = argumentsByParameterName.get(parameterName);
-            final ObjectAdapter argumentAdapter = argument != null ? adapterProvider.apply(argument) : null;
+            final ManagedObject argumentAdapter = argument != null ? adapterProvider.apply(argument) : null;
             argumentsAdaptersByParameterName.put(parameterName, argumentAdapter);
         }
         return argumentsAdaptersByParameterName;
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java
index 15d16f1..dd9ade0 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java
@@ -25,9 +25,9 @@ import java.util.Map;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.core.metamodel.commons.ToString;
 import org.apache.isis.core.metamodel.services.container.query.QueryCardinality;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
 
 /**
  * Corresponds to an object-store specific implementation of {@link Query}.
@@ -36,12 +36,12 @@ public class PersistenceQueryFindUsingApplibQueryDefault extends PersistenceQuer
 
     private final String queryName;
     private final QueryCardinality cardinality;
-    private final Map<String, ObjectAdapter> argumentsAdaptersByParameterName;
+    private final Map<String, ManagedObject> argumentsAdaptersByParameterName;
 
     public PersistenceQueryFindUsingApplibQueryDefault(
             final ObjectSpecification specification,
             final String queryName,
-            final Map<String, ObjectAdapter> argumentsAdaptersByParameterName,
+            final Map<String, ManagedObject> argumentsAdaptersByParameterName,
             final QueryCardinality cardinality,
             final SpecificationLoader specificationLoader,
             final long... range) {
@@ -57,7 +57,7 @@ public class PersistenceQueryFindUsingApplibQueryDefault extends PersistenceQuer
         return queryName;
     }
 
-    public Map<String, ObjectAdapter> getArgumentsAdaptersByParameterName() {
+    public Map<String, ManagedObject> getArgumentsAdaptersByParameterName() {
         return Collections.unmodifiableMap(argumentsAdaptersByParameterName);
     }
 
diff --git a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/ObjectMemberAbstractTest.java b/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/ObjectMemberAbstractTest.java
deleted file mode 100644
index 14a7895..0000000
--- a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/ObjectMemberAbstractTest.java
+++ /dev/null
@@ -1,236 +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.persistence.jdo.integration.testing;
-
-import java.util.Optional;
-
-import org.datanucleus.enhancement.Persistable;
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.emptyString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.services.metamodel.BeanSort;
-import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
-import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
-import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacetAbstract;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstract;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstractAlwaysEverywhere;
-import org.apache.isis.core.metamodel.facets.members.hidden.HiddenFacetAbstractImpl;
-import org.apache.isis.core.metamodel.facets.members.hidden.method.HideForContextFacetNone;
-import org.apache.isis.core.metamodel.interactions.InteractionHead;
-import org.apache.isis.core.metamodel.interactions.PropertyUsabilityContext;
-import org.apache.isis.core.metamodel.interactions.PropertyVisibilityContext;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract;
-import org.apache.isis.core.security.authentication.AuthenticationContext;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
-import org.apache.isis.persistence.jdo.integration.objectadapter.PojoAdapter;
-import org.apache.isis.core.security.authentication.Authentication;
-
-public class ObjectMemberAbstractTest {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    private ObjectMemberAbstractImpl testMember;
-
-    private ObjectAdapter persistentAdapter;
-    protected MetaModelContext metaModelContext;
-
-    @Mock private AuthenticationContext mockAuthenticationContext;
-    @Mock private Authentication mockAuthentication;
-    @Mock private SpecificationLoader mockSpecificationLoader;
-    @Mock private ObjectSpecification mockSpecForCustomer;
-    @Mock private Persistable mockPersistable;
-
-    @Before
-    public void setUp() throws Exception {
-        //org.apache.log4j.Logger.getRootLogger().setLevel(org.apache.log4j.Level.OFF);
-
-        metaModelContext = MetaModelContext_forTesting.builder()
-                .specificationLoader(mockSpecificationLoader)
-                .authenticationContext(mockAuthenticationContext)
-                .build();
-
-        context.checking(new Expectations() {{
-            allowing(mockAuthenticationContext).currentAuthentication();
-            will(returnValue(Optional.of(mockAuthentication)));
-        }});
-
-        persistentAdapter = PojoAdapter.of(
-                mockPersistable,
-                Factory.root(ObjectSpecId.of("CUS"), "1"),
-                mockSpecificationLoader);
-
-        testMember = new ObjectMemberAbstractImpl(metaModelContext, "id");
-        
-        context.checking(new Expectations() {{
-            allowing(mockSpecificationLoader).lookupBySpecIdElseLoad(ObjectSpecId.of("CUS"));
-            will(returnValue(mockSpecForCustomer));
-            allowing(mockSpecificationLoader).loadSpecification(with(any(Class.class)));
-            will(returnValue(mockSpecForCustomer));
-
-            allowing(mockSpecForCustomer).isManagedBean();
-            will(returnValue(false));
-
-            allowing(mockSpecForCustomer).isViewModel();
-            will(returnValue(false));
-            
-            allowing(mockSpecForCustomer).getBeanSort();
-            will(returnValue(BeanSort.ENTITY_JDO));
-
-            allowing(mockSpecForCustomer).getShortIdentifier();
-            will(returnValue("Customer"));
-        }});
-
-    }
-
-    @Test
-    public void testToString() throws Exception {
-        testMember.addFacet(new NamedFacetAbstract("", true, testMember) {});
-        assertThat(testMember.toString(), not(is(emptyString())));
-    }
-
-    @Test
-    public void testVisibleWhenHiddenFacetSetToAlways() {
-        testMember.addFacet(new HideForContextFacetNone(testMember));
-        testMember.addFacet(new HiddenFacetAbstract(Where.ANYWHERE, testMember) {
-            @Override
-            public String hiddenReason(final ManagedObject target, final Where whereContext) {
-                return null;
-            }
-        });
-        final Consent visible = testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
-        assertTrue(visible.isAllowed());
-    }
-
-    @Test
-    public void testVisibleWhenHiddenFacetSet() {
-        testMember.addFacet(new HideForContextFacetNone(testMember));
-        testMember.addFacet(new HiddenFacetAbstractImpl(Where.ANYWHERE, testMember){});
-
-        final Consent visible = testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
-        assertFalse(visible.isAllowed());
-    }
-
-    @Test
-    public void testVisibleDeclaratively() {
-        testMember.addFacet(new HiddenFacetAbstractAlwaysEverywhere(testMember) {});
-        assertFalse(testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE).isAllowed());
-    }
-
-    @Test
-    public void testVisibleForSessionByDefault() {
-        final Consent visible = testMember.isVisible(persistentAdapter, InteractionInitiatedBy.USER, Where.ANYWHERE);
-        assertTrue(visible.isAllowed());
-    }
-
-    @Test
-    public void testName() throws Exception {
-        final String name = "action name";
-        testMember.addFacet(new NamedFacetAbstract(name, true, testMember) {
-        });
-        assertThat(testMember.getName(), is(equalTo(name)));
-    }
-
-    @Test
-    public void testDescription() throws Exception {
-        final String name = "description text";
-        testMember.addFacet(new DescribedAsFacetAbstract(name, testMember) {
-        });
-        assertEquals(name, testMember.getDescription());
-    }
-}
-
-class ObjectMemberAbstractImpl extends ObjectMemberAbstract {
-
-    public static class Customer {
-        private String firstName;
-
-        public String getFirstName() {
-            return firstName;
-        }
-    }
-    
-    @Override
-    public FacetHolder getFacetHolder() {
-        return getFacetedMethod();
-    }
-
-    protected ObjectMemberAbstractImpl(MetaModelContext mmc, final String id) {
-        super(FacetedMethod.createForProperty(Customer.class, "firstName"), FeatureType.PROPERTY);
-        super.getFacetedMethod().setMetaModelContext(mmc);
-    }
-
-    public Consent isUsable(final ObjectAdapter target) {
-        return null;
-    }
-
-    @Override
-    public ObjectSpecification getSpecification() {
-        return null;
-    }
-
-    @Override
-    public UsabilityContext createUsableInteractionContext(
-            final ManagedObject target, 
-            final InteractionInitiatedBy interactionInitiatedBy,
-            final Where where) {
-        return new PropertyUsabilityContext(
-                InteractionHead.simple(target), getIdentifier(), interactionInitiatedBy, where);
-    }
-
-    @Override
-    public VisibilityContext createVisibleInteractionContext(
-            final ManagedObject target, 
-            final InteractionInitiatedBy interactionInitiatedBy,
-            final Where where) {
-        return new PropertyVisibilityContext(
-                InteractionHead.simple(target), getIdentifier(), interactionInitiatedBy, where);
-    }
-
-
-}
diff --git a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java b/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java
deleted file mode 100644
index 6efece9..0000000
--- a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java
+++ /dev/null
@@ -1,154 +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.persistence.jdo.integration.testing;
-
-import java.util.Iterator;
-
-import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.persistence.jdo.integration.objectadapter.PojoAdapter;
-
-import lombok.val;
-
-public class PojoAdapterBuilder {
-
-    private PojoAdapterBuilder(){
-    }
-
-    private Object pojo = new Object();
-
-    private SpecificationLoader specificationLoader;
-
-    private ObjectSpecId objectSpecId = ObjectSpecId.of("CUS");
-    private String identifier = "1";
-    // only used if type is AGGREGATED
-    private String aggregatedId = "firstName";
-
-    private Type type = Type.ROOT;
-    private Persistence persistence = Persistence.PERSISTENT;
-
-    public enum Persistence {
-        PERSISTENT {
-            @Override
-            RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return Factory.root(objectSpecId, identifier);
-            }
-        },
-        VALUE {
-            @Override
-            RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return null;
-            }
-        };
-        abstract RootOid createOid(ObjectSpecId objectSpecId, String identifier);
-    }
-
-    public static enum Type {
-        ROOT {
-            @Override
-            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String unused) {
-                return rootOid;
-            }
-        }, COLLECTION {
-            @Override
-            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
-            }
-        }, VALUE {
-            @Override
-            Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String unused) {
-                return null;
-            }
-        };
-
-        abstract Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String supplementalId);
-    }
-
-    public static PojoAdapterBuilder create() {
-        return new PojoAdapterBuilder();
-    }
-
-    public PojoAdapterBuilder withIdentifier(String identifier) {
-        this.identifier = identifier;
-        return this;
-    }
-
-    public PojoAdapterBuilder withObjectType(String objectType) {
-        this.objectSpecId = ObjectSpecId.of(objectType);
-        return this;
-    }
-
-    public PojoAdapterBuilder withPojo(Object pojo) {
-        this.pojo = pojo;
-        return this;
-    }
-
-    //test only
-    public PojoAdapterBuilder withOid(String oidAndTitle) {
-        final Iterator<String> iterator = _Strings.splitThenStream(oidAndTitle, "|").iterator(); 
-
-        if(!iterator.hasNext()) { return this; }
-        withObjectType(iterator.next());
-        if(!iterator.hasNext()) { return this; }
-        withIdentifier(iterator.next());
-        return this;
-    }
-
-    /**
-     * A Persistence of VALUE implies a Type of VALUE also
-     */
-    public PojoAdapterBuilder with(Persistence persistence) {
-        this.persistence = persistence;
-        if(persistence == Persistence.VALUE) {
-            this.type = Type.VALUE;
-        }
-        return this;
-    }
-
-    /**
-     * A Type of VALUE implies a Persistence of VALUE also.
-     */
-    public PojoAdapterBuilder with(Type type) {
-        this.type = type;
-        if(type == Type.VALUE) {
-            this.persistence = Persistence.VALUE;
-        }
-        return this;
-    }
-
-    public PojoAdapterBuilder with(SpecificationLoader specificationLoader) {
-        this.specificationLoader = specificationLoader;
-        return this;
-    }
-
-    public PojoAdapter build() {
-        val rootOid = persistence.createOid(objectSpecId, identifier);
-        val oid = type.oidFor(rootOid, objectSpecId, aggregatedId);
-        val pojoAdapter = PojoAdapter.of(pojo, oid, specificationLoader);
-        return pojoAdapter;
-    }
-
-
-
-}
diff --git a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterTest.java b/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterTest.java
deleted file mode 100644
index 1567c57..0000000
--- a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterTest.java
+++ /dev/null
@@ -1,81 +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.persistence.jdo.integration.testing;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.security.authentication.Authentication;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
-import org.apache.isis.persistence.jdo.integration.objectadapter.PojoAdapter;
-import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
-
-public class PojoAdapterTest {
-
-    @Rule
-    public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-    private ObjectAdapter adapter;
-    private TestPojo domainObject;
-
-    @Mock private SpecificationLoader mockSpecificationLoader;
-    @Mock private Authentication mockAuthentication;
-
-    @Before
-    public void setUp() throws Exception {
-        domainObject = new TestPojo();
-
-        adapter = PojoAdapter.of(
-                domainObject, 
-                Factory.root(ObjectSpecId.of("CUS"), "1"),
-                mockSpecificationLoader);
-
-        allowUnimportantMethodCallsOn();
-    }
-
-    private void allowUnimportantMethodCallsOn() {
-        context.checking(new Expectations() {
-            {
-                allowing(mockAuthentication).getUserName();
-                will(returnValue("fredbloggs"));
-            }
-        });
-    }
-
-    @Test
-    public void getOid_initially() {
-        assertEquals(Factory.root(ObjectSpecId.of("CUS"), "1"), adapter.getOid());
-    }
-
-    @Test
-    public void getObject_initially() {
-        assertEquals(domainObject, adapter.getPojo());
-    }
-
-}
diff --git a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/TestPojo.java b/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/TestPojo.java
deleted file mode 100644
index c65cddd..0000000
--- a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/TestPojo.java
+++ /dev/null
@@ -1,52 +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.persistence.jdo.integration.testing;
-
-public class TestPojo {
-
-    private static int nextId;
-    private final int id = nextId++;
-    private final String state = "pojo" + id;
-
-    @Override
-    public String toString() {
-        return "Pojo#" + id;
-    }
-
-    @Override
-    public boolean equals(final Object other) {
-        if (other == null) {
-            return false;
-        }
-        if (other == this) {
-            return true;
-        }
-        if (other.getClass() == getClass()) {
-            final TestPojo otherTestPojo = (TestPojo) other;
-            return otherTestPojo.state.equals(state);
-        }
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return state.hashCode();
-    }
-
-}
\ No newline at end of file


[isis] 03/04: ISIS-2033: remove PojoAdapter

Posted by ah...@apache.org.
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

commit 64090580a3aa7b579cdf20ab23e4a8d08e52d05b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 19:26:08 2020 +0100

    ISIS-2033: remove PojoAdapter
---
 .../objectadapter/ObjectAdapterContext.java        |  16 ++-
 ...ObjectAdapterContext_ObjectAdapterProvider.java |   9 +-
 .../jdo/integration/objectadapter/PojoAdapter.java | 149 ---------------------
 3 files changed, 18 insertions(+), 156 deletions(-)

diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
index ccec944..c793907 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
@@ -23,6 +23,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.context.RuntimeContextBase;
 import org.apache.isis.persistence.jdo.integration.persistence.IsisPersistenceSessionJdo;
@@ -108,7 +109,10 @@ final public class ObjectAdapterContext {
     }
 
     public ManagedObject recreatePojo(RootOid oid, Object recreatedPojo) {
-        final ManagedObject createdAdapter = createRootOrAggregatedAdapter(oid, recreatedPojo);
+        
+        val spec = getSpecificationLoader().loadSpecification(recreatedPojo.getClass());
+        
+        final ManagedObject createdAdapter = createRootOrAggregatedAdapter(spec, oid, recreatedPojo);
         return injectServices(createdAdapter);
     }
 
@@ -124,12 +128,16 @@ final public class ObjectAdapterContext {
         return adapter;
     }
 
-    private ManagedObject createRootOrAggregatedAdapter(final RootOid oid, final Object pojo) {
+    private ManagedObject createRootOrAggregatedAdapter(
+            final @NonNull ObjectSpecification spec,
+            final RootOid oid, 
+            final Object pojo) {
+        
         if(oid instanceof RootOid) {
             final RootOid rootOid = (RootOid) oid;
-            return PojoAdapter.of(pojo, rootOid, getSpecificationLoader());
+            return ManagedObject.identified(spec, pojo, rootOid);
         } 
-        throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
+        throw _Exceptions.illegalArgument("Parented Oids are no longer supported, or cannot use Value Oid.");
     }
 
     // -- OBJECT ADAPTER PROVIDER SUPPORT
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
index 9913f14..3eb8b0a 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
@@ -18,6 +18,7 @@
  */
 package org.apache.isis.persistence.jdo.integration.objectadapter;
 
+import org.apache.isis.commons.internal.assertions._Assert;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.context.RuntimeContext;
@@ -53,9 +54,11 @@ class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvide
 
         val adapter = objectManager.adapt(pojo);
         val rootOid = objectManager.identifyObject(adapter);
-        val newAdapter = PojoAdapter.of(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
-        objectAdapterContext.injectServices(newAdapter);
-        return newAdapter;
+        //val newAdapter = PojoAdapter.of(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
+        
+        _Assert.assertEquals(rootOid, adapter.getRootOid().orElse(null));
+        
+        return objectAdapterContext.injectServices(adapter);
     }
 
 
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
deleted file mode 100644
index be0b466..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/PojoAdapter.java
+++ /dev/null
@@ -1,149 +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.persistence.jdo.integration.objectadapter;
-
-import java.util.Objects;
-import java.util.Optional;
-
-import org.apache.isis.commons.exceptions.IsisException;
-import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.commons.ToString;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-
-import static org.apache.isis.commons.internal.base._With.requires;
-
-import lombok.Getter;
-import lombok.val;
-
-final class PojoAdapter implements ManagedObject {
-
-    private final SpecificationLoader specificationLoader;
-
-    @Getter(onMethod = @__(@Override)) private final Object pojo;
-    @Getter private final Oid oid;
-
-    // -- FACTORIES
-
-    public static PojoAdapter of(
-            final Object pojo,
-            final Oid oid,
-            final SpecificationLoader specificationLoader) {
-        return new PojoAdapter(pojo, oid, specificationLoader);
-    }
-
-    private PojoAdapter(
-            final Object pojo,
-            final Oid oid,
-            final SpecificationLoader specificationLoader) {
-
-        Objects.requireNonNull(pojo);
-
-        this.specificationLoader = specificationLoader;
-
-        if (pojo instanceof ManagedObject) {
-            throw new IsisException("ObjectAdapter can't be used to wrap an ObjectAdapter: " + pojo);
-        }
-        if (pojo instanceof Oid) {
-            throw new IsisException("ObjectAdapter can't be used to wrap an Oid: " + pojo);
-        }
-
-        this.pojo = pojo;
-        this.oid = requires(oid, "oid");
-    }
-
-    // -- getSpecification
-
-    final _Lazy<ObjectSpecification> objectSpecification = _Lazy.of(this::loadSpecification);
-
-    @Override
-    public ObjectSpecification getSpecification() {
-        return objectSpecification.get();
-    }
-
-    private ObjectSpecification loadSpecification() {
-        final Class<?> aClass = getPojo().getClass();
-        final ObjectSpecification specification = specificationLoader.loadSpecification(aClass);
-        return specification;
-    }
-
-    @Override
-    public String toString() {
-        final ToString str = new ToString(this);
-        toString(str);
-
-        // don't do title of any entities. For persistence entities, might
-        // forces an unwanted resolve
-        // of the object. For transient objects, may not be fully initialized.
-
-        str.append("pojo-toString", pojo.toString());
-        str.appendAsHex("pojo-hash", pojo.hashCode());
-        return str.toString();
-    }
-
-    protected void toString(final ToString str) {
-        str.append(aggregateResolveStateCode());
-        final Oid oid = getOid();
-        if (oid != null) {
-            str.append(":");
-            str.append(oid.toString());
-        } else {
-            str.append(":-");
-        }
-        str.setAddComma();
-        if (!objectSpecification.isMemoized()) {
-            str.append("class", getPojo().getClass().getName());
-        } else {
-            str.append("specification", getSpecification().getShortIdentifier());
-        }
-    }
-
-    private String aggregateResolveStateCode() {
-
-        // this is an approximate re-implementation...
-        final Oid oid = getOid();
-        if(oid != null) {
-            return "B"; // bookmark-able
-//            if(oid.isPersistent()) return "P";
-//            if(oid.isTransient()) return "T";
-//            if(oid.isViewModel()) return "V";
-        }
-        return "S"; // standalone adapter (value)
-    }
-
-    @Override
-    public Optional<RootOid> getRootOid() {
-        val oid = getOid();
-        if (oid instanceof RootOid) {
-            return Optional.of((RootOid)oid);
-        }
-        return Optional.empty();
-    }
-
-    @Override
-    public boolean isRootOidMemoized() {
-        return true; // oid is immutable
-    }
-
-
-}


[isis] 01/04: ISIS-2033: remove ParentedOid

Posted by ah...@apache.org.
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

commit f8526fb09f2d86f443cc9cf8bf73a0d7ea7d4027
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 18:43:05 2020 +0100

    ISIS-2033: remove ParentedOid
---
 .../isis/core/metamodel/adapter/oid/Oid.java       |  14 --
 .../core/metamodel/adapter/oid/Oid_Marshaller.java |  16 +--
 .../core/metamodel/adapter/oid/Oid_Parented.java   | 133 -----------------
 .../core/metamodel/adapter/oid/ParentedOid.java    |  50 -------
 .../oid/CollectionOidTest_valueSemantics.java      |  48 -------
 .../oid/OidMarshallerTest_roundtripping.java       |  10 --
 .../adapter/oid/OidMarshallerTest_unmarshal.java   |  29 ----
 .../objectadapter/ObjectAdapterContext.java        |  19 +--
 .../jdo/integration/objectadapter/_Factories.java  |  37 +++--
 .../jdo/integration/oid/JdoObjectIdSerializer.java |   8 --
 .../persistence/IsisLifecycleListener.java         |  27 ++--
 .../persistence/PersistenceSession.java            |   6 -
 .../persistence/PersistenceSession5.java           | 157 +++++++++------------
 .../jdo/integration/persistence/_Utils.java        |  61 +++++++-
 .../integration/testing/PojoAdapterBuilder.java    |   3 +-
 15 files changed, 165 insertions(+), 453 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index 28cb756..17807df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -24,10 +24,8 @@ import java.io.Serializable;
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.schema.common.v2.OidDto;
 
-
 /**
  * An immutable identifier for either a root object (subtype {@link RootOid}) or
  * a parented collection (subtype {@link ParentedOid}).
@@ -56,8 +54,6 @@ public interface Oid extends Serializable {
 
     public static interface Marshaller {
 
-        String marshal(ParentedOid parentedOid);
-
         String marshal(RootOid rootOid);
 
         String joinAsOid(String domainType, String instanceId);
@@ -107,16 +103,6 @@ public interface Oid extends Serializable {
             return Oid_Root.of(objectSpecId, identifier);
         }
         
-        // -- PARENTED COLLECTIONS
-
-        public static ParentedOid parented(RootOid parent, OneToManyAssociation oneToMany) {
-            return Oid_Parented.ofOneToManyId(parent, oneToMany.getId());
-        }
-
-        public static ParentedOid parentedForTesting(RootOid parent, String oneToManyId) {
-            return Oid_Parented.ofOneToManyId(parent, oneToManyId);
-        }
-        
     }
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
index 7ee1308..2b73e03 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Marshaller.java
@@ -176,18 +176,10 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
                 throw _Exceptions.illegalArgument("Aggregated Oids are no longer supported");
             }
         } else {
-            final String oidStrWithoutCollectionName = getGroup(matcher, 1);
-
-            final String parentOidStr = oidStrWithoutCollectionName;
-
-            RootOid parentOid = this.unmarshal(parentOidStr, RootOid.class);
-            ensureCorrectType(oidStr, requestedType, ParentedOid.class);
-            return _Casts.uncheckedCast( Oid_Parented.ofOneToManyId(parentOid, oneToManyId) );
+            throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
         }
     }
 
-
-
     private static class AggregateOidPart {
         AggregateOidPart(String objectType, String localId) {
             this.objectType = objectType;
@@ -230,10 +222,4 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
         return rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
     }
 
-    @Override
-    public String marshal(ParentedOid parentedOid) {
-        return parentedOid.getParentOid().enString() + SEPARATOR_PARENTED + parentedOid.getName();
-    }
-
-
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
deleted file mode 100644
index 00f0d45..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Parented.java
+++ /dev/null
@@ -1,133 +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.adapter.oid;
-
-import java.io.IOException;
-import java.util.Objects;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-
-import static org.apache.isis.commons.internal.base._With.requires;
-import static org.apache.isis.core.metamodel.adapter.oid.Oid.marshaller;
-import static org.apache.isis.core.metamodel.adapter.oid.Oid.unmarshaller;
-
-final class Oid_Parented implements ParentedOid {
-
-    private static final long serialVersionUID = 2L;
-
-    private final String oneToManyId;
-    private final int hashCode;
-
-    private final RootOid parentRootOid;
-
-    static Oid_Parented ofOneToManyId(RootOid parentRootOid, String oneToManyId) {
-        return new Oid_Parented(parentRootOid, oneToManyId);
-    }
-
-    private Oid_Parented(RootOid parentRootOid, String oneToManyId) {
-        requires(parentRootOid, "parentRootOid");
-        this.parentRootOid = parentRootOid;
-        this.oneToManyId = oneToManyId;
-        this.hashCode = calculateHash();
-    }
-
-    @Override
-    public RootOid getParentOid() {
-        return parentRootOid;
-    }
-    
-    @Override
-    public ObjectSpecId getObjectSpecId() {
-        return getParentOid().getObjectSpecId();
-    }
-
-    public static Oid_Parented deString(String oidStr) {
-        return unmarshaller().unmarshal(oidStr, Oid_Parented.class);
-    }
-
-    @Override
-    public String enString() {
-        return marshaller().marshal(this);
-    }
-
-    private Oid_Parented(Oid_Parented oid) throws IOException {
-        this.parentRootOid = oid.getParentOid();
-        this.oneToManyId = oid.oneToManyId;
-        this.hashCode = calculateHash();
-    }
-
-    @Override
-    public String getName() {
-        return oneToManyId;
-    }
-
-
-    // /////////////////////////////////////////////////////////
-    // toString
-    // /////////////////////////////////////////////////////////
-
-    @Override
-    public String toString() {
-        return enString();
-    }
-
-    // /////////////////////////////////////////////////////////
-    // Value semantics
-    // /////////////////////////////////////////////////////////
-
-    @Override
-    public boolean equals(final Object other) {
-        if (other == this) {
-            return true;
-        }
-        if (other == null) {
-            return false;
-        }
-        if (getClass() != other.getClass()) {
-            return false;
-        }
-        return equals((Oid_Parented) other);
-    }
-
-    public boolean equals(final Oid_Parented other) {
-        return Objects.equals(other.getParentOid(), getParentOid()) 
-                && Objects.equals(other.oneToManyId, oneToManyId);
-    }
-
-
-    @Override
-    public int hashCode() {
-        return hashCode;
-    }
-
-    private int calculateHash() {
-        return Objects.hash(getParentOid(), oneToManyId);
-    }
-
-    /**
-     * When the RootOid is persisted, all its &quot;children&quot;
-     * need updating similarly.
-     */
-    public Oid_Parented asPersistent(RootOid newParentRootOid) {
-        return new Oid_Parented(newParentRootOid, oneToManyId);
-    }
-
-
-}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
deleted file mode 100644
index 04773d6..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/ParentedOid.java
+++ /dev/null
@@ -1,50 +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.adapter.oid;
-
-import org.apache.isis.applib.annotation.Collection;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-import static org.apache.isis.core.metamodel.adapter.oid.Oid.unmarshaller;
-
-/**
- * Used as the {@link Oid} for {@link OneToManyAssociation} (collections).
- */
-public interface ParentedOid extends Oid {
-
-    /**
-     * object identifier of the domain object that is holding the {@link OneToManyAssociation}
-     * this instance is representing
-     */
-    RootOid getParentOid();
-
-    /**
-     * id of the {@link OneToManyAssociation} this instance is representing, that is 
-     * the member name, that is annotated with {@link Collection}
-     */
-    String getName();
-
-    // -- DECODE FROM STRING
-
-    public static ParentedOid deString(String enString) {
-        return unmarshaller().unmarshal(enString, ParentedOid.class);
-    }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
deleted file mode 100644
index 6d56541..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/CollectionOidTest_valueSemantics.java
+++ /dev/null
@@ -1,48 +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.adapter.oid;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.isis.core.internaltestsupport.contract.ValueTypeContractTestAbstract;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-
-public class CollectionOidTest_valueSemantics 
-extends ValueTypeContractTestAbstract<ParentedOid> {
-
-    private final RootOid parent = Oid.Factory.root(ObjectSpecId.of("CUS"), "123");
-    private final RootOid otherParent = Oid.Factory.root(ObjectSpecId.of("CUS"), "124");
-
-    @Override
-    protected List<ParentedOid> getObjectsWithSameValue() {
-        return Arrays.asList(
-                Oid.Factory.parentedForTesting(parent, "456"),
-                Oid.Factory.parentedForTesting(parent, "456"),
-                Oid.Factory.parentedForTesting(parent, "456"));
-    }
-
-    @Override
-    protected List<ParentedOid> getObjectsWithDifferentValue() {
-        return Arrays.asList(
-                Oid.Factory.parentedForTesting(otherParent, "456"),
-                Oid.Factory.parentedForTesting(parent, "457"));
-    }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
index ff3e49b..e65f99a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
@@ -36,16 +36,6 @@ public class OidMarshallerTest_roundtripping {
         final RootOid deString = RootOid.deString(enString);
         assertThat(deString, is(oid));
     }
-
-    @Test
-    public void collectionOid() {
-        RootOid parentOid = Oid.Factory.root(ObjectSpecId.of("CUS"), "123");
-        ParentedOid oid = Oid.Factory.parentedForTesting(parentOid, "items");
-
-        final String enString = oid.enString();
-        final ParentedOid deString = ParentedOid.deString(enString);
-        assertThat(deString, is(oid));
-    }
     
     @Test
     public void rootOid_withLegacyVersionIgnored() {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
index 1bab721..205e9ae 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_unmarshal.java
@@ -109,35 +109,6 @@ public class OidMarshallerTest_unmarshal {
         assertThat(oid, equalTo((Oid)rootOid));
     }
 
-    @Test
-    public void collectionOfPersistentRoot() {
-        final String oidStr = "CUS:123$items";
-
-        final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
-        assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("CUS:123", RootOid.class)));
-        assertThat(collectionOid.getName(), is("items"));
-
-        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
-        assertThat(oid, equalTo((Oid)collectionOid));
-    }
-
-    @Test
-    public void collectionOfTransientRoot() {
-        final String oidStr = "!CUS:123$items";
-
-        final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
-        assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("!CUS:123", RootOid.class)));
-        assertThat(collectionOid.getName(), is("items"));
-
-        final Oid oid = oidMarshaller.unmarshal(oidStr, Oid.class);
-        assertThat(oid, equalTo((Oid)collectionOid));
-    }
-
-
-    @Test(expected=IllegalArgumentException.class)
-    public void collection_forRoot_oidStr() {
-        oidMarshaller.unmarshal("CUS:123", ParentedOid.class);
-    }
 
     @Test(expected=IllegalArgumentException.class)
     public void badPattern() {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
index e600019..9eb0ad8 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
@@ -19,8 +19,7 @@
 package org.apache.isis.persistence.jdo.integration.objectadapter;
 
 import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
@@ -107,7 +106,7 @@ final public class ObjectAdapterContext {
         return adapter;
     }
 
-    public ObjectAdapter recreatePojo(Oid oid, Object recreatedPojo) {
+    public ObjectAdapter recreatePojo(RootOid oid, Object recreatedPojo) {
         final ObjectAdapter createdAdapter = createRootOrAggregatedAdapter(oid, recreatedPojo);
         return injectServices(createdAdapter);
     }
@@ -124,20 +123,14 @@ final public class ObjectAdapterContext {
         return adapter;
     }
 
-    // package private
-    ObjectAdapter createRootOrAggregatedAdapter(final Oid oid, final Object pojo) {
-        final ObjectAdapter createdAdapter;
+    private ObjectAdapter createRootOrAggregatedAdapter(final RootOid oid, final Object pojo) {
         if(oid instanceof RootOid) {
             final RootOid rootOid = (RootOid) oid;
-            createdAdapter = _Factories.createRootAdapter(pojo, rootOid, getSpecificationLoader());
-        } else /*if (oid instanceof CollectionOid)*/ {
-            final ParentedOid collectionOid = (ParentedOid) oid;
-            createdAdapter = _Factories.createCollectionAdapter(pojo, collectionOid, getSpecificationLoader());
-        }
-        return createdAdapter;
+            return _Factories.createRootAdapter(pojo, rootOid, getSpecificationLoader());
+        } 
+        throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
     }
 
-
     // -- OBJECT ADAPTER PROVIDER SUPPORT
 
     public ObjectAdapterProvider getObjectAdapterProvider() {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
index fd3e71f..4087147 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/_Factories.java
@@ -18,10 +18,7 @@
  */
 package org.apache.isis.persistence.jdo.integration.objectadapter;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.ParentedOid;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 
 import lombok.NonNull;
@@ -36,23 +33,23 @@ final class _Factories {
         return PojoAdapter.of(pojo, rootOid, specificationLoader);
     }
 
-    public static ObjectAdapter createCollectionAdapter(
-            final Object pojo,
-            final @NonNull ParentedOid collectionOid, 
-            final @NonNull SpecificationLoader specificationLoader) {
-        return PojoAdapter.of(pojo, collectionOid, specificationLoader);
-    }
-
-    public static ObjectAdapter createCollectionAdapter(
-            final @NonNull Object pojo,
-            final RootOid parentOid,
-            final OneToManyAssociation otma, 
-            final @NonNull SpecificationLoader specificationLoader) {
-
-        // persistence of collection follows the parent
-        final ParentedOid collectionOid = Oid.Factory.parented(parentOid, otma);
-        return createCollectionAdapter(pojo, collectionOid, specificationLoader);
-    }
+//    public static ObjectAdapter createCollectionAdapter(
+//            final Object pojo,
+//            final @NonNull ParentedOid collectionOid, 
+//            final @NonNull SpecificationLoader specificationLoader) {
+//        return PojoAdapter.of(pojo, collectionOid, specificationLoader);
+//    }
+
+//    private static ObjectAdapter createCollectionAdapter(
+//            final @NonNull Object pojo,
+//            final RootOid parentOid,
+//            final OneToManyAssociation otma, 
+//            final @NonNull SpecificationLoader specificationLoader) {
+//
+//        // persistence of collection follows the parent
+//        final ParentedOid collectionOid = Oid.Factory.parented(parentOid, otma);
+//        return createCollectionAdapter(pojo, collectionOid, specificationLoader);
+//    }
 
     
 }
\ No newline at end of file
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/oid/JdoObjectIdSerializer.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/oid/JdoObjectIdSerializer.java
index 092517a..99998d0 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/oid/JdoObjectIdSerializer.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/oid/JdoObjectIdSerializer.java
@@ -43,9 +43,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.persistence.jdo.integration.oid._JdoObjectIdDecoder.JdoObjectIdDecodingRequest;
 
 import lombok.NonNull;
@@ -85,12 +83,6 @@ public final class JdoObjectIdSerializer {
             // re-create-able through the constructor
             jdoOid.getClass().getName() + SEPARATOR + jdoOid.toString());
     }
-
-    @Deprecated
-    public static Object toJdoObjectId(SpecificationLoader specificationLoader, RootOid oid) {
-        val spec = specificationLoader.lookupBySpecIdElseLoad(oid.getObjectSpecId());
-        return toJdoObjectId(spec, oid);
-    }
     
     public static Object toJdoObjectId(ObjectSpecification spec, RootOid oid) {
         
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java
index e089900..9b38992 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisLifecycleListener.java
@@ -44,7 +44,6 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
      */
     interface PersistenceSessionLifecycleManagement {
 
-        void ensureRootObject(Persistable pojo);
         ObjectAdapter initializeEntity(Persistable pojo);
 
         void invokeIsisPersistingCallback(Persistable pojo);
@@ -75,25 +74,25 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
 
     @Override
     public void preAttach(final InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
-        persistenceSession.ensureRootObject(pojo);
+        final Persistable pojo = _Utils.persistableFor(event);
+        _Utils.ensureRootObject(pojo);
     }
 
     @Override
     public void postAttach(final InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
-        persistenceSession.ensureRootObject(pojo);
+        final Persistable pojo = _Utils.persistableFor(event);
+        _Utils.ensureRootObject(pojo);
     }
 
     @Override
     public void postLoad(final InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
+        final Persistable pojo = _Utils.persistableFor(event);
         persistenceSession.initializeEntity(pojo);
     }
 
     @Override
     public void preStore(InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
+        final Persistable pojo = _Utils.persistableFor(event);
         if(pojo.dnGetStateManager().isNew(pojo)) {
             persistenceSession.invokeIsisPersistingCallback(pojo);
         }
@@ -101,7 +100,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
 
     @Override
     public void postStore(InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
+        final Persistable pojo = _Utils.persistableFor(event);
         if(pojo.dnGetStateManager().isNew(pojo)) {
             persistenceSession.enlistCreatedAndInvokeIsisPersistedCallback(pojo);
         } else {
@@ -111,7 +110,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
 
     @Override
     public void preDirty(InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
+        final Persistable pojo = _Utils.persistableFor(event);
         persistenceSession.enlistUpdatingAndInvokeIsisUpdatingCallback(pojo);
     }
 
@@ -127,7 +126,7 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
 
     @Override
     public void preDelete(InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
+        final Persistable pojo = _Utils.persistableFor(event);
         persistenceSession.enlistDeletingAndInvokeIsisRemovingCallbackFacet(pojo);
 
 
@@ -162,14 +161,14 @@ DetachLifecycleListener, DirtyLifecycleListener, LoadLifecycleListener, StoreLif
 
     @Override
     public void preDetach(InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
-        persistenceSession.ensureRootObject(pojo);
+        final Persistable pojo = _Utils.persistableFor(event);
+        _Utils.ensureRootObject(pojo);
     }
 
     @Override
     public void postDetach(InstanceLifecycleEvent event) {
-        final Persistable pojo = _Utils.persistenceCapableFor(event);
-        persistenceSession.ensureRootObject(pojo);
+        final Persistable pojo = _Utils.persistableFor(event);
+        _Utils.ensureRootObject(pojo);
     }
 
     // /////////////////////////////////////////////////////////
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java
index 3022dd2..c49890d 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java
@@ -19,15 +19,12 @@
 package org.apache.isis.persistence.jdo.integration.persistence;
 
 import java.rmi.NoSuchObjectException;
-import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -84,9 +81,6 @@ public interface PersistenceSession {
      */
     ManagedObject fetchByIdentifier(ObjectSpecification spec, String identifier);
 
-    /**@since 2.0*/
-    Map<RootOid, Object> fetchPersistentPojos(List<RootOid> rootOids);
-
     Can<ManagedObject> allMatchingQuery(final Query<?> query);
     Optional<ManagedObject> firstMatchingQuery(final Query<?> query);
 
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
index d75921e..a20cfef 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
@@ -19,32 +19,22 @@
 package org.apache.isis.persistence.jdo.integration.persistence;
 
 import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 
 import javax.annotation.Nullable;
 import javax.enterprise.inject.Vetoed;
 import javax.jdo.FetchGroup;
-import javax.jdo.FetchPlan;
 import javax.jdo.PersistenceManager;
 import javax.jdo.PersistenceManagerFactory;
-import javax.jdo.identity.SingleFieldIdentity;
 
 import org.datanucleus.enhancement.Persistable;
-import org.datanucleus.exceptions.NucleusObjectNotFoundException;
-import org.datanucleus.identity.DatastoreIdImpl;
 
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.commons.exceptions.IsisException;
-import org.apache.isis.commons.internal.collections._Maps;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.ObjectNotFoundException;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
@@ -75,8 +65,6 @@ import org.apache.isis.persistence.jdo.integration.persistence.query.Persistence
 import org.apache.isis.persistence.jdo.integration.persistence.query.PersistenceQueryFindAllInstances;
 import org.apache.isis.persistence.jdo.integration.persistence.query.PersistenceQueryFindUsingApplibQueryDefault;
 
-import static org.apache.isis.commons.internal.base._Casts.uncheckedCast;
-
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.val;
@@ -345,6 +333,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         } catch (final RuntimeException e) {
 
             //XXX this idiom could be delegated to a service
+            //or remodel the method to return a Result<T>
             for (val exceptionRecognizer : lookupServices(ExceptionRecognizer.class)) {
                 val recognition = exceptionRecognizer.recognize(e).orElse(null);
                 if(recognition != null) {
@@ -364,71 +353,71 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         return result;
     }
 
-    @Override
-    public Map<RootOid,Object> fetchPersistentPojos(final List<RootOid> rootOids) {
-
-        if(rootOids.isEmpty()) {
-            return Collections.emptyMap();
-        }
-
-        val specLoader = super.getSpecificationLoader();
-        
-        final List<Object> dnOids = new ArrayList<>(rootOids.size());
-        for (val rootOid : rootOids) {
-            final Object id = JdoObjectIdSerializer.toJdoObjectId(specLoader, rootOid);
-            if(id instanceof SingleFieldIdentity) {
-                dnOids.add(id);
-            } else if (id instanceof String && ((String) id).contains("[OID]")) {
-                final DatastoreIdImpl datastoreId = new DatastoreIdImpl((String)id);
-                dnOids.add(datastoreId);
-            } else {
-                // application identity
-                final DatastoreIdImpl datastoreId = new DatastoreIdImpl(clsOf(rootOid).getName(), id);
-                dnOids.add(datastoreId);
-            }
-        }
-        FetchPlan fetchPlan = persistenceManager.getFetchPlan();
-        fetchPlan.addGroup(FetchGroup.DEFAULT);
-        final List<Object> persistentPojos = new ArrayList<>(rootOids.size());
-        try {
-            final Collection<Object> pojos = uncheckedCast(persistenceManager.getObjectsById(dnOids, true));
-            for (final Object pojo : pojos) {
-                try {
-                    persistentPojos.add(pojo);
-                } catch(Exception ex) {
-                    persistentPojos.add(null);
-                }
-            }
-        } catch(NucleusObjectNotFoundException nonfe) {
-            // at least one not found; fall back to loading one by one
-            for (final Object dnOid : dnOids) {
-                try {
-                    final Object persistentPojo = persistenceManager.getObjectById(dnOid);
-                    persistentPojos.add(persistentPojo);
-                } catch(Exception ex) {
-                    persistentPojos.add(null);
-                }
-            }
-        }
-        Map<RootOid, Object> pojoByOid = zip(rootOids, persistentPojos);
-        return pojoByOid;
-    }
-
-    private static Map<RootOid, Object> zip(final List<RootOid> rootOids, final Collection<Object> pojos) {
-        final Map<RootOid,Object> pojoByOid = _Maps.newLinkedHashMap();
-        int i = 0;
-        for (final Object pojo : pojos) {
-            final RootOid rootOid = rootOids.get(i++);
-            pojoByOid.put(rootOid, pojo);
-        }
-        return pojoByOid;
-    }
-
-    @Deprecated
-    private Class<?> clsOf(final RootOid oid) {
-        final ObjectSpecification objectSpec = getSpecificationLoader().lookupBySpecIdElseLoad(oid.getObjectSpecId());
-        return objectSpec.getCorrespondingClass();
-    }
+//    @Override
+//    public Map<RootOid,Object> fetchPersistentPojos(final List<RootOid> rootOids) {
+//
+//        if(rootOids.isEmpty()) {
+//            return Collections.emptyMap();
+//        }
+//
+//        val specLoader = super.getSpecificationLoader();
+//        
+//        final List<Object> dnOids = new ArrayList<>(rootOids.size());
+//        for (val rootOid : rootOids) {
+//            final Object id = JdoObjectIdSerializer.toJdoObjectId(specLoader, rootOid);
+//            if(id instanceof SingleFieldIdentity) {
+//                dnOids.add(id);
+//            } else if (id instanceof String && ((String) id).contains("[OID]")) {
+//                final DatastoreIdImpl datastoreId = new DatastoreIdImpl((String)id);
+//                dnOids.add(datastoreId);
+//            } else {
+//                // application identity
+//                final DatastoreIdImpl datastoreId = new DatastoreIdImpl(clsOf(rootOid).getName(), id);
+//                dnOids.add(datastoreId);
+//            }
+//        }
+//        FetchPlan fetchPlan = persistenceManager.getFetchPlan();
+//        fetchPlan.addGroup(FetchGroup.DEFAULT);
+//        final List<Object> persistentPojos = new ArrayList<>(rootOids.size());
+//        try {
+//            final Collection<Object> pojos = uncheckedCast(persistenceManager.getObjectsById(dnOids, true));
+//            for (final Object pojo : pojos) {
+//                try {
+//                    persistentPojos.add(pojo);
+//                } catch(Exception ex) {
+//                    persistentPojos.add(null);
+//                }
+//            }
+//        } catch(NucleusObjectNotFoundException nonfe) {
+//            // at least one not found; fall back to loading one by one
+//            for (final Object dnOid : dnOids) {
+//                try {
+//                    final Object persistentPojo = persistenceManager.getObjectById(dnOid);
+//                    persistentPojos.add(persistentPojo);
+//                } catch(Exception ex) {
+//                    persistentPojos.add(null);
+//                }
+//            }
+//        }
+//        Map<RootOid, Object> pojoByOid = zip(rootOids, persistentPojos);
+//        return pojoByOid;
+//    }
+//
+//    private static Map<RootOid, Object> zip(final List<RootOid> rootOids, final Collection<Object> pojos) {
+//        final Map<RootOid,Object> pojoByOid = _Maps.newLinkedHashMap();
+//        int i = 0;
+//        for (final Object pojo : pojos) {
+//            final RootOid rootOid = rootOids.get(i++);
+//            pojoByOid.put(rootOid, pojo);
+//        }
+//        return pojoByOid;
+//    }
+//
+//    @Deprecated
+//    private Class<?> clsOf(final RootOid oid) {
+//        final ObjectSpecification objectSpec = getSpecificationLoader().lookupBySpecIdElseLoad(oid.getObjectSpecId());
+//        return objectSpec.getCorrespondingClass();
+//    }
 
 
     // -- REFRESH
@@ -661,19 +650,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         getEntityChangeTracker().recognizeUpdating(entity);
     }
 
-    /**
-     * makes sure the entity is known to Isis and is a root
-     * @param pojo
-     */
-    @Override
-    public void ensureRootObject(final Persistable pojo) {
-        final Oid oid = adapterFor(pojo).getOid();
-        if (!(oid instanceof RootOid)) {
-            throw new IsisException(MessageFormat.format("Not a RootOid: oid={0}, for {1}", oid, pojo));
-        }
-    }
-
-    @Override
+    @Override //XXX also provided by 'provider' module
     public EntityState getEntityState(@Nullable Object pojo) {
 
         // guard against misuse
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
index 6ffb988..be1a261 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
@@ -18,23 +18,42 @@
  */
 package org.apache.isis.persistence.jdo.integration.persistence;
 
+import javax.annotation.Nullable;
 import javax.jdo.listener.InstanceLifecycleEvent;
 
 import org.datanucleus.enhancement.Persistable;
 
+import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
+import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapter;
+import org.apache.isis.persistence.jdo.integration.objectadapter.PojoAdapter;
+
+import lombok.NonNull;
+import lombok.val;
+
 final class _Utils {
 
     @SuppressWarnings("unused")
     private static Object jdoObjectIdFor(InstanceLifecycleEvent event) {
-        Persistable persistenceCapable = _Utils.persistenceCapableFor(event);
+        Persistable persistenceCapable = _Utils.persistableFor(event);
         Object jdoObjectId = persistenceCapable.dnGetObjectId();
         return jdoObjectId;
     }
 
-    static Persistable persistenceCapableFor(InstanceLifecycleEvent event) {
+    static Persistable persistableFor(InstanceLifecycleEvent event) {
         return (Persistable)event.getSource();
     }
     
+    static boolean ensureRootObject(final Persistable pojo) {
+//        final Oid oid = adapterFor(pojo).getOid();
+//        if (!(oid instanceof RootOid)) {
+//            throw new IsisException(MessageFormat.format("Not a RootOid: oid={0}, for {1}", oid, pojo));
+//        }
+        return pojo!=null; // why would a Persistable ever be something different?
+    }
+    
     static boolean isJUnitTest() {
         for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
             if (element.getClassName().startsWith("org.junit.")) {
@@ -44,4 +63,42 @@ final class _Utils {
         return false;
     }
 
+    // -- LOW LEVEL
+    
+    @Nullable
+    static ObjectAdapter adapterFor(
+            final @NonNull ObjectManager objectManager, 
+            final @Nullable Object pojo) {
+
+        if(pojo == null) {
+            return null;
+        }
+
+        val adapter = objectManager.adapt(pojo);
+        val rootOid = objectManager.identifyObject(adapter);
+        val newAdapter = PojoAdapter.of(pojo, rootOid, 
+                objectManager.getMetaModelContext().getSpecificationLoader()); 
+                
+        injectServices(objectManager.getMetaModelContext().getServiceInjector(), newAdapter);
+        return newAdapter;
+    }
+    
+    @Nullable
+    static ManagedObject injectServices(
+            final @NonNull ServiceInjector serviceInjector,
+            final @Nullable ManagedObject adapter) {
+        
+        if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)) {
+            return adapter; 
+        }
+        
+        val spec = adapter.getSpecification();
+        if(spec==null 
+                || spec.isValue()) {
+            return adapter; // guard against value objects
+        }
+        serviceInjector.injectServicesInto(adapter.getPojo());
+        return adapter;
+    }
+    
 }
diff --git a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java b/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java
index 257ee1e..6efece9 100644
--- a/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java
+++ b/persistence/jdo/integration/src/test/java/org/apache/isis/persistence/jdo/integration/testing/PojoAdapterBuilder.java
@@ -21,6 +21,7 @@ package org.apache.isis.persistence.jdo.integration.testing;
 import java.util.Iterator;
 
 import org.apache.isis.commons.internal.base._Strings;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid.Factory;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
@@ -72,7 +73,7 @@ public class PojoAdapterBuilder {
         }, COLLECTION {
             @Override
             Oid oidFor(RootOid rootOid, ObjectSpecId objectSpecId, String collectionId) {
-                return Oid.Factory.parentedForTesting(rootOid, collectionId);
+                throw _Exceptions.illegalArgument("Parented Oids are no longer supported.");
             }
         }, VALUE {
             @Override


[isis] 04/04: ISIS-2033: remove ObjectAdapterContext (OMG YES!)

Posted by ah...@apache.org.
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

commit e224d885a7b9e59e30cd6b2818ad735238b0d4e3
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Dec 22 20:12:05 2020 +0100

    ISIS-2033: remove ObjectAdapterContext (OMG YES!)
---
 .../objectadapter/ObjectAdapterContext.java        | 150 ---------------------
 .../ObjectAdapterContext_NewIdentifier.java        |  64 ---------
 ...ObjectAdapterContext_ObjectAdapterProvider.java |  65 ---------
 .../objectadapter/ObjectAdapterProvider.java       |  37 -----
 .../persistence/IsisPersistenceSessionJdo.java     |   3 +-
 .../persistence/PersistenceSession.java            |   8 ++
 .../persistence/PersistenceSession5.java           |  19 +--
 .../jdo/integration/persistence/_Utils.java        |  91 ++++++++++---
 8 files changed, 89 insertions(+), 348 deletions(-)

diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
deleted file mode 100644
index c793907..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext.java
+++ /dev/null
@@ -1,150 +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.persistence.jdo.integration.objectadapter;
-
-import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.context.RuntimeContextBase;
-import org.apache.isis.persistence.jdo.integration.persistence.IsisPersistenceSessionJdo;
-
-import lombok.Getter;
-import lombok.NonNull;
-import lombok.val;
-import lombok.extern.log4j.Log4j2;
-
-/**
- * Encapsulate ObjectAdpater life-cycling.  
- *  
- * @since 2.0
- */
-@Log4j2
-final public class ObjectAdapterContext {
-
-    public static ObjectAdapterContext openContext(
-            MetaModelContext mmc,
-            IsisPersistenceSessionJdo persistenceSession) {
-        
-        val objectAdapterContext = 
-                new ObjectAdapterContext(mmc, persistenceSession);
-        objectAdapterContext.open();
-        return objectAdapterContext;
-    }
-
-    private final IsisPersistenceSessionJdo persistenceSession; 
-    @Getter private final SpecificationLoader specificationLoader;
-    private final ObjectAdapterContext_ObjectAdapterProvider objectAdapterProviderMixin;
-    private final ObjectAdapterContext_NewIdentifier newIdentifierMixin;
-    private final ServiceInjector serviceInjector;
-
-    private ObjectAdapterContext(
-            MetaModelContext mmc, 
-            IsisPersistenceSessionJdo persistenceSession) {
-
-        val runtimeContext = new RuntimeContextBase(mmc) {};
-
-        this.objectAdapterProviderMixin = new ObjectAdapterContext_ObjectAdapterProvider(this, runtimeContext);
-        this.newIdentifierMixin = new ObjectAdapterContext_NewIdentifier(persistenceSession, runtimeContext.getSpecificationLoader());
-
-        this.persistenceSession = persistenceSession;
-        this.specificationLoader = mmc.getSpecificationLoader();
-        this.serviceInjector = mmc.getServiceInjector();
-    }
-
-    // -- DEBUG
-
-    void printContextInfo(String msg) {
-        if(log.isDebugEnabled()) {
-            String id = Integer.toHexString(this.hashCode());
-            String session = ""+persistenceSession;
-            log.debug(String.format("%s id=%s session='%s'", msg, id, session));
-        }
-    }
-
-    // -- LIFE-CYCLING
-
-    private void open() {
-        printContextInfo("OPEN_");
-    }
-
-    public void close() {
-        printContextInfo("CLOSE");
-    }
-
-    // -- NEW IDENTIFIER
-
-    public RootOid createPersistentOrViewModelOid(Object pojo) {
-        return newIdentifierMixin.createPersistentOid(pojo);
-    }
-
-    // -- ADAPTER MANAGER LEGACY
-
-    public ManagedObject fetchPersistent(final Object pojo) {
-        if (persistenceSession.getJdoPersistenceManager().getObjectId(pojo) == null) {
-            return null;
-        }
-        final RootOid oid = createPersistentOrViewModelOid(pojo);
-        final ManagedObject adapter = recreatePojo(oid, pojo);
-        return adapter;
-    }
-
-    public ManagedObject recreatePojo(RootOid oid, Object recreatedPojo) {
-        
-        val spec = getSpecificationLoader().loadSpecification(recreatedPojo.getClass());
-        
-        final ManagedObject createdAdapter = createRootOrAggregatedAdapter(spec, oid, recreatedPojo);
-        return injectServices(createdAdapter);
-    }
-
-    // package private
-    ManagedObject injectServices(final @NonNull ManagedObject adapter) {
-        val spec = adapter.getSpecification();
-        if(spec==null 
-                || spec.isValue()) {
-            return adapter; // guard against value objects
-        }
-        val pojo = adapter.getPojo();
-        serviceInjector.injectServicesInto(pojo);
-        return adapter;
-    }
-
-    private ManagedObject createRootOrAggregatedAdapter(
-            final @NonNull ObjectSpecification spec,
-            final RootOid oid, 
-            final Object pojo) {
-        
-        if(oid instanceof RootOid) {
-            final RootOid rootOid = (RootOid) oid;
-            return ManagedObject.identified(spec, pojo, rootOid);
-        } 
-        throw _Exceptions.illegalArgument("Parented Oids are no longer supported, or cannot use Value Oid.");
-    }
-
-    // -- OBJECT ADAPTER PROVIDER SUPPORT
-
-    public ObjectAdapterProvider getObjectAdapterProvider() {
-        return objectAdapterProviderMixin;
-    }
-
-
-}
\ No newline at end of file
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_NewIdentifier.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_NewIdentifier.java
deleted file mode 100644
index 1fc6b2b..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_NewIdentifier.java
+++ /dev/null
@@ -1,64 +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.persistence.jdo.integration.objectadapter;
-
-import org.apache.isis.core.metamodel.adapter.oid.Oid;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.persistence.jdo.integration.persistence.PersistenceSession;
-
-import lombok.RequiredArgsConstructor;
-
-/**
- * package private mixin for ObjectAdapterContext
- * <p>
- * Responsibility: creates RootOids 
- * </p> 
- * @since 2.0
- */
-@RequiredArgsConstructor
-class ObjectAdapterContext_NewIdentifier {
-
-    private final PersistenceSession persistenceSession;
-    private final SpecificationLoader specificationLoader;
-
-    /**
-     * Return an equivalent {@link RootOid}, but being persistent.
-     *
-     * <p>
-     * It is the responsibility of the implementation to determine the new unique identifier.
-     * For example, the generator may simply assign a new value from a sequence, or a GUID;
-     * or, the generator may use the oid to look up the object and inspect the object in order
-     * to obtain an application-defined value.
-     *
-     * @param pojo - being persisted
-     */
-    final RootOid createPersistentOid(Object pojo) {
-
-        final ObjectSpecification spec = specificationLoader.loadSpecification(pojo.getClass());
-
-        final String identifier = persistenceSession.identifierFor(pojo);
-
-        final ObjectSpecId objectSpecId = spec.getSpecId();
-        return Oid.Factory.root(objectSpecId, identifier);
-    }
-
-}
\ No newline at end of file
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
deleted file mode 100644
index 3eb8b0a..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterContext_ObjectAdapterProvider.java
+++ /dev/null
@@ -1,65 +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.persistence.jdo.integration.objectadapter;
-
-import org.apache.isis.commons.internal.assertions._Assert;
-import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.runtime.context.RuntimeContext;
-
-import lombok.val;
-
-/**
- * package private mixin for ObjectAdapterContext
- * <p>
- * Responsibility: provides ObjectAdapterProvider implementation
- * </p> 
- * @since 2.0
- */
-class ObjectAdapterContext_ObjectAdapterProvider implements ObjectAdapterProvider {
-
-    private final ObjectAdapterContext objectAdapterContext;
-    private final ObjectManager objectManager; 
-
-    ObjectAdapterContext_ObjectAdapterProvider(
-            ObjectAdapterContext objectAdapterContext,
-            RuntimeContext runtimeContext) {
-
-        this.objectAdapterContext = objectAdapterContext;
-        this.objectManager = runtimeContext.getMetaModelContext().getObjectManager(); 
-    }
-
-    @Override
-    public ManagedObject adapterFor(Object pojo) {
-
-        if(pojo == null) {
-            return null;
-        }
-
-        val adapter = objectManager.adapt(pojo);
-        val rootOid = objectManager.identifyObject(adapter);
-        //val newAdapter = PojoAdapter.of(pojo, rootOid, objectAdapterContext.getSpecificationLoader());
-        
-        _Assert.assertEquals(rootOid, adapter.getRootOid().orElse(null));
-        
-        return objectAdapterContext.injectServices(adapter);
-    }
-
-
-}
\ No newline at end of file
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java
deleted file mode 100644
index 71d9297..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/objectadapter/ObjectAdapterProvider.java
+++ /dev/null
@@ -1,37 +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.persistence.jdo.integration.objectadapter;
-
-import javax.annotation.Nullable;
-
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-
-/**
- * 
- * @since 2.0
- *
- */
-public interface ObjectAdapterProvider {
-
-    /**
-     * @return standalone (value) or root adapter
-     */
-    @Nullable ManagedObject adapterFor(@Nullable Object pojo);
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisPersistenceSessionJdo.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisPersistenceSessionJdo.java
index b75e310..be12b30 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisPersistenceSessionJdo.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/IsisPersistenceSessionJdo.java
@@ -20,7 +20,6 @@ package org.apache.isis.persistence.jdo.integration.persistence;
 
 import java.util.List;
 
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapterProvider;
 import org.apache.isis.persistence.jdo.integration.persistence.command.PersistenceCommand;
 
 /**
@@ -28,7 +27,7 @@ import org.apache.isis.persistence.jdo.integration.persistence.command.Persisten
  * @since 2.0
  */
 public interface IsisPersistenceSessionJdo 
-extends PersistenceSession, ObjectAdapterProvider {
+extends PersistenceSession {
 
     void execute(List<PersistenceCommand> persistenceCommandList);
     
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java
index c49890d..6e0c62b 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession.java
@@ -21,10 +21,13 @@ package org.apache.isis.persistence.jdo.integration.persistence;
 import java.rmi.NoSuchObjectException;
 import java.util.Optional;
 
+import javax.annotation.Nullable;
+
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.repository.EntityState;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.commons.collections.Can;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
@@ -35,6 +38,7 @@ public interface PersistenceSession {
     // -------------------------------------------------------------------------------------------------
 
     TransactionService getTransactionService();
+    MetaModelContext getMetaModelContext();
 
     void open();
     void close();
@@ -43,6 +47,10 @@ public interface PersistenceSession {
         getTransactionService().flushTransaction();
     }
 
+    default ManagedObject adapterFor(@Nullable Object pojo) {
+        return _Utils.adapterFor(getMetaModelContext(), pojo);
+    }
+    
     /**
      * Forces a reload (refresh in JDO terminology) of the domain object
      */
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
index 94874bf..b71fc03 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/PersistenceSession5.java
@@ -50,7 +50,6 @@ import org.apache.isis.persistence.jdo.applib.exceptions.UnsupportedFindExceptio
 import org.apache.isis.persistence.jdo.applib.fixturestate.FixturesInstalledStateHolder;
 import org.apache.isis.persistence.jdo.integration.lifecycles.JdoStoreLifecycleListenerForIsis;
 import org.apache.isis.persistence.jdo.integration.lifecycles.LoadLifecycleListenerForIsis;
-import org.apache.isis.persistence.jdo.integration.objectadapter.ObjectAdapterContext;
 import org.apache.isis.persistence.jdo.integration.oid.JdoObjectIdSerializer;
 import org.apache.isis.persistence.jdo.integration.persistence.command.CreateObjectCommand;
 import org.apache.isis.persistence.jdo.integration.persistence.command.DestroyObjectCommand;
@@ -76,7 +75,6 @@ import lombok.extern.log4j.Log4j2;
 public class PersistenceSession5 extends IsisPersistenceSessionJdoBase
 implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
-    private ObjectAdapterContext objectAdapterContext;
     @Getter private final TransactionService transactionService;
     private Runnable unregisterLifecycleListeners;
 
@@ -121,8 +119,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
                 PersistenceQueryFindUsingApplibQueryDefault.class,
                 new PersistenceQueryFindUsingApplibQueryProcessor(this));
 
-        objectAdapterContext = ObjectAdapterContext.openContext(super.metaModelContext, this);
-
         // install JDO specific entity change listeners ...
         
         val loadLifecycleListener = new LoadLifecycleListenerForIsis();
@@ -174,8 +170,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
                     "close: failed to close JDO persistenceManager; continuing to avoid memory leakage");
         }
 
-        objectAdapterContext.close();
-
         this.state = State.CLOSED;
     }
 
@@ -575,8 +569,8 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 //        // viewModel's #viewModelMemento might need to use services
 //        serviceInjector.injectServicesInto(pojo); //redundant
 
-        final RootOid originalOid = objectAdapterContext.createPersistentOrViewModelOid(pojo);
-        final ManagedObject entity = objectAdapterContext.recreatePojo(originalOid, pojo);
+        final RootOid originalOid = _Utils.createRootOid(getMetaModelContext(), this, pojo);
+        final ManagedObject entity = _Utils.recreatePojo(getMetaModelContext(), originalOid, pojo);
 
         getEntityChangeTracker().recognizeLoaded(entity);
 
@@ -629,7 +623,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
     @Override
     public void enlistUpdatingAndInvokeIsisUpdatingCallback(final Persistable pojo) {
-        val entity = objectAdapterContext.fetchPersistent(pojo);
+        val entity = _Utils.fetchPersistent(getMetaModelContext(), this, pojo);
         if (entity == null) {
             throw _Exceptions
                 .noSuchElement("DN could not find objectId for pojo (unexpected); pojo=[%s]", pojo);
@@ -639,7 +633,7 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
 
     @Override
     public void invokeIsisUpdatedCallback(Persistable pojo) {
-        val entity = objectAdapterContext.fetchPersistent(pojo);
+        val entity = _Utils.fetchPersistent(getMetaModelContext(), this, pojo);
         if (entity == null) {
             throw _Exceptions
                 .noSuchElement("DN could not find objectId for pojo (unexpected); pojo=[%s]", pojo);
@@ -682,11 +676,6 @@ implements IsisLifecycleListener.PersistenceSessionLifecycleManagement {
         }
         return false;
     }
-
-    @Override
-    public ManagedObject adapterFor(Object pojo) {
-        return objectAdapterContext.getObjectAdapterProvider().adapterFor(pojo);
-    }
     
     // -- HELPER
     
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
index 549f6d0..dfb3878 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/_Utils.java
@@ -23,31 +23,25 @@ import javax.jdo.listener.InstanceLifecycleEvent;
 
 import org.datanucleus.enhancement.Persistable;
 
-import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
+import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 import lombok.NonNull;
 import lombok.val;
 
 final class _Utils {
 
-    @SuppressWarnings("unused")
-    private static Object jdoObjectIdFor(InstanceLifecycleEvent event) {
-        Persistable persistenceCapable = _Utils.persistableFor(event);
-        Object jdoObjectId = persistenceCapable.dnGetObjectId();
-        return jdoObjectId;
-    }
-
     static Persistable persistableFor(InstanceLifecycleEvent event) {
         return (Persistable)event.getSource();
     }
     
     static boolean ensureRootObject(final Persistable pojo) {
-//        final Oid oid = adapterFor(pojo).getOid();
-//        if (!(oid instanceof RootOid)) {
-//            throw new IsisException(MessageFormat.format("Not a RootOid: oid={0}, for {1}", oid, pojo));
-//        }
         return pojo!=null; // why would a Persistable ever be something different?
     }
     
@@ -60,11 +54,23 @@ final class _Utils {
         return false;
     }
 
-    // -- LOW LEVEL
+    @Nullable
+    static ManagedObject adapterFor(
+            final MetaModelContext mmc,
+            final Object pojo) {
+        
+        if(pojo == null) {
+            return null;
+        }
+        
+        val objectManager = mmc.getObjectManager();
+        val adapter = objectManager.adapt(pojo);
+        return injectServices(mmc, adapter);
+    }
     
     @Nullable
     static ManagedObject injectServices(
-            final @NonNull ServiceInjector serviceInjector,
+            final @NonNull MetaModelContext mmc,
             final @Nullable ManagedObject adapter) {
         
         if(ManagedObjects.isNullOrUnspecifiedOrEmpty(adapter)) {
@@ -76,8 +82,63 @@ final class _Utils {
                 || spec.isValue()) {
             return adapter; // guard against value objects
         }
-        serviceInjector.injectServicesInto(adapter.getPojo());
+        mmc.getServiceInjector().injectServicesInto(adapter.getPojo());
+        return adapter;
+    }
+    
+    static RootOid createRootOid(
+            final @NonNull MetaModelContext mmc,
+            final @NonNull IsisPersistenceSessionJdo persistenceSession, // TODO don't depend on session
+            final @NonNull Object pojo) {
+
+        val spec = mmc.getSpecification(pojo.getClass());
+
+        final String identifier = persistenceSession.identifierFor(pojo);
+
+        final ObjectSpecId objectSpecId = spec.getSpecId();
+        return Oid.Factory.root(objectSpecId, identifier);
+    }
+
+    static ManagedObject recreatePojo(
+            final @NonNull MetaModelContext mmc,
+            final @NonNull RootOid oid,
+            final @NonNull Object recreatedPojo) {
+        
+        val spec = mmc.getSpecification(recreatedPojo.getClass());
+        
+        final ManagedObject createdAdapter = createRootOrAggregatedAdapter(spec, oid, recreatedPojo);
+        return injectServices(mmc, createdAdapter);
+    }
+
+    static ManagedObject fetchPersistent(
+            final @NonNull MetaModelContext mmc,
+            final @NonNull IsisPersistenceSessionJdo persistenceSession, // TODO don't depend on session
+            final Object pojo) {
+        if (persistenceSession.getJdoPersistenceManager().getObjectId(pojo) == null) {
+            return null;
+        }
+        final RootOid oid = createRootOid(mmc, persistenceSession, pojo);
+        final ManagedObject adapter = recreatePojo(mmc, oid, pojo);
         return adapter;
     }
     
+    private static ManagedObject createRootOrAggregatedAdapter(
+            final @NonNull ObjectSpecification spec,
+            final RootOid oid, 
+            final Object pojo) {
+        
+        if(oid instanceof RootOid) {
+            final RootOid rootOid = (RootOid) oid;
+            return ManagedObject.identified(spec, pojo, rootOid);
+        } 
+        throw _Exceptions.illegalArgument("Parented Oids are no longer supported, or cannot use Value Oid.");
+    }
+    
+//  @SuppressWarnings("unused")
+//  private static Object jdoObjectIdFor(InstanceLifecycleEvent event) {
+//      final Persistable persistable = persistableFor(event);
+//      final Object jdoObjectId = persistable.dnGetObjectId();
+//      return jdoObjectId;
+//  }
+    
 }