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 2019/02/12 12:39:14 UTC

[isis] branch 2033-IoC updated: ISIS-2033: further remove uses of PersistenceSession

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

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


The following commit(s) were added to refs/heads/2033-IoC by this push:
     new 1d1db68  ISIS-2033: further remove uses of PersistenceSession
1d1db68 is described below

commit 1d1db682068f906b50379528c97fe66ac5fd2934
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Feb 12 12:13:53 2019 +0100

    ISIS-2033: further remove uses of PersistenceSession
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 .../java/org/apache/isis/applib/value/Blob.java    |  3 +-
 .../java/org/apache/isis/applib/value/Clob.java    |  3 +-
 .../isis/applib/value/NamedWithMimeType.java       |  4 +-
 .../core/runtime/system/context/IsisContext.java   | 15 ++++++
 .../wicket/model/mementos/CollectionMemento.java   | 14 +++---
 .../model/mementos/ObjectAdapterMemento.java       |  8 +--
 .../wicket/model/mementos/PropertyMemento.java     | 14 +++---
 .../viewer/wicket/model/models/ActionModel.java    | 20 ++++----
 .../wicket/model/models/EntityCollectionModel.java | 19 +++----
 .../viewer/wicket/model/models/EntityModel.java    | 22 +++-----
 .../viewer/wicket/model/models/ModelAbstract.java  | 12 ++---
 .../viewer/wicket/model/models/ScalarModel.java    | 15 ++++--
 .../model/models/ScalarModelWithMultiPending.java  | 12 ++---
 .../models/whereami/WhereAmIModelDefault.java      | 12 +++--
 .../actionresponse/ActionResultResponseType.java   | 27 +++++-----
 .../actionmenu/serviceactions/CssMenuItem.java     | 28 ++++-------
 .../serviceactions/ServiceActionUtil.java          | 30 +++++------
 .../columns/ObjectAdapterPropertyColumn.java       |  2 +-
 .../components/entity/fieldset/PropertyGroup.java  |  4 +-
 .../ui/components/scalars/ScalarPanelAbstract.java |  8 ---
 .../scalars/ScalarPanelTextFieldAbstract.java      | 33 ++++++------
 .../scalars/ScalarPanelTextFieldNumeric.java       |  3 +-
 .../ui/components/scalars/TextFieldValueModel.java | 11 ++--
 .../isisapplib/IsisBlobOrClobPanelAbstract.java    | 28 +++++------
 .../components/scalars/primitive/BooleanPanel.java | 21 ++++----
 .../components/tree/IsisToWicketTreeAdapter.java   | 58 +++++++++++-----------
 .../ObjectAdapterMementoProviderAbstract.java      | 19 +++----
 .../wicket/ui/panels/FormExecutorDefault.java      |  4 --
 .../viewer/wicket/ui/panels/PanelAbstract.java     |  7 ++-
 29 files changed, 212 insertions(+), 244 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java b/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
index ca60faa..79f0b48 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/Blob.java
@@ -21,14 +21,13 @@ package org.apache.isis.applib.value;
 
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Objects;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
 
-public final class Blob implements NamedWithMimeType, Serializable {
+public final class Blob implements NamedWithMimeType {
 
     /**
      * Computed for state:
diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java b/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java
index e694577..b326950 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/Clob.java
@@ -20,14 +20,13 @@
 package org.apache.isis.applib.value;
 
 import java.io.IOException;
-import java.io.Serializable;
 import java.io.Writer;
 import java.util.Objects;
 
 import javax.activation.MimeType;
 import javax.activation.MimeTypeParseException;
 
-public final class Clob implements NamedWithMimeType, Serializable {
+public final class Clob implements NamedWithMimeType {
 
     private static final long serialVersionUID = 8694189924062378527L;
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java b/core/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java
index db2493a..8910174 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/NamedWithMimeType.java
@@ -19,9 +19,11 @@
 
 package org.apache.isis.applib.value;
 
+import java.io.Serializable;
+
 import javax.activation.MimeType;
 
-public interface NamedWithMimeType {
+public interface NamedWithMimeType extends Serializable {
 
     public String getName();
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
index 418a117..1f3de95 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/context/IsisContext.java
@@ -25,6 +25,7 @@ import java.util.Objects;
 import java.util.Optional;
 import java.util.TreeMap;
 import java.util.concurrent.CompletableFuture;
+import java.util.function.Function;
 import java.util.function.Supplier;
 
 import org.apache.isis.applib.AppManifest;
@@ -36,6 +37,8 @@ import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.config.ConfigurationConstants;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.config.internal._Config;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelDeficiencies;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
@@ -183,6 +186,7 @@ public interface IsisContext {
     }
 
     /**
+     * TODO [2033] decouple from JDO
      * @return framework's current PersistenceSession (if any)
      * @throws IllegalStateException - if IsisSessionFactory not resolvable
      */
@@ -192,6 +196,7 @@ public interface IsisContext {
     }
     
     /**
+     * TODO [2033] decouple from JDO
      * @return framework's current IsisTransactionManager (if any)
      * @throws IllegalStateException - if IsisSessionFactory not resolvable
      */
@@ -200,6 +205,16 @@ public interface IsisContext {
         	    .map(PersistenceSession::getTransactionManager);
     }
     
+    //TODO [2033] decouple from JDO
+    public static Function<Object, ObjectAdapter> pojoToAdapter() {
+        return getPersistenceSession().get()::adapterFor;
+    }
+    
+    //TODO [2033] decouple from JDO
+    public static Function<RootOid, ObjectAdapter> rootOidToAdapter() {
+        return getPersistenceSession().get()::adapterFor;
+    }
+    
     /**
      * @return framework's current AuthenticationSession (if any)
      * @throws IllegalStateException - if IsisSessionFactory not resolvable
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java
index 32ceba3..a1bc24b 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/CollectionMemento.java
@@ -25,7 +25,9 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.context.IsisContext;
+
+import lombok.val;
 
 /**
  * {@link Serializable} representation of a {@link OneToManyAssociation} (a
@@ -36,9 +38,9 @@ public class CollectionMemento implements Serializable {
     private static final long serialVersionUID = 1L;
 
     private static ObjectSpecification owningSpecFor(
-            final OneToManyAssociation association,
-            final IsisSessionFactory isisSessionFactory) {
-        final SpecificationLoader specificationLoader = isisSessionFactory.getSpecificationLoader();
+            final OneToManyAssociation association) {
+    	
+        val specificationLoader = IsisContext.getSpecificationLoader();
         return specificationLoader.loadSpecification(association.getIdentifier().toClassIdentityString());
     }
 
@@ -49,8 +51,8 @@ public class CollectionMemento implements Serializable {
 
     private transient OneToManyAssociation collection;
 
-    public CollectionMemento(final OneToManyAssociation collection, final IsisSessionFactory isisSessionFactory) {
-        this(owningSpecFor(collection, isisSessionFactory).getSpecId(), collection.getIdentifier().toNameIdentityString(), collection);
+    public CollectionMemento(final OneToManyAssociation collection) {
+        this(owningSpecFor(collection).getSpecId(), collection.getIdentifier().toNameIdentityString(), collection);
     }
 
     private CollectionMemento(final ObjectSpecId owningType, final String id, final OneToManyAssociation collection) {
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
index bba9dac..609578e 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ObjectAdapterMemento.java
@@ -25,16 +25,10 @@ import java.util.ArrayList;
 import java.util.Collection;
 
 import org.apache.isis.applib.services.bookmark.Bookmark;
-import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.ManagedObject.SimpleManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.managers.Converters;
-import org.apache.isis.core.runtime.system.context.managers.UniversalObjectManager;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.session.IsisSession;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento_Legacy.Sort;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento_Legacy.Type;
@@ -89,7 +83,7 @@ public interface ObjectAdapterMemento extends Serializable {
 //	}
 	
 	@Deprecated
-	default void resetVersion(PersistenceSession persistenceSession, SpecificationLoader specificationLoader) {
+	default void resetVersion() {
 		// no longer supported
 	}
 	
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PropertyMemento.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PropertyMemento.java
index 8dc1a05..47cb086 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PropertyMemento.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/PropertyMemento.java
@@ -25,17 +25,18 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 
+import lombok.val;
+
 public class PropertyMemento implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     private static ObjectSpecification owningSpecFor(
-            final OneToOneAssociation property,
-            final IsisSessionFactory isisSessionFactory) {
-        final SpecificationLoader specificationLoader = isisSessionFactory.getSpecificationLoader();
+            final OneToOneAssociation property) {
+        val specificationLoader = IsisContext.getSpecificationLoader();
         return specificationLoader.loadSpecification(property.getIdentifier().toClassIdentityString());
     }
 
@@ -43,10 +44,9 @@ public class PropertyMemento implements Serializable {
     private final String identifier;
     private final ObjectSpecId specId;
 
-    public PropertyMemento(
-            final OneToOneAssociation property, final IsisSessionFactory isisSessionFactory) {
+    public PropertyMemento(final OneToOneAssociation property) {
         this(
-                owningSpecFor(property, isisSessionFactory).getSpecId(),
+                owningSpecFor(property).getSpecId(),
                 property.getIdentifier().toNameIdentityString(),
                 property.getSpecification().getSpecId()
                 );
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 8d88624..baeb85a 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -39,6 +39,8 @@ import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
 import org.apache.wicket.util.resource.StringResourceStream;
 
+import lombok.val;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.PromptStyle;
@@ -69,6 +71,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.common.PageParametersUtils;
 import org.apache.isis.viewer.wicket.model.mementos.ActionMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
@@ -391,8 +394,9 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         }
 
         try {
-            final RootOid oid = RootOid.deStringEncoded(encoded);
-            return getPersistenceSession().adapterFor(oid);
+            val rootOid = RootOid.deStringEncoded(encoded);
+            val rootOidToAdapter = IsisContext.rootOidToAdapter();
+            return rootOidToAdapter.apply(rootOid);			
         } catch (final Exception e) {
             return null;
         }
@@ -466,11 +470,13 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         final Stream<RoutingService> routingServices = getServicesInjector().streamServices(RoutingService.class);
         final Object result = resultAdapter != null ? resultAdapter.getPojo() : null;
         
+        val pojoToAdapter = IsisContext.pojoToAdapter();
+        
         return routingServices
             .filter(routingService->routingService.canRoute(result))
             .map(routingService->routingService.route(result))
             .filter(_NullSafe::isPresent)
-            .map(routeTo->getPersistenceSession().adapterFor(routeTo))
+            .map(pojoToAdapter)
             .filter(_NullSafe::isPresent)
             .findFirst()
             .orElse(resultAdapter);
@@ -719,13 +725,5 @@ public class ActionModel extends BookmarkableModel<ObjectAdapter> implements For
         this.inlinePromptContext = inlinePromptContext;
     }
 
-    //////////////////////////////////////////////////
-    // Dependencies (from context)
-    //////////////////////////////////////////////////
-
-
-    ServiceInjector getServicesInjector() {
-        return getIsisSessionFactory().getServiceInjector();
-    }
 
 }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
index f8b33c0..420104b 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityCollectionModel.java
@@ -47,7 +47,6 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.context.managers.UniversalObjectManager;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.viewer.wicket.model.hints.UiHintContainer;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
 import org.apache.isis.viewer.wicket.model.links.LinksProvider;
@@ -176,13 +175,14 @@ UiHintContainer {
                 if(sortedBy != null) {
                     @SuppressWarnings("unchecked")
                     final Comparator<Object> comparator = (Comparator<Object>) InstanceUtil.createInstance(sortedBy);
-                    entityCollectionModel.getIsisSessionFactory().getServiceInjector().injectServicesInto(comparator);
+                    IsisContext.getServiceInjector().injectServicesInto(comparator);
                     Collections.sort(objectList, comparator);
                 }
+                
+                val pojoToAdapter = IsisContext.pojoToAdapter();
 
                 final List<ObjectAdapter> adapterList =
-                        _Lists.map(objectList,
-                                entityCollectionModel.getPersistenceSession()::adapterFor);
+                        _Lists.map(objectList, pojoToAdapter);
 
                 return adapterList;
             }
@@ -240,8 +240,7 @@ UiHintContainer {
      * Factory.
      */
     public static EntityCollectionModel createStandalone(
-            final ObjectAdapter collectionAsAdapter,
-            final IsisSessionFactory sessionFactory) {
+            final ObjectAdapter collectionAsAdapter) {
 
         // dynamically determine the spec of the elements
         // (ie so a List<Object> can be rendered according to the runtime type of its elements,
@@ -253,8 +252,10 @@ UiHintContainer {
                 .map(ObjectAdapterMemento::ofPojo)
                 .collect(Collectors.toList());
 
+        val specificationLoader = IsisContext.getSpecificationLoader();
+        
         final ObjectSpecification elementSpec = lowestCommonSuperclassFinder.getLowestCommonSuperclass()
-                .map(sessionFactory.getSpecificationLoader()::loadSpecification)
+                .map(specificationLoader::loadSpecification)
                 .orElse(collectionAsAdapter.getSpecification().getElementSpecification());
 
         final Class<?> elementType;
@@ -360,7 +361,7 @@ UiHintContainer {
         final OneToManyAssociation collection = collectionFor(entityModel.getObjectAdapterMemento(), getLayoutData());
         this.typeOf = forName(collection.getSpecification());
 
-        this.collectionMemento = new CollectionMemento(collection, entityModel.getIsisSessionFactory());
+        this.collectionMemento = new CollectionMemento(collection);
 
         this.pageSize = pageSize(collection.getFacet(PagedFacet.class), PAGE_SIZE_DEFAULT_FOR_PARENTED);
 
@@ -379,7 +380,7 @@ UiHintContainer {
         }
         final String collectionId = collectionLayoutData.getId();
         final ObjectSpecId objectSpecId = parentObjectAdapterMemento.getObjectSpecId();
-        final ObjectSpecification objectSpec = getIsisSessionFactory().getSpecificationLoader().lookupBySpecId(objectSpecId);
+        final ObjectSpecification objectSpec = IsisContext.getSpecificationLoader().lookupBySpecId(objectSpecId);
         final OneToManyAssociation otma = (OneToManyAssociation) objectSpec.getAssociation(collectionId);
         return otma;
     }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index d4f46b5..a8858ff 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -22,11 +22,6 @@ package org.apache.isis.viewer.wicket.model.models;
 import java.io.Serializable;
 import java.util.Map;
 
-import org.apache.wicket.Component;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
-
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.applib.layout.component.CollectionLayoutData;
@@ -49,6 +44,9 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PageParameterNames;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
+import org.apache.wicket.Component;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 /**
  * Backing model to represent a {@link ObjectAdapter}.
@@ -57,7 +55,8 @@ import org.apache.isis.viewer.wicket.model.util.ComponentHintKey;
  * So that the model is {@link Serializable}, the {@link ObjectAdapter} is
  * stored as a {@link ObjectAdapterMemento}.
  */
-public class EntityModel extends BookmarkableModel<ObjectAdapter> implements ObjectAdapterModel, UiHintContainer {
+public class EntityModel extends BookmarkableModel<ObjectAdapter> 
+implements ObjectAdapterModel, UiHintContainer {
 
     private static final long serialVersionUID = 1L;
 
@@ -91,9 +90,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements Obj
         if(getObjectAdapterMemento() == null) {
             return;
         }
-        final PersistenceSession persistenceSession = getPersistenceSession();
-        final SpecificationLoader specificationLoader = getSpecificationLoader();
-        getObjectAdapterMemento().resetVersion(persistenceSession, specificationLoader);
+        getObjectAdapterMemento().resetVersion();
     }
 
     public enum RenderingHint {
@@ -358,10 +355,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements Obj
         adapterMemento = ObjectAdapterMemento.ofAdapter(adapter);
     }
 
-    public void setObjectMemento(
-            final ObjectAdapterMemento memento,
-            final PersistenceSession persistenceSession,
-            final SpecificationLoader specificationLoader) {
+    public void setObjectMemento(final ObjectAdapterMemento memento) {
         super.setObject(
                 memento != null
                 ? memento.getObjectAdapter()
@@ -397,7 +391,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> implements Obj
      * {@link #getObject() entity}.
      */
     public void resetPropertyModels() {
-        adapterMemento.resetVersion(getPersistenceSession(), getSpecificationLoader());
+        adapterMemento.resetVersion();
         for (final PropertyMemento pm : propertyScalarModels.keySet()) {
             OneToOneAssociation otoa = pm.getProperty(getSpecificationLoader());
             final ScalarModel scalarModel = propertyScalarModels.get(pm);
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
index a409626..5e13cd7 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ModelAbstract.java
@@ -19,6 +19,7 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
+import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -48,7 +49,7 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> {
     // //////////////////////////////////////////////////////////////
 
     protected AuthenticationSession getAuthenticationSession() {
-        return getCurrentSession().getAuthenticationSession();
+        return IsisContext.getAuthenticationSession().orElse(null);
     }
 
     @Deprecated //TODO [2033] should not be needed in viewer, improve API!
@@ -60,14 +61,13 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> {
         return IsisSession.currentIfAny();
     }
 
-    @Deprecated //TODO [2033] should not be needed in viewer, improve API!
-    public IsisSessionFactory getIsisSessionFactory() {
-        return IsisContext.getSessionFactory();
-    }
-
     public SpecificationLoader getSpecificationLoader() {
         return IsisContext.getSpecificationLoader();
     }
+    
+    protected ServiceInjector getServicesInjector() {
+        return IsisContext.getServiceInjector();
+    }
 
 
 }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index e3c6e03..4c08d70 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -51,6 +51,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.core.security.authentication.AuthenticationSessionProvider;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -60,6 +61,8 @@ import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.PropertyMemento;
 import org.apache.isis.viewer.wicket.model.mementos.SpecUtils;
 
+import lombok.val;
+
 /**
  * Represents a scalar of an entity, either a {@link Kind#PROPERTY property} or
  * a {@link Kind#PARAMETER parameter}.
@@ -816,7 +819,7 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
                     .collect(Collectors.toList());
             final ObjectAdapterMemento memento =
                     ObjectAdapterMemento.ofMementoList(listOfMementos, getTypeOfSpecification().getSpecId());
-            super.setObjectMemento(memento, getPersistenceSession(), getSpecificationLoader()); // associated value
+            super.setObjectMemento(memento); // associated value
         } else {
             super.setObject(adapter); // associated value
         }
@@ -855,8 +858,9 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
      */
     @Override
     protected AuthenticationSession getAuthenticationSession() {
-        return getPersistenceSession().getServiceInjector()
-                .lookupServiceElseFail(AuthenticationSessionProvider.class).getAuthenticationSession();
+        return IsisContext.getServiceRegistry()
+                .lookupServiceElseFail(AuthenticationSessionProvider.class)
+                .getAuthenticationSession();
     }
 
     public boolean isRequired() {
@@ -1069,8 +1073,9 @@ public class ScalarModel extends EntityModel implements LinksProvider, FormExecu
             final Object viewModel = adapter.getPojo();
             final boolean cloneable = recreatableObjectFacet.isCloneable(viewModel);
             if(cloneable) {
-                final Object newViewModel = recreatableObjectFacet.clone(viewModel);
-                adapter = getPersistenceSession().adapterFor(newViewModel);
+                val newViewModelPojo = recreatableObjectFacet.clone(viewModel);
+                val pojoToAdapter = IsisContext.pojoToAdapter();
+                adapter = pojoToAdapter.apply(newViewModelPojo);
             }
         }
 
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java
index 518cbc3..5ff91e5 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModelWithMultiPending.java
@@ -19,16 +19,13 @@ package org.apache.isis.viewer.wicket.model.models;
 import java.io.Serializable;
 import java.util.ArrayList;
 
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
-import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
-
 /**
  * For widgets that use a <tt>org.wicketstuff.select2.Select2MultiChoice</tt>;
  * synchronizes the {@link Model} of the <tt>Select2MultiChoice</tt>
@@ -76,8 +73,6 @@ public interface ScalarModelWithMultiPending extends Serializable {
                     owner.setMultiPending(adapterMemento);
 
                     final ScalarModel ownerScalarModel = owner.getScalarModel();
-                    final PersistenceSession persistenceSession = ownerScalarModel.getPersistenceSession();
-                    final SpecificationLoader specificationLoader = ownerScalarModel.getSpecificationLoader();
 
                     if(adapterMemento == null) {
                         ownerScalarModel.setObject(null);
@@ -87,8 +82,7 @@ public interface ScalarModelWithMultiPending extends Serializable {
                             LOG.debug("setting to pending: {}", ownerPending.toString());
                             final ObjectSpecId objectSpecId = ownerScalarModel.getTypeOfSpecification().getSpecId();
                             ownerScalarModel.setObjectMemento(
-                                    ObjectAdapterMemento.ofMementoList(adapterMemento, objectSpecId),
-                                    persistenceSession, specificationLoader);
+                                    ObjectAdapterMemento.ofMementoList(adapterMemento, objectSpecId));
                         }
                     }
                 }
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
index f148936..eaed58c 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/whereami/WhereAmIModelDefault.java
@@ -28,6 +28,8 @@ import org.apache.isis.core.metamodel.util.pchain.ParentChain;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 
+import lombok.val;
+
 /**
  *
  * @since 2.0.0
@@ -45,12 +47,12 @@ class WhereAmIModelDefault implements WhereAmIModel {
     public WhereAmIModelDefault(EntityModel startOfChain) {
         this.startOfChain = startOfChain;
 
-        overrideFromConfigIfNew(startOfChain.getPersistenceSession().getConfiguration());
+        overrideFromConfigIfNew(IsisContext.getConfiguration());
 
         final ObjectAdapter adapter = startOfChain.getObject();
         final Object startNode = adapter.getPojo();
 
-        ParentChain.of(IsisContext.getSessionFactory().getSpecificationLoader()::loadSpecification)
+        ParentChain.of(IsisContext.getSpecificationLoader()::loadSpecification)
         .streamParentChainOf(startNode, maxChainLength)
         .forEach(reversedChainOfParents::addFirst);
     }
@@ -80,9 +82,9 @@ class WhereAmIModelDefault implements WhereAmIModel {
     // -- HELPER
 
     private EntityModel toEntityModel(Object domainObject) {
-        return new EntityModel(
-                startOfChain.getPersistenceSession()
-                .adapterFor(domainObject)	);
+    	val pojoToAdapter = IsisContext.pojoToAdapter();
+    	val objectAdapter = pojoToAdapter.apply(domainObject);
+        return new EntityModel(objectAdapter);
     }
 
     private void overrideFromConfigIfNew(IsisConfiguration configuration) {
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index b28b3e1..579b730 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -21,9 +21,6 @@ import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.Callable;
 
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.request.IRequestHandler;
-
 import org.apache.isis.applib.value.Blob;
 import org.apache.isis.applib.value.Clob;
 import org.apache.isis.commons.internal.collections._Lists;
@@ -32,7 +29,7 @@ import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
+import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityCollectionModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
@@ -41,12 +38,16 @@ import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 import org.apache.isis.viewer.wicket.ui.pages.standalonecollection.StandaloneCollectionPage;
 import org.apache.isis.viewer.wicket.ui.pages.value.ValuePage;
 import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.request.IRequestHandler;
+
+import lombok.val;
 
 public enum ActionResultResponseType {
     OBJECT {
         @Override
         public ActionResultResponse interpretResult(final ActionModel model, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
-            final ObjectAdapter actualAdapter = determineActualAdapter(resultAdapter, model.getIsisSessionFactory());
+            final ObjectAdapter actualAdapter = determineActualAdapter(resultAdapter);
             return toEntityPage(model, actualAdapter, null);
         }
 
@@ -59,7 +60,7 @@ public enum ActionResultResponseType {
     COLLECTION {
         @Override
         public ActionResultResponse interpretResult(final ActionModel actionModel, final AjaxRequestTarget target, final ObjectAdapter resultAdapter) {
-            final EntityCollectionModel collectionModel = EntityCollectionModel.createStandalone(resultAdapter, actionModel.getIsisSessionFactory());
+            final EntityCollectionModel collectionModel = EntityCollectionModel.createStandalone(resultAdapter);
             // take a copy of the actionModel, because the original can get mutated (specifically: its arguments cleared)
             final ActionModel actionModelCopy = actionModel.copy();
             collectionModel.setActionHint(actionModelCopy);
@@ -128,24 +129,20 @@ public enum ActionResultResponseType {
     }
 
     private static ObjectAdapter determineActualAdapter(
-            final ObjectAdapter resultAdapter,
-            final IsisSessionFactory isisSessionFactory) {
+            final ObjectAdapter resultAdapter) {
+    	
         if (resultAdapter.getSpecification().isNotCollection()) {
             return resultAdapter;
         } else {
             // will only be a single element
             final List<Object> pojoList = asList(resultAdapter);
             final Object pojo = pojoList.get(0);
-            return adapterFor(pojo, isisSessionFactory);
+            
+            val pojoToAdapter = IsisContext.pojoToAdapter();
+            return pojoToAdapter.apply(pojo);
         }
     }
 
-    private static ObjectAdapter adapterFor(
-            final Object pojo,
-            final IsisSessionFactory isisSessionFactory) {
-        return isisSessionFactory.getCurrentSession().getPersistenceSession().adapterFor(pojo);
-    }
-
     private static ActionResultResponse toEntityPage(final ActionModel model, final ObjectAdapter actualAdapter, final ConcurrencyException exIfAny) {
         // this will not preserve the URL (because pageParameters are not copied over)
         // but trying to preserve them seems to cause the 302 redirect to be swallowed somehow
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
index 239ea17..4f6172b 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/CssMenuItem.java
@@ -23,16 +23,6 @@ import java.util.List;
 
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
-
-import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.Page;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.form.SubmitLink;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.model.Model;
-
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.consent.Consent;
@@ -43,7 +33,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.viewer.wicket.model.links.LinkAndLabel;
@@ -55,6 +44,14 @@ import org.apache.isis.viewer.wicket.ui.pages.PageAbstract;
 import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.viewer.wicket.ui.util.Tooltips;
+import org.apache.wicket.AttributeModifier;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.Page;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.SubmitLink;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.model.Model;
 
 class CssMenuItem implements Serializable {
 
@@ -502,16 +499,11 @@ class CssMenuItem implements Serializable {
     // //////////////////////////////////////////////////////////////
 
     AuthenticationSession getAuthenticationSession() {
-        return getIsisSessionFactory().getCurrentSession().getAuthenticationSession();
+        return IsisContext.getAuthenticationSession().orElse(null);
     }
 
     SpecificationLoader getSpecificationLoader() {
-        return getIsisSessionFactory().getSpecificationLoader();
-    }
-
-
-    PersistenceSession getPersistenceSession() {
-        return getIsisSessionFactory().getCurrentSession().getPersistenceSession();
+        return IsisContext.getSpecificationLoader();
     }
 
     IsisSessionFactory getIsisSessionFactory() {
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
index fd65ec9..60801ab 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/actionmenu/serviceactions/ServiceActionUtil.java
@@ -25,23 +25,12 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.AbstractLink;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.apache.wicket.markup.html.panel.Fragment;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 import org.apache.isis.applib.layout.menubars.MenuBars;
 import org.apache.isis.applib.layout.menubars.MenuSection;
 import org.apache.isis.applib.layout.menubars.bootstrap3.BS3Menu;
 import org.apache.isis.applib.layout.menubars.bootstrap3.BS3MenuBar;
 import org.apache.isis.applib.services.i18n.TranslationService;
-import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
@@ -53,10 +42,20 @@ import org.apache.isis.viewer.wicket.model.models.ServiceActionsModel;
 import org.apache.isis.viewer.wicket.ui.components.actionmenu.CssClassFaBehavior;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.viewer.wicket.ui.util.Tooltips;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.link.AbstractLink;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.apache.wicket.markup.html.panel.Fragment;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import de.agilecoders.wicket.core.markup.html.bootstrap.components.TooltipConfig;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationBehavior;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.confirmation.ConfirmationConfig;
+import lombok.val;
 
 public final class ServiceActionUtil {
 
@@ -94,9 +93,7 @@ public final class ServiceActionUtil {
 
                 //XXX ISIS-1626, confirmation dialog for no-parameter menu actions
                 if (menuItem.requiresImmediateConfirmation()) {
-                    addConfirmationDialog(
-                            subMenuItemLink,
-                            menuItem.getPersistenceSession().getServiceInjector());
+                    addConfirmationDialog(subMenuItemLink);
                 }
 
             }
@@ -265,10 +262,9 @@ public final class ServiceActionUtil {
 
 
     private static void addConfirmationDialog(
-            final Component component,
-            final ServiceInjector servicesInjector) {
+            final Component component) {
 
-        final TranslationService translationService =
+        val translationService =
                 IsisContext.getServiceRegistry().lookupServiceElseFail(TranslationService.class);
 
         ConfirmationConfig confirmationConfig = new ConfirmationConfig();
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
index 1ee6be8..72a138a 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/columns/ObjectAdapterPropertyColumn.java
@@ -104,7 +104,7 @@ public final class ObjectAdapterPropertyColumn extends ColumnAbstract<ObjectAdap
         final ObjectAdapter adapter = rowModel.getObject();
         final EntityModel entityModel = new EntityModel(adapter);
         final OneToOneAssociation property = (OneToOneAssociation) adapter.getSpecification().getAssociation(propertyExpression);
-        final PropertyMemento pm = new PropertyMemento(property, entityModel.getIsisSessionFactory());
+        final PropertyMemento pm = new PropertyMemento(property);
 
         final ScalarModel scalarModel = entityModel.getPropertyModel(pm, EntityModel.Mode.VIEW, type.renderingHint());
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
index 4a04f00..dd93875 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/entity/fieldset/PropertyGroup.java
@@ -205,7 +205,7 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
             final WebMarkupContainer container,
             final List<LinkAndLabel> entityActions) {
 
-        final PropertyMemento pm = new PropertyMemento(otoa, entityModel.getIsisSessionFactory());
+        final PropertyMemento pm = new PropertyMemento(otoa);
 
         final ScalarModel scalarModel =
                 entityModel.getPropertyModel(pm, EntityModel.Mode.VIEW, EntityModel.RenderingHint.REGULAR);
@@ -213,7 +213,7 @@ public class PropertyGroup extends PanelAbstract<EntityModel> implements HasDyna
         final Component component = getComponentFactoryRegistry()
                 .addOrReplaceComponent(container, ID_PROPERTY, ComponentType.SCALAR_NAME_AND_VALUE, scalarModel);
 
-        final ObjectAdapter adapter = entityModel.load(ConcurrencyChecking.NO_CHECK);
+        final ObjectAdapter adapter = entityModel.load();
         final List<ObjectAction> associatedActions =
                 ObjectAction.Util.findForAssociation(adapter, otoa);
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
index d06bab9..63ccdb1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelAbstract.java
@@ -383,12 +383,4 @@ public abstract class ScalarPanelAbstract extends PanelAbstract<ScalarModel> imp
         target.add(this);
     }
 
-
-    // ///////////////////////////////////////////////////////////////////
-
-    @Override
-    public ObjectAdapterProvider getObjectAdapterProvider() {
-        return getPersistenceSession();
-    }
-
 }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index 511cc77..f1710d3 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -20,9 +20,20 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.io.Serializable;
+import java.util.function.Function;
 
 import javax.inject.Inject;
 
+import org.apache.isis.commons.internal.base._Casts;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
+import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
+import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Tooltips;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -38,18 +49,6 @@ import org.apache.wicket.validation.IValidatable;
 import org.apache.wicket.validation.IValidator;
 import org.apache.wicket.validation.ValidationError;
 
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
-import org.apache.isis.core.metamodel.facets.SingleIntValueFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
-import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
-import org.apache.isis.viewer.wicket.ui.panels.PanelAbstract;
-import org.apache.isis.viewer.wicket.ui.util.Tooltips;
-
 /**
  * Adapter for {@link PanelAbstract panel}s that use a {@link ScalarModel} as
  * their backing model.
@@ -63,7 +62,8 @@ import org.apache.isis.viewer.wicket.ui.util.Tooltips;
  * This implementation is for panels that use a textfield/text area.
  * </p>
  */
-public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> extends ScalarPanelAbstract2 implements TextFieldValueModel.ScalarModelProvider {
+public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> 
+extends ScalarPanelAbstract2 implements TextFieldValueModel.ScalarModelProvider {
 
     private static final long serialVersionUID = 1L;
 
@@ -218,7 +218,7 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
             @Override
             public void validate(final IValidatable<T> validatable) {
                 final T proposedValue = validatable.getValue();
-                final ObjectAdapter proposedAdapter = getPersistenceSession().adapterFor(proposedValue);
+                final ObjectAdapter proposedAdapter = pojoToAdapter().apply(proposedValue);
                 final String reasonIfAny = scalarModel.validate(proposedAdapter);
                 if (reasonIfAny != null) {
                     final ValidationError error = new ValidationError();
@@ -360,10 +360,5 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
         return settings;
     }
 
-    @Override
-    public ObjectAdapterProvider getObjectAdapterProvider() {
-        return getPersistenceSession();
-    }
-
 }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index 118155e..4c41374 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -36,7 +36,8 @@ import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 /**
  * Panel for rendering numeric scalars.
  */
-public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> extends ScalarPanelTextFieldAbstract<T> {
+public abstract class ScalarPanelTextFieldNumeric<T extends Serializable> 
+extends ScalarPanelTextFieldAbstract<T> {
 
     private static final long serialVersionUID = 1L;
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
index 4db0201..53d07da 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/TextFieldValueModel.java
@@ -19,13 +19,12 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars;
 
 import java.io.Serializable;
-
-import org.apache.wicket.markup.html.form.TextField;
-import org.apache.wicket.model.Model;
+import java.util.function.Function;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
 
 /**
  * For custom {@link ScalarPanelTextFieldAbstract}s to use as the {@link Model}
@@ -37,7 +36,7 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
 
     public interface ScalarModelProvider {
         ScalarModel getModel();
-        ObjectAdapterProvider getObjectAdapterProvider();
+        Function<Object, ObjectAdapter> pojoToAdapter();
     }
 
     private final ScalarModelProvider scalarModelProvider;
@@ -63,7 +62,7 @@ public class TextFieldValueModel<T extends Serializable> extends Model<T> {
         if (object == null) {
             scalarModelProvider.getModel().setObject(null);
         } else {
-            final ObjectAdapter objectAdapter = scalarModelProvider.getObjectAdapterProvider().adapterFor(object);
+            final ObjectAdapter objectAdapter = scalarModelProvider.pojoToAdapter().apply(object);
             scalarModelProvider.getModel().setObject(objectAdapter);
         }
     }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index 9df561f..f5a131d 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -26,6 +26,15 @@ import java.util.List;
 import javax.activation.MimeType;
 import javax.imageio.ImageIO;
 
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.applib.value.NamedWithMimeType;
+import org.apache.isis.core.commons.lang.CloseableExtensions;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
+import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
+import org.apache.isis.viewer.wicket.ui.util.Components;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.Component;
 import org.apache.wicket.MarkupContainer;
@@ -43,17 +52,6 @@ import org.apache.wicket.markup.html.link.ResourceLink;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.resource.IResource;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.value.Blob;
-import org.apache.isis.applib.value.NamedWithMimeType;
-import org.apache.isis.core.commons.lang.CloseableExtensions;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.viewer.wicket.model.models.ScalarModel;
-import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
-import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
-import org.apache.isis.viewer.wicket.ui.util.Components;
 
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.fileinput.BootstrapFileInputField;
 
@@ -62,9 +60,6 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
 
     private static final long serialVersionUID = 1L;
 
-    @SuppressWarnings("unused")
-    private static final Logger LOG = LoggerFactory.getLogger(IsisBlobOrClobPanelAbstract.class);
-
     private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
     private static final String ID_SCALAR_IF_REGULAR_DOWNLOAD = "scalarIfRegularDownload";
     private static final String ID_FILE_NAME = "fileName";
@@ -207,7 +202,8 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
     }
 
     private FileUploadField createFileUploadField(String componentId) {
-        final BootstrapFileInputField fileUploadField = new BootstrapFileInputField(componentId, new IModel<List<FileUpload>>() {
+        final BootstrapFileInputField fileUploadField = new BootstrapFileInputField(
+        		componentId, new IModel<List<FileUpload>>() {
 
             private static final long serialVersionUID = 1L;
 
@@ -219,7 +215,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends NamedWithMimeType> e
 
                 final T blob = getBlobOrClobFrom(fileUploads);
 
-                final ObjectAdapter adapter = getPersistenceSession().adapterFor(blob);
+                final ObjectAdapter adapter = PojoAdapter.ofValue(blob);
                 getModel().setObject(adapter);
             }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
index ef7ccbd..375b60c 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/primitive/BooleanPanel.java
@@ -19,27 +19,28 @@
 
 package org.apache.isis.viewer.wicket.ui.components.scalars.primitive;
 
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.markup.ComponentTag;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.Model;
-
 import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facets.objectvalue.labelat.LabelAtFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.runtime.persistence.adapter.PojoAdapter;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract2;
 import org.apache.isis.viewer.wicket.ui.components.widgets.bootstrap.FormGroup;
 import org.apache.isis.viewer.wicket.ui.util.CssClassAppender;
 import org.apache.isis.viewer.wicket.ui.util.Tooltips;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.markup.ComponentTag;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxX;
 import de.agilecoders.wicket.extensions.markup.html.bootstrap.form.checkboxx.CheckBoxXConfig;
 import de.agilecoders.wicket.jquery.Key;
+import lombok.val;
 
 /**
  * Panel for rendering scalars of type {@link Boolean} or <tt>boolean</tt>.
@@ -138,8 +139,8 @@ public class BooleanPanel extends ScalarPanelAbstract2 {
 
             @Override
             public void setObject(final Boolean object) {
-                final ObjectAdapter adapter = getPersistenceSession().adapterFor(object);
-                getModel().setObject(adapter);
+                val objectAdapter = PojoAdapter.ofValue(object);
+                getModel().setObject(objectAdapter);
             }
         }) {
 
@@ -177,7 +178,7 @@ public class BooleanPanel extends ScalarPanelAbstract2 {
         final ObjectSpecification objectSpecification = getModel().getTypeOfSpecification();
         if(objectSpecification.getFullIdentifier().equals("boolean")) {
             if(getModel().getObject() == null) {
-                getModel().setObject(getPersistenceSession().adapterFor(false));
+                getModel().setObject(PojoAdapter.ofValue(false));
             }
         }
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
index d1b35d3..4f17dae 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/tree/IsisToWicketTreeAdapter.java
@@ -16,6 +16,8 @@
  */
 package org.apache.isis.viewer.wicket.ui.components.tree;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 import java.io.Serializable;
 import java.util.Iterator;
 import java.util.NoSuchElementException;
@@ -26,19 +28,6 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.resource.spi.IllegalStateException;
-
-import org.apache.wicket.Component;
-import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
-import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
-import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree;
-import org.apache.wicket.extensions.markup.html.repeater.tree.Node;
-import org.apache.wicket.model.IModel;
-import org.apache.wicket.model.LoadableDetachableModel;
-import org.apache.wicket.model.Model;
-
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.tree.TreeAdapter;
 import org.apache.isis.applib.tree.TreeNode;
@@ -49,12 +38,23 @@ import org.apache.isis.commons.internal.functions._Functions;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
 import org.apache.isis.viewer.wicket.model.models.ModelAbstract;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.model.models.ValueModel;
 import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanel;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
+import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
+import org.apache.wicket.extensions.markup.html.repeater.tree.NestedTree;
+import org.apache.wicket.extensions.markup.html.repeater.tree.Node;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
+import org.apache.wicket.model.Model;
+
+import lombok.val;
 
 class IsisToWicketTreeAdapter {
 
@@ -263,8 +263,10 @@ class IsisToWicketTreeAdapter {
         }
 
         private TreeModel wrap(Object pojo, TreePath treePath) {
-            Objects.requireNonNull(pojo);
-            return new TreeModel(persistenceSession().adapterFor(pojo), treePath);
+            requires(pojo, "pojo");
+            val pojoToAdapter = IsisContext.pojoToAdapter();
+            val objectAdapter = pojoToAdapter.apply(pojo);
+            return new TreeModel(objectAdapter, treePath);
         }
 
         private Object unwrap(TreeModel model) {
@@ -272,10 +274,6 @@ class IsisToWicketTreeAdapter {
             return model.getObject().getPojo();
         }
 
-        private PersistenceSession persistenceSession() {
-            return IsisContext.getPersistenceSession().orElse(null);
-        }
-
         private Function<Object, TreeModel> newPojoToTreeModelMapper(TreeModel parent) {
             return _Functions.indexAwareToFunction((indexWithinSiblings, pojo)->
             wrap(pojo, parent.getTreePath().append(indexWithinSiblings)));
@@ -371,14 +369,18 @@ class IsisToWicketTreeAdapter {
          */
         @Override
         protected TreeModel load() {
-
-            final PersistenceSession persistenceSession = IsisContext.getPersistenceSession()
-                    .orElseThrow(()->new RuntimeException(new IllegalStateException(
-                            String.format("Tree creation: missing a PersistenceSession to recreate TreeModel "
-                                    + "from Oid: '%s'", id)))
-                            );
-
-            final ObjectAdapter objAdapter = persistenceSession.adapterFor(id);
+        	
+        	val rootOid = id;
+            val rootOidToAdapter = IsisContext.rootOidToAdapter();
+
+//TODO [2033] remove            
+//            final PersistenceSession persistenceSession = IsisContext.getPersistenceSession()
+//                    .orElseThrow(()->new RuntimeException(new IllegalStateException(
+//                            String.format("Tree creation: missing a PersistenceSession to recreate TreeModel "
+//                                    + "from Oid: '%s'", id)))
+//                            );
+
+            val objAdapter = rootOidToAdapter.apply(rootOid);
             if(objAdapter==null) {
                 throw new NoSuchElementException(
                         String.format("Tree creation: could not recreate TreeModel from Oid: '%s'", id));
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
index fbfcb3a..f83cfee 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/select2/providers/ObjectAdapterMementoProviderAbstract.java
@@ -20,23 +20,20 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Locale;
 
-import org.apache.wicket.Session;
-import org.apache.wicket.util.convert.IConverter;
-import org.apache.wicket.util.string.Strings;
-import org.wicketstuff.select2.ChoiceProvider;
-
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.concurrency.ConcurrencyChecking;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.IsisConverterLocator;
+import org.apache.wicket.Session;
+import org.apache.wicket.util.convert.IConverter;
+import org.apache.wicket.util.string.Strings;
+import org.wicketstuff.select2.ChoiceProvider;
 
 public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvider<ObjectAdapterMemento> {
 
@@ -129,11 +126,7 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
 
 
     protected SpecificationLoader getSpecificationLoader() {
-        return getIsisSessionFactory().getSpecificationLoader();
-    }
-
-    PersistenceSession getPersistenceSession() {
-        return getIsisSessionFactory().getCurrentSession().getPersistenceSession();
+        return IsisContext.getSpecificationLoader();
     }
 
     protected IsisSessionFactory getIsisSessionFactory() {
@@ -141,7 +134,7 @@ public abstract class ObjectAdapterMementoProviderAbstract extends ChoiceProvide
     }
 
     public AuthenticationSession getAuthenticationSession() {
-        return getIsisSessionFactory().getCurrentSession().getAuthenticationSession();
+        return IsisContext.getAuthenticationSession().orElse(null);
     }
 
 
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index 0ee4e7c..af24007 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -523,10 +523,6 @@ implements FormExecutor {
         return IsisSession.currentIfAny();
     }
 
-    protected PersistenceSession getPersistenceSession() {
-        return getCurrentSession().getPersistenceSession();
-    }
-
     protected ServiceRegistry getServiceRegistry() {
         return IsisContext.getServiceRegistry();
     }
diff --git a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
index 389538a..c0b1ec1 100644
--- a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
+++ b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/PanelAbstract.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.viewer.wicket.ui.panels;
 
+import java.util.function.Function;
+
 import javax.inject.Inject;
 
 import org.apache.wicket.Component;
@@ -29,6 +31,7 @@ import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.config.IsisConfiguration;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
@@ -162,8 +165,8 @@ public abstract class PanelAbstract<T extends IModel<?>> extends Panel {
     // Dependencies (from IsisContext)
     // ///////////////////////////////////////////////////////////////////
 
-    public PersistenceSession getPersistenceSession() {
-        return IsisContext.getPersistenceSession().orElse(null);
+    public Function<Object, ObjectAdapter> pojoToAdapter() {
+        return IsisContext.pojoToAdapter();
     }
     
     protected IsisConfiguration getConfiguration() {