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/01/14 20:30:31 UTC

[isis] branch 2263-Update_RO_spec updated: ISIS-2263: remove the oid state (transient/viewmodel/persistent)

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

ahuber pushed a commit to branch 2263-Update_RO_spec
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/2263-Update_RO_spec by this push:
     new d95e012  ISIS-2263: remove the oid state (transient/viewmodel/persistent)
d95e012 is described below

commit d95e0125ceb5f18a4dfb8b93494bb9931e1202ab
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jan 14 21:30:21 2020 +0100

    ISIS-2263: remove the oid state (transient/viewmodel/persistent)
---
 .../isis/applib/mixins/dto/DtoMappingHelper.java   |  17 ----
 .../isis/applib/services/bookmark/Bookmark.java    |  66 +------------
 .../isis/applib/services/hint/HintStore.java       |   3 +-
 .../org/apache/isis/schema/common/common-2.0.xsd   |  14 +--
 .../isis/core/metamodel/adapter/oid/Oid.java       |  41 ++++----
 .../core/metamodel/adapter/oid/Oid_Marshaller.java |  29 ++----
 .../core/metamodel/adapter/oid/Oid_Parented.java   |  17 +---
 .../isis/core/metamodel/adapter/oid/Oid_Root.java  |  41 ++------
 .../isis/core/metamodel/adapter/oid/Oid_Value.java |  17 +---
 .../isis/core/metamodel/adapter/oid/RootOid.java   |   2 +
 .../identify/ObjectIdentifier_builtinHandlers.java |   2 +-
 .../isis/core/metamodel/spec/ManagedObject.java    |  24 ++---
 .../adapter/oid/OidMarshallerTest_marshall.java    |  13 +--
 .../adapter/oid/OidMarshallerTest_unmarshal.java   |   5 -
 .../core/metamodel/adapter/oid/OidVersionTest.java |  20 ++--
 ...dDefaultTest_valueSemantics_whenPersistent.java |  12 +--
 ...idDefaultTest_valueSemantics_whenTransient.java |  46 ---------
 .../metamodel/adapter/oid/RootOidTest_create.java  |   6 --
 .../runtime/persistence/adapter/PojoAdapter.java   |  20 +---
 ...ctAdapterContext_ObjectAdapterByIdProvider.java | 106 +++++++++++----------
 .../transaction/PojoAdapterBuilder.java            |   2 +-
 21 files changed, 131 insertions(+), 372 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
index f0fbb7b..66dd803 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/mixins/dto/DtoMappingHelper.java
@@ -29,8 +29,6 @@ import org.springframework.stereotype.Service;
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
-import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.schema.common.v2.BookmarkObjectState;
 import org.apache.isis.schema.common.v2.OidDto;
 
 @Service
@@ -52,7 +50,6 @@ public class DtoMappingHelper {
         if (reference != null) {
             argValue = new OidDto();
             argValue.setObjectType(reference.getObjectType());
-            argValue.setObjectState(bookmarkObjectStateOf(reference));
             argValue.setObjectIdentifier(reference.getIdentifier());
         } else {
             argValue = null;
@@ -60,19 +57,5 @@ public class DtoMappingHelper {
         return argValue;
     }
 
-    private static BookmarkObjectState bookmarkObjectStateOf(final Bookmark bookmark) {
-        switch (bookmark.getObjectState()) {
-        case PERSISTENT:
-            return BookmarkObjectState.PERSISTENT;
-        case TRANSIENT:
-            return BookmarkObjectState.TRANSIENT;
-        case VIEW_MODEL:
-            return BookmarkObjectState.VIEW_MODEL;
-        default:
-            throw _Exceptions.illegalArgument("objectState '%s' not recognized", bookmark.getObjectState());
-        }
-
-    }
-
     
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index df9ebff..cc31cbc 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -24,8 +24,6 @@ import java.util.Objects;
 
 import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.core.commons.internal.base._Strings;
-import org.apache.isis.core.commons.internal.exceptions._Exceptions;
-import org.apache.isis.schema.common.v2.BookmarkObjectState;
 import org.apache.isis.schema.common.v2.OidDto;
 
 import lombok.Getter;
@@ -46,58 +44,7 @@ public class Bookmark implements Serializable {
     
     @Getter private final String objectType;
     @Getter private final String identifier;
-    
-    @Getter private final ObjectState objectState;
-    
-    /**
-     * @deprecated since 2.0, only kept for compatibility with common schema v1.1
-     */
-    @Deprecated
-    public enum ObjectState {
-        PERSISTENT("", BookmarkObjectState.PERSISTENT),
-        TRANSIENT("!", BookmarkObjectState.TRANSIENT), // same as OidMarshaller
-        VIEW_MODEL("*", BookmarkObjectState.VIEW_MODEL); // same as OidMarshaller
-
-        @Getter private final String code;
-        
-        private final BookmarkObjectState bookmarkObjectState;
-
-        
-        ObjectState(
-                final String code,
-                final BookmarkObjectState bookmarkObjectState) {
-            this.code = code;
-            this.bookmarkObjectState = bookmarkObjectState;
-        }
-
-        public static ObjectState from(final String objectType) {
-            if(objectType.startsWith(TRANSIENT.code)) return TRANSIENT;
-            if(objectType.startsWith(VIEW_MODEL.code)) return VIEW_MODEL;
-            return PERSISTENT;
-        }
-
-        public static ObjectState from(final BookmarkObjectState objectState) {
-            if(objectState == null) {
-                // persistent is assumed if not specified
-                return ObjectState.PERSISTENT;
-            }
-            switch (objectState) {
-            case TRANSIENT:
-                return ObjectState.TRANSIENT;
-            case VIEW_MODEL:
-                return ObjectState.VIEW_MODEL;
-            case PERSISTENT:
-                return ObjectState.PERSISTENT;
-            default:
-                throw _Exceptions.unmatchedCase(objectState);
-            }
-        }
 
-        @Deprecated
-        public BookmarkObjectState toBookmarkState() {
-            return bookmarkObjectState;
-        }
-    }
 
     public static Bookmark create(String str) {
         return str != null? new Bookmark(str): null;
@@ -109,19 +56,13 @@ public class Bookmark implements Serializable {
         oidDto.setType(getObjectType());
         oidDto.setId(getIdentifier());
 
-        // persistent is assumed if not specified...
-        final BookmarkObjectState bookmarkState = getObjectState().toBookmarkState();
-        oidDto.setObjectState(bookmarkState != BookmarkObjectState.PERSISTENT ? bookmarkState : null);
-
         return oidDto;
     }
 
     public static Bookmark from(OidDto oidDto) {
-        val bookmarkObjectState = oidDto.getObjectState();
-        val objectState = ObjectState.from(bookmarkObjectState);
         val objectType = coalesce(oidDto.getType(), oidDto.getObjectType());
         val objectId = coalesce(oidDto.getId(), oidDto.getObjectIdentifier());
-        val bookmark = new Bookmark(objectState.getCode() + objectType, objectId);
+        val bookmark = new Bookmark(objectType, objectId);
         return bookmark;
     }
 
@@ -137,8 +78,7 @@ public class Bookmark implements Serializable {
     }
 
     public Bookmark(final String objectType, final String identifier) {
-        this.objectState = ObjectState.from(objectType);
-        this.objectType = objectState != ObjectState.PERSISTENT ? objectType.substring(1): objectType;
+        this.objectType = objectType;
         this.identifier = identifier;
     }
 
@@ -173,7 +113,7 @@ public class Bookmark implements Serializable {
      */
     @Override
     public String toString() {
-        return objectState.getCode() + objectType + SEPARATOR + identifier;
+        return objectType + SEPARATOR + identifier;
     }
 
     // -- HELPER
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
index bee96bb..728e7d4 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/hint/HintStore.java
@@ -43,8 +43,7 @@ public interface HintStore {
          * Similar to {@link #toString()}, but using {@link #hintId} rather than {@link #identifier}.
          */
         public String toStringUsingHintId() {
-            return super.getObjectState().getCode() 
-                    + super.getObjectType() 
+            return super.getObjectType() 
                     + SEPARATOR 
                     + hintId;
         }
diff --git a/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd b/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd
index 1eeb6a6..d36a0ba 100644
--- a/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd
+++ b/api/schema/src/main/resources/org/apache/isis/schema/common/common-2.0.xsd
@@ -69,12 +69,7 @@
                     <xs:documentation>Deprecated, use the 'id' attribute instead.</xs:documentation>
                 </xs:annotation>
             </xs:element>
-        </xs:sequence>
-        <xs:attribute name="objectState" type="bookmarkObjectState">
-            <xs:annotation>
-                <xs:documentation>In previous versions of this schema the 'objectState' attribute was defaulted, but is now assumed to be 'persistent'</xs:documentation>
-            </xs:annotation>
-        </xs:attribute>
+        </xs:sequence>
         <xs:attribute name="type" type="xs:string"/>
         <xs:attribute name="id" type="xs:string"/>
     </xs:complexType>
@@ -132,13 +127,6 @@
         </xs:sequence>
     </xs:complexType>
 
-    <xs:simpleType name="bookmarkObjectState">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="persistent"/>
-            <xs:enumeration value="transient"/>
-            <xs:enumeration value="viewModel"/>
-        </xs:restriction>
-    </xs:simpleType>
 
     <xs:simpleType name="valueType">
         <xs:restriction base="xs:string">
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 4e53f3f..bd53147 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
@@ -41,24 +41,16 @@ public interface Oid extends Serializable {
      */
     String enString();
 
-    /**
-     * Flags whether this OID is for a transient (not-yet-persisted) object,
-     * or a view model object, or for a persistent object.
-     *
-     * <p>
-     * In the case of an {@link ParentedOid}, is determined by the state
-     * of its {@link ParentedOid#getParentOid() root}'s {@link RootOid#isTransient() state}.
-     */
-    boolean isTransient();
-
-    boolean isViewModel();
-
-    boolean isPersistent();
-
     default boolean isValue() {
         return false; // default, only overridden by Oid_Value
     }
     
+    @Deprecated
+    default boolean isTransient() {
+        return false;
+    }
+
+    
     /**
      * {@link ObjectSpecId} of the domain object this instance is representing, or when parented,
      * the ObjectSpecId of the parent domain object. When representing a value returns {@code null}.   
@@ -109,22 +101,23 @@ public interface Oid extends Serializable {
         public static RootOid ofBookmark(Bookmark bookmark) {
             return Oid_Root.of(
                     ObjectSpecId.of(bookmark.getObjectType()), 
-                    bookmark.getIdentifier(), 
-                    bookmark.getObjectState());
+                    bookmark.getIdentifier());
         }
 
-        public static RootOid viewmodelOf(ObjectSpecId objectSpecId, String mementoStr) {
-            return Oid_Root.of(objectSpecId, mementoStr, Bookmark.ObjectState.VIEW_MODEL);
+        public static RootOid of(ObjectSpecId objectSpecId, String mementoStr) {
+            return Oid_Root.of(objectSpecId, mementoStr);
         }
-
-        public static RootOid transientOf(ObjectSpecId objectSpecId, String identifier) {
-            return Oid_Root.of(objectSpecId, identifier, Bookmark.ObjectState.TRANSIENT);
+        
+        @Deprecated
+        public static RootOid persistentOf(ObjectSpecId objectSpecId, String mementoStr) {
+            return of(objectSpecId, mementoStr);
         }
 
-        public static RootOid persistentOf(ObjectSpecId objectSpecId, String identifier) {
-            return Oid_Root.of(objectSpecId, identifier, Bookmark.ObjectState.PERSISTENT);
+        @Deprecated
+        public static RootOid transientOf(ObjectSpecId objectSpecId, String identifier) {
+            return of(objectSpecId, identifier);
         }
-
+        
         // -- PARENTED COLLECTIONS
 
         public static ParentedOid parentedOfOneToMany(RootOid parentRootOid, OneToManyAssociation oneToMany) {
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 d7512f5..f76e451 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
@@ -24,7 +24,6 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
-import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.internal.assertions._Assert;
 import org.apache.isis.core.commons.internal.base._Casts;
 import org.apache.isis.core.commons.internal.base._Strings;
@@ -88,14 +87,10 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
 
     private Oid_Marshaller(){}
 
-    // -- public constants
-    public static final String VIEWMODEL_INDICATOR =
-            Bookmark.ObjectState.VIEW_MODEL.getCode(); // "*"
-
-
-    // -- private constants
-    private static final String TRANSIENT_INDICATOR =
-            Bookmark.ObjectState.TRANSIENT.getCode() ; // "!"
+    @Deprecated
+    private static final String VIEWMODEL_INDICATOR = "*";
+    @Deprecated
+    private static final String TRANSIENT_INDICATOR = "!";
 
     private static final String SEPARATOR = ":";
     private static final String SEPARATOR_NESTING = "~";
@@ -147,15 +142,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
             throw _Exceptions.illegalArgument("Could not parse OID '" + oidStr + "'; should match pattern: " + OIDSTR_PATTERN.pattern());
         }
 
-        final String isTransientOrViewModelStr = getGroup(matcher, 3);
-        final Bookmark.ObjectState state;
-        if("!".equals(isTransientOrViewModelStr)) {
-            state = Bookmark.ObjectState.TRANSIENT;
-        } else if("*".equals(isTransientOrViewModelStr)) {
-            state = Bookmark.ObjectState.VIEW_MODEL;
-        } else {
-            state = Bookmark.ObjectState.PERSISTENT;
-        }
+        final String isTransientOrViewModelStr = getGroup(matcher, 3); // deprecated
 
         final String rootObjectType = getGroup(matcher, 4);
         final String rootIdentifier = getGroup(matcher, 5);
@@ -184,7 +171,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
             if(aggregateOidParts.isEmpty()) {
                 ensureCorrectType(oidStr, requestedType, RootOid.class);
                 return _Casts.uncheckedCast(
-                        Oid_Root.of(ObjectSpecId.of(rootObjectType), rootIdentifier, state));
+                        Oid_Root.of(ObjectSpecId.of(rootObjectType), rootIdentifier));
             } else {
                 throw _Exceptions.illegalArgument("Aggregated Oids are no longer supported");
             }
@@ -240,9 +227,7 @@ final class Oid_Marshaller implements Oid.Marshaller, Oid.Unmarshaller {
     @Override
     public final String marshal(RootOid rootOid) {
         _Assert.assertFalse("can not marshal values", rootOid.isValue());
-        final String transientIndicator = rootOid.isTransient()? TRANSIENT_INDICATOR : "";
-        final String viewModelIndicator = rootOid.isViewModel()? VIEWMODEL_INDICATOR : "";
-        return transientIndicator + viewModelIndicator + rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
+        return rootOid.getObjectSpecId() + SEPARATOR + rootOid.getIdentifier();
     }
 
     @Override
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
index dc1996a..51fe71b 100644
--- 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
@@ -30,7 +30,7 @@ import static org.apache.isis.core.metamodel.adapter.oid.Oid.unmarshaller;
 
 final class Oid_Parented implements ParentedOid {
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 2L;
 
     private final String oneToManyId;
     private final int hashCode;
@@ -58,21 +58,6 @@ final class Oid_Parented implements ParentedOid {
         return getParentOid().getObjectSpecId();
     }
 
-    @Override
-    public boolean isTransient() {
-        return getParentOid().isTransient();
-    }
-
-    @Override
-    public boolean isViewModel() {
-        return getParentOid().isViewModel();
-    }
-
-    @Override
-    public boolean isPersistent() {
-        return getParentOid().isPersistent();
-    }
-
     public static Oid_Parented deString(String oidStr) {
         return unmarshaller().unmarshal(oidStr, Oid_Parented.class);
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
index e07a522..42036f7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Root.java
@@ -24,7 +24,6 @@ import java.util.Objects;
 import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.core.commons.internal.url.UrlDecoderUtil;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.schema.common.v2.BookmarkObjectState;
 import org.apache.isis.schema.common.v2.OidDto;
 
 import static org.apache.isis.core.commons.internal.base._With.requires;
@@ -33,30 +32,26 @@ import lombok.val;
 
 final class Oid_Root implements RootOid {
 
-    private final static long serialVersionUID = 2L;
+    private final static long serialVersionUID = 3L;
 
     private final ObjectSpecId objectSpecId;
     private final String identifier;
-    private final Bookmark.ObjectState state;
     private final int hashCode;
 
     public static Oid_Root of(
             ObjectSpecId objectSpecId, 
-            String identifier, 
-            Bookmark.ObjectState state) {
+            String identifier) {
 
-        return new Oid_Root(objectSpecId, identifier, state);
+        return new Oid_Root(objectSpecId, identifier);
     }
 
-    private Oid_Root(ObjectSpecId objectSpecId, String identifier, Bookmark.ObjectState state) {
+    private Oid_Root(ObjectSpecId objectSpecId, String identifier) {
 
         requires(objectSpecId, "objectSpecId");
         requires(identifier, "identifier");
-        requires(state, "state");
 
         this.objectSpecId = objectSpecId;
         this.identifier = identifier;
-        this.state = state;
         this.hashCode = calculateHash();
 
     }
@@ -88,23 +83,8 @@ final class Oid_Root implements RootOid {
     }
 
     @Override
-    public boolean isTransient() {
-        return state == Bookmark.ObjectState.TRANSIENT;
-    }
-
-    @Override
-    public boolean isViewModel() {
-        return state == Bookmark.ObjectState.VIEW_MODEL;
-    }
-
-    @Override
-    public boolean isPersistent() {
-        return state == Bookmark.ObjectState.PERSISTENT;
-    }
-
-    @Override
     public Bookmark asBookmark() {
-        val objectType = state.getCode() + getObjectSpecId().asString();
+        val objectType = getObjectSpecId().asString();
         val identifier = getIdentifier();
         return new Bookmark(objectType, identifier);
     }
@@ -117,12 +97,6 @@ final class Oid_Root implements RootOid {
         oidDto.setType(getObjectSpecId().asString());
         oidDto.setId(getIdentifier());
 
-        val bookmarkState = state.toBookmarkState();
-        oidDto.setObjectState(
-                bookmarkState != BookmarkObjectState.PERSISTENT 
-                ? bookmarkState  
-                        : null); // persistent is assumed if not specified...
-
         return oidDto;
     }
 
@@ -143,8 +117,7 @@ final class Oid_Root implements RootOid {
 
     public boolean equals(final Oid_Root other) {
         return Objects.equals(objectSpecId, other.getObjectSpecId()) 
-                && Objects.equals(identifier, other.getIdentifier())
-                && Objects.equals(state, other.state);
+                && Objects.equals(identifier, other.getIdentifier());
     }
 
     @Override
@@ -160,7 +133,7 @@ final class Oid_Root implements RootOid {
     // -- HELPER
 
     private int calculateHash() {
-        return Objects.hash(objectSpecId, identifier, state);
+        return Objects.hash(objectSpecId, identifier);
     }
 
 
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
index 2e4bcc8..18a820d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid_Value.java
@@ -25,7 +25,7 @@ import org.apache.isis.schema.common.v2.OidDto;
 
 final class Oid_Value implements RootOid {
 
-    private final static long serialVersionUID = 1L;
+    private final static long serialVersionUID = 2L;
 
     static final Oid_Value INSTANCE = new Oid_Value();
 
@@ -40,21 +40,6 @@ final class Oid_Value implements RootOid {
     }
 
     @Override
-    public boolean isTransient() {
-        return false;
-    }
-
-    @Override
-    public boolean isViewModel() {
-        return false;
-    }
-
-    @Override
-    public boolean isPersistent() {
-        return false;
-    }
-
-    @Override
     public ObjectSpecId getObjectSpecId() {
         return null;
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
index 72eccd1..4ac4b8d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOid.java
@@ -42,5 +42,7 @@ public interface RootOid extends Oid {
         return Oid.unmarshaller().unmarshal(oidStr, RootOid.class);
     }
 
+    
+
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java
index 104cf7b..28781e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/objectmanager/identify/ObjectIdentifier_builtinHandlers.java
@@ -114,7 +114,7 @@ class ObjectIdentifier_builtinHandlers {
             val spec = managedObject.getSpecification();
             val recreatableObjectFacet = spec.getFacet(ViewModelFacet.class);
             val identifier = recreatableObjectFacet.memento(managedObject.getPojo());
-            return Oid.Factory.viewmodelOf(spec.getSpecId(), identifier);
+            return Oid.Factory.of(spec.getSpecId(), identifier);
         }
 
     }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
index 1c86790..e1195dd 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ManagedObject.java
@@ -563,13 +563,15 @@ public interface ManagedObject {
     }
     
     static EntityState _entityState(ManagedObject adapter) {
-
-        if(adapter==null || adapter.getPojo()==null) {
-            return null;
+        if(adapter==null) {
+            return EntityState.not_Persistable;
         }
+        return _entityState(adapter.getSpecification(), adapter.getPojo());
+    }
+    
+    static EntityState _entityState(ObjectSpecification spec, Object pojo) {
 
-        val spec = adapter.getSpecification();
-        if(!spec.isEntity()) {
+        if(spec==null || pojo==null || !spec.isEntity()) {
             return EntityState.not_Persistable;
         }
 
@@ -578,8 +580,9 @@ public interface ManagedObject {
             throw _Exceptions.unrecoverable("Entity types must have an EntityFacet");
         }
 
-        return entityFacet.getEntityState(adapter.getPojo());
+        return entityFacet.getEntityState(pojo);
     }
+    
 
     static boolean _isDestroyed(ManagedObject adapter) {
         return _entityState(adapter) == EntityState.persistable_Destroyed;
@@ -598,17 +601,14 @@ public interface ManagedObject {
                 return;
             }
 
-            val oid = ManagedObject._identify(second);
-
-            if(oid.isTransient()) {
-
-                // TODO: I've never seen this exception, and in any case DataNucleus supports persistence-by-reachability; so probably not required
+            val entityState = _entityState(second);
+            if(entityState != EntityState.persistable_Attached) {
                 throw _Exceptions.illegalArgument(
                         "can't set a reference to a transient object [%s] from a persistent one [%s]",
                         second,
                         first.titleString(null));
             }
-
+            
         }
 
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
index cded897..b7bd6e8 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshall.java
@@ -37,14 +37,15 @@ public class OidMarshallerTest_marshall {
 
     @Test
     public void rootOid() {
-        final String marshal = oidMarshaller.marshal(Oid.Factory.persistentOf(ObjectSpecId.of("CUS"),  "123"));
+        final String marshal = oidMarshaller.marshal(Oid.Factory.of(ObjectSpecId.of("CUS"),  "123"));
         assertThat(marshal, equalTo("CUS:123"));
     }
 
-    @Test
-    public void rootOid_transient() {
-        final String marshal = oidMarshaller.marshal(Oid.Factory.transientOf(ObjectSpecId.of("CUS"),  "123"));
-        assertThat(marshal, equalTo("!CUS:123"));
-    }
+//deprecated    
+//    @Test
+//    public void rootOid_transient() {
+//        final String marshal = oidMarshaller.marshal(Oid.Factory.transientOf(ObjectSpecId.of("CUS"),  "123"));
+//        assertThat(marshal, equalTo("!CUS:123"));
+//    }
 
 }
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 2201d47..5124762 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
@@ -69,7 +69,6 @@ public class OidMarshallerTest_unmarshal {
         final String oidStr = "CUS:123";
 
         final RootOid rootOid = oidMarshaller.unmarshal(oidStr, RootOid.class);
-        assertThat(rootOid.isTransient(), is(false));
         assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
         assertThat(rootOid.getIdentifier(), is("123"));
 
@@ -82,7 +81,6 @@ public class OidMarshallerTest_unmarshal {
         final String oidStr = "com.planchase.ClassName:8";
 
         final RootOid rootOid = oidMarshaller.unmarshal(oidStr, RootOid.class);
-        assertThat(rootOid.isTransient(), is(false));
         assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("com.planchase.ClassName")));
         assertThat(rootOid.getIdentifier(), is("8"));
 
@@ -104,7 +102,6 @@ public class OidMarshallerTest_unmarshal {
         final String oidStr = "!CUS:123";
 
         final RootOid rootOid = oidMarshaller.unmarshal(oidStr, RootOid.class);
-        assertThat(rootOid.isTransient(), is(true));
         assertThat(rootOid.getObjectSpecId(), is(ObjectSpecId.of("CUS")));
         assertThat(rootOid.getIdentifier(), is("123"));
 
@@ -117,7 +114,6 @@ public class OidMarshallerTest_unmarshal {
         final String oidStr = "CUS:123$items";
 
         final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
-        assertThat(collectionOid.isTransient(), is(false));
         assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("CUS:123", RootOid.class)));
         assertThat(collectionOid.getName(), is("items"));
 
@@ -130,7 +126,6 @@ public class OidMarshallerTest_unmarshal {
         final String oidStr = "!CUS:123$items";
 
         final ParentedOid collectionOid = oidMarshaller.unmarshal(oidStr, ParentedOid.class);
-        assertThat(collectionOid.isTransient(), is(true));
         assertThat(collectionOid.getParentOid(), is(oidMarshaller.unmarshal("!CUS:123", RootOid.class)));
         assertThat(collectionOid.getName(), is("items"));
 
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
index fd2377a..fda7726 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
@@ -36,32 +36,24 @@ public class OidVersionTest  {
 
     @Test
     public void whenEquivalent() throws Exception {
-        oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
-        oid2 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
+        oid1 = Oid.Factory.of(cusObjectSpecId, "123");
+        oid2 = Oid.Factory.of(cusObjectSpecId, "123");
 
         assertThat(oid1, is(equalTo(oid2)));
     }
 
     @Test
     public void whenNotEquivalentById() throws Exception {
-        oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
-        oid2 = Oid.Factory.persistentOf(cusObjectSpecId, "124");
+        oid1 = Oid.Factory.of(cusObjectSpecId, "123");
+        oid2 = Oid.Factory.of(cusObjectSpecId, "124");
 
         assertThat(oid1, is(not(equalTo(oid2))));
     }
 
     @Test
     public void whenNotEquivalentByObjectSpecId() throws Exception {
-        oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
-        oid2 = Oid.Factory.persistentOf(ordObjectSpecId, "123");
-
-        assertThat(oid1, is(not(equalTo(oid2))));
-    }
-
-    @Test
-    public void whenNotEquivalentByState() throws Exception {
-        oid1 = Oid.Factory.persistentOf(cusObjectSpecId, "123");
-        oid2 = Oid.Factory.transientOf(cusObjectSpecId, "123");
+        oid1 = Oid.Factory.of(cusObjectSpecId, "123");
+        oid2 = Oid.Factory.of(ordObjectSpecId, "123");
 
         assertThat(oid1, is(not(equalTo(oid2))));
     }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
index 7fd4921..d2f1fd3 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenPersistent.java
@@ -29,17 +29,17 @@ public class RootOidDefaultTest_valueSemantics_whenPersistent extends ValueTypeC
     @Override
     protected List<RootOid> getObjectsWithSameValue() {
         return Arrays.asList(
-                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
-                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
-                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"));
+                Oid.Factory.of(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.of(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.of(ObjectSpecId.of("CUS"), "123"));
     }
 
     @Override
     protected List<RootOid> getObjectsWithDifferentValue() {
         return Arrays.asList(
-                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
-                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "124"),
-                Oid.Factory.persistentOf(ObjectSpecId.of("CUX"), "123"));
+                //Oid.Factory.of(ObjectSpecId.of("CUS"), "123"),
+                Oid.Factory.of(ObjectSpecId.of("CUS"), "124"),
+                Oid.Factory.of(ObjectSpecId.of("CUX"), "123"));
     }
 
 }
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.java
deleted file mode 100644
index 327d03c..0000000
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_valueSemantics_whenTransient.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.core.metamodel.adapter.oid;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.unittestsupport.value.ValueTypeContractTestAbstract;
-
-public class RootOidDefaultTest_valueSemantics_whenTransient extends ValueTypeContractTestAbstract<RootOid> {
-
-    @Override
-    protected List<RootOid> getObjectsWithSameValue() {
-        return Arrays.asList(
-                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
-                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123"),
-                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "123")
-                );
-    }
-
-    @Override
-    protected List<RootOid> getObjectsWithDifferentValue() {
-        return Arrays.asList(
-                Oid.Factory.persistentOf(ObjectSpecId.of("CUS"), "123"),
-                Oid.Factory.transientOf(ObjectSpecId.of("CUS"), "124"),
-                Oid.Factory.transientOf(ObjectSpecId.of("CUX"), "123"));
-    }
-
-}
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
index 50be4c8..3e0d916 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidTest_create.java
@@ -34,8 +34,6 @@ public class RootOidTest_create {
         RootOid oid = Oid.Factory.persistentOf(objectSpecId, "123");
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
-
-        assertThat(oid.isTransient(), is(false));
     }
 
     @Test
@@ -44,8 +42,6 @@ public class RootOidTest_create {
         RootOid oid = Oid.Factory.transientOf(objectSpecId, "123");
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
-
-        assertThat(oid.isTransient(), is(true));
     }
 
 
@@ -55,8 +51,6 @@ public class RootOidTest_create {
         RootOid oid = Oid.Factory.persistentOf(objectSpecId, "123");
         assertThat(oid.getObjectSpecId(), is(objectSpecId));
         assertThat(oid.getIdentifier(), is("123"));
-
-        assertThat(oid.isTransient(), is(false));
     }
 
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
index 27bb912..8db11de 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/adapter/PojoAdapter.java
@@ -116,19 +116,6 @@ public final class PojoAdapter implements ObjectAdapter {
         return specification;
     }
 
-    // -- getAggregateRoot
-    
-//    @Override
-//    public ObjectAdapter getAggregateRoot() {
-//        if(!isParentedCollection()) {
-//            return this;
-//        }
-//        val collectionOid = (ParentedOid) oid;
-//        val rootOid = collectionOid.getParentOid();
-//        val rootAdapter = persistenceSession.adapterFor(rootOid);
-//        return rootAdapter;
-//    }
-
     @Override
     public String toString() {
         final ToString str = new ToString(this);
@@ -165,9 +152,10 @@ public final class PojoAdapter implements ObjectAdapter {
         // this is an approximate re-implementation...
         final Oid oid = getOid();
         if(oid != null) {
-            if(oid.isPersistent()) return "P";
-            if(oid.isTransient()) return "T";
-            if(oid.isViewModel()) return "V";
+            return "B"; // bookmark-able
+//            if(oid.isPersistent()) return "P";
+//            if(oid.isTransient()) return "T";
+//            if(oid.isViewModel()) return "V";
         }
         return "S"; // standalone adapter (value)
     }
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
index f830ce3..ad60571 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/objectadapter/ObjectAdapterContext_ObjectAdapterByIdProvider.java
@@ -32,6 +32,7 @@ import org.apache.isis.core.metamodel.adapter.oid.Oid;
 import org.apache.isis.core.metamodel.adapter.oid.PojoRecreationException;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+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.session.RuntimeContext;
@@ -84,7 +85,8 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider  {
      * If the version differs, then a {@link ConcurrencyException} is thrown.
      *
      * <p>
-     * ALSO, even if a {@link ConcurrencyException}, then the provided {@link RootOid oid}'s {@link Version version}
+     * ALSO, even if a {@link ConcurrencyException}, then the provided {@link RootOid oid}'s 
+     * {@link Version version}
      * will be {@link RootOid#setVersion(Version) set} to the current
      * value.  This allows the client to retry if they wish.
      *
@@ -121,10 +123,10 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider  {
             // else recreate
             try {
                 final Object pojo;
-                if(rootOid.isTransient() || rootOid.isViewModel()) {
-                    pojo = recreatePojoTransientOrViewModel(rootOid);
-                } else {
+                if(spec.isEntity()) {
                     pojo = persistenceSession.fetchPersistentPojo(rootOid);
+                } else {
+                    pojo = recreatePojoTransientOrViewModel(rootOid);
                 }
                 adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
             } catch(ObjectNotFoundException ex) {
@@ -138,51 +140,51 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider  {
 
     }
 
-    public Map<RootOid,ObjectAdapter> adaptersFor(final Stream<RootOid> rootOids) {
-
-        final Map<RootOid, ObjectAdapter> adapterByOid = _Maps.newLinkedHashMap();
-
-        List<RootOid> notYetLoadedOids = _Lists.newArrayList();
-
-        rootOids.forEach(rootOid->{
-            // attempt to locate adapter for the Oid
-            ObjectAdapter adapter = null;
-            // handle view models or transient
-            if (rootOid.isTransient() || rootOid.isViewModel()) {
-                final Object pojo = recreatePojoTransientOrViewModel(rootOid);
-                adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
-            }
-            if (adapter != null) {
-                adapterByOid.put(rootOid, adapter);
-            } else {
-                // persistent oid, to load in bulk
-                notYetLoadedOids.add(rootOid);
-            }
-        });
-
-        // recreate, in bulk, all those not yet loaded
-        final Map<RootOid, Object> pojoByOid = persistenceSession.fetchPersistentPojos(notYetLoadedOids);
-        for (Map.Entry<RootOid, Object> entry : pojoByOid.entrySet()) {
-            final RootOid rootOid = entry.getKey();
-            final Object pojo = entry.getValue();
-            if(pojo != null) {
-                ObjectAdapter adapter;
-                try {
-                    adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
-                    adapterByOid.put(rootOid, adapter);
-                } catch(ObjectNotFoundException ex) {
-                    throw ex; // just rethrow
-                } catch(RuntimeException ex) {
-                    throw new PojoRecreationException(rootOid, ex);
-                }
-            } else {
-                // null indicates it couldn't be loaded
-                // do nothing here...
-            }
-        }
-
-        return adapterByOid;
-    }
+//    public Map<RootOid,ObjectAdapter> adaptersFor(final Stream<RootOid> rootOids) {
+//
+//        final Map<RootOid, ObjectAdapter> adapterByOid = _Maps.newLinkedHashMap();
+//
+//        List<RootOid> notYetLoadedOids = _Lists.newArrayList();
+//
+//        rootOids.forEach(rootOid->{
+//            // attempt to locate adapter for the Oid
+//            ObjectAdapter adapter = null;
+//            // handle view models or transient
+//            if (rootOid.isTransient() || rootOid.isViewModel()) {
+//                final Object pojo = recreatePojoTransientOrViewModel(rootOid);
+//                adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
+//            }
+//            if (adapter != null) {
+//                adapterByOid.put(rootOid, adapter);
+//            } else {
+//                // persistent oid, to load in bulk
+//                notYetLoadedOids.add(rootOid);
+//            }
+//        });
+//
+//        // recreate, in bulk, all those not yet loaded
+//        final Map<RootOid, Object> pojoByOid = persistenceSession.fetchPersistentPojos(notYetLoadedOids);
+//        for (Map.Entry<RootOid, Object> entry : pojoByOid.entrySet()) {
+//            final RootOid rootOid = entry.getKey();
+//            final Object pojo = entry.getValue();
+//            if(pojo != null) {
+//                ObjectAdapter adapter;
+//                try {
+//                    adapter = objectAdapterContext.recreatePojo(rootOid, pojo);
+//                    adapterByOid.put(rootOid, adapter);
+//                } catch(ObjectNotFoundException ex) {
+//                    throw ex; // just rethrow
+//                } catch(RuntimeException ex) {
+//                    throw new PojoRecreationException(rootOid, ex);
+//                }
+//            } else {
+//                // null indicates it couldn't be loaded
+//                // do nothing here...
+//            }
+//        }
+//
+//        return adapterByOid;
+//    }
 
     // -- HELPER
 
@@ -190,11 +192,11 @@ class ObjectAdapterContext_ObjectAdapterByIdProvider  {
         final ObjectSpecification spec =
                 specificationLoader.lookupBySpecIdElseLoad(rootOid.getObjectSpecId());
         final Object pojo;
-        if(rootOid.isViewModel()) {
+        if(rootOid.isTransient()) {
+            pojo = objectAdapterContext.instantiateAndInjectServices(spec);
+        } else {
             final String memento = rootOid.getIdentifier();
             pojo = recreateViewModel(spec, memento);
-        } else {
-            pojo = objectAdapterContext.instantiateAndInjectServices(spec);
         }
 
         _Assert.assertFalse("Pojo most likely should not be an Oid", (pojo instanceof Oid));
diff --git a/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java b/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
index 4f2ee90..79bd702 100644
--- a/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
+++ b/persistence/jdo/datanucleus-5/src/test/java/org/apache/isis/core/runtime/persistence/objectstore/transaction/PojoAdapterBuilder.java
@@ -58,7 +58,7 @@ public class PojoAdapterBuilder {
         PERSISTENT {
             @Override
             RootOid createOid(ObjectSpecId objectSpecId, String identifier) {
-                return Factory.persistentOf(objectSpecId, identifier);
+                return Factory.of(objectSpecId, identifier);
             }
         },
         VALUE {