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/09 20:50:38 UTC

[isis] branch 2033-IoC updated: ISIS-2033: moves some responsibility from IsisSessionFactory to IsisSession

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 b331d73  ISIS-2033: moves some responsibility from IsisSessionFactory to IsisSession
b331d73 is described below

commit b331d736ac5ee38c1fd55b2eb12024749ac22305
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Feb 9 21:50:32 2019 +0100

    ISIS-2033: moves some responsibility from IsisSessionFactory to
    IsisSession
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-2033
---
 .../commons/components/SessionScopedComponent.java | 36 ----------
 .../runtime/managed/ManagedObjectContextBase.java  | 24 +++++--
 .../isis/core/runtime/system/SystemConstants.java  |  4 ++
 .../core/runtime/system/context/IsisContext.java   |  2 +-
 .../system/persistence/PersistenceSession.java     |  7 +-
 .../ObjectAdapterContext_OidProviders.java         |  3 +-
 .../core/runtime/system/session/IsisSession.java   | 83 +++++++++++-----------
 .../runtime/system/session/IsisSessionFactory.java |  5 +-
 .../system/session/IsisSessionFactoryDefault.java  | 28 +++-----
 .../system/transaction/IsisTransactionManager.java | 10 +--
 .../resources/MenuBarsResourceServerside.java      |  4 +-
 .../wicket/AuthenticatedWebSessionForIsis.java     | 26 ++++---
 .../viewer/wicket/model/models/ModelAbstract.java  |  8 +--
 13 files changed, 98 insertions(+), 142 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/core/commons/components/SessionScopedComponent.java b/core/commons/src/main/java/org/apache/isis/core/commons/components/SessionScopedComponent.java
deleted file mode 100644
index 7b4fdc4..0000000
--- a/core/commons/src/main/java/org/apache/isis/core/commons/components/SessionScopedComponent.java
+++ /dev/null
@@ -1,36 +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.commons.components;
-
-/**
- * Indicate that the implementing component is scoped at the session level (for
- * a single user) and might also need to be "opened" or "closed" at the
- * start/end of the session.
- *
- * <p>
- * Analogous to Hibernate's <tt>Session</tt>.
- *
- * @see ApplicationScopedComponent
- * @see TransactionScopedComponent
- */
-public interface SessionScopedComponent extends Component {
-
-
-}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/managed/ManagedObjectContextBase.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/managed/ManagedObjectContextBase.java
index 0347f9a..7f851d9 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/managed/ManagedObjectContextBase.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/managed/ManagedObjectContextBase.java
@@ -14,23 +14,33 @@ import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
 
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 
 /**
  * 
  * @since 2.0.0-M3
  *
  */
+@RequiredArgsConstructor
 public abstract class ManagedObjectContextBase implements ManagedObjectContext {
 
 	// -- FINAL FIELDS
 	
-    @Getter protected final IsisConfiguration configuration = IsisContext.getConfiguration();
-    @Getter protected final ServiceInjector serviceInjector = IsisContext.getServiceInjector();
-    @Getter protected final ServiceRegistry serviceRegistry = IsisContext.getServiceRegistry();
-    @Getter protected final SpecificationLoader specificationLoader = IsisContext.getSpecificationLoader();
-    @Getter protected final AuthenticationSession authenticationSession = 
-    		IsisContext.getAuthenticationSession()
-    		.orElse(null);
+    @Getter protected final IsisConfiguration configuration;
+    @Getter protected final ServiceInjector serviceInjector;
+    @Getter protected final ServiceRegistry serviceRegistry;
+    @Getter protected final SpecificationLoader specificationLoader;
+    @Getter protected final AuthenticationSession authenticationSession;
+    
+    // -- NO ARG CONSTRUCTOR
+    
+    protected ManagedObjectContextBase() {
+    	configuration = IsisContext.getConfiguration();
+        serviceInjector = IsisContext.getServiceInjector();
+        serviceRegistry = IsisContext.getServiceRegistry();
+        specificationLoader = IsisContext.getSpecificationLoader();
+        authenticationSession = IsisContext.getAuthenticationSession().orElse(null);
+    }
     
     // -- OBJECT ADAPTER SUPPORT
     
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
index 94d997b..0e3cf54 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/SystemConstants.java
@@ -47,6 +47,10 @@ public final class SystemConstants {
 
 
     public static final String LOCALE_KEY = ConfigurationConstants.ROOT + "locale";
+    
+    // -- SERVICE ID SUPPORT
+
+    public static final String SERVICE_IDENTIFIER = "1";
 
     private SystemConstants() {
     }
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 d5be144..17fbe06 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
@@ -179,7 +179,7 @@ public interface IsisContext {
      * @throws IllegalStateException - if IsisSessionFactory not resolvable
      */
     public static Optional<IsisSession> getCurrentIsisSession() {
-        return Optional.ofNullable(getSessionFactory().getCurrentSession());
+        return Optional.ofNullable(IsisSession.current());
     }
 
     /**
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
index 32d6a74..5fc658f 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/PersistenceSession.java
@@ -22,7 +22,6 @@ import java.util.Map;
 import org.apache.isis.applib.query.Query;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.config.IsisConfiguration;
-import org.apache.isis.core.commons.components.SessionScopedComponent;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterByIdProvider;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapterProvider;
@@ -36,8 +35,7 @@ public interface PersistenceSession
 extends 
     ObjectAdapterProvider.Delegating,
     ObjectAdapterByIdProvider.Delegating,
-    TransactionalResource, 
-    SessionScopedComponent {
+    TransactionalResource {
 
     // -------------------------------------------------------------------------------------------------
     // -- STABLE API (DRAFT)
@@ -147,9 +145,6 @@ extends
     // -- API NOT STABLE YET - SUBJECT TO REFACTORING
     // -------------------------------------------------------------------------------------------------
     
-    // -- SERVICE SUPPORT
-
-    static final String SERVICE_IDENTIFIER = "1";
 
     // -- FIXTURE SUPPORT
     
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
index 699b4d6..235b522 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/persistence/adaptermanager/ObjectAdapterContext_OidProviders.java
@@ -31,6 +31,7 @@ import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.runtime.contextmanger.ContextManager;
 import org.apache.isis.core.runtime.contextmanger.ManagedObjectResolver;
+import org.apache.isis.core.runtime.system.SystemConstants;
 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.persistence.adaptermanager.factories.OidFactory.OidProvider;
@@ -65,7 +66,7 @@ class ObjectAdapterContext_OidProviders {
 
         @Override
         public RootOid oidFor(ManagedObject managedObject) {
-            final String identifier = PersistenceSession.SERVICE_IDENTIFIER;
+            final String identifier = SystemConstants.SERVICE_IDENTIFIER;
             return Oid.Factory.persistentOf(managedObject.getSpecification().getSpecId(), identifier);
         }
 
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSession.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSession.java
index 8e5418f..3471f7c 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSession.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSession.java
@@ -19,13 +19,18 @@
 
 package org.apache.isis.core.runtime.system.session;
 
-import org.apache.isis.core.commons.components.SessionScopedComponent;
+import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.core.commons.util.ToString;
+import org.apache.isis.core.runtime.managed.ManagedObjectContextBase;
+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.persistence.PersistenceSessionFactory;
 import org.apache.isis.core.runtime.system.transaction.IsisTransaction;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
 
+import lombok.Getter;
+
 /**
  * Analogous to (and in essence a wrapper for) a JDO <code>PersistenceManager</code>;
  * holds the current set of components for a specific execution context (such as on a thread).
@@ -35,29 +40,43 @@ import org.apache.isis.core.security.authentication.AuthenticationSession;
  *
  * @see IsisSessionFactory
  */
-public class IsisSession implements SessionScopedComponent {
-
-    // private static final Logger LOG = LoggerFactory.getLogger(IsisSession.class);
-
-    // -- constructor, fields
-
-    private final AuthenticationSession authenticationSession;
-    private PersistenceSession persistenceSession; // only non-final so can be replaced in tests.
-
-    public IsisSession(
-            final AuthenticationSession authenticationSession,
-            final PersistenceSession persistenceSession) {
-
-        this.authenticationSession = authenticationSession;
-        this.persistenceSession = persistenceSession;
-    }
-
-
-    // -- open, close
+public class IsisSession extends ManagedObjectContextBase {
+
+    @Deprecated //TODO [2033] avoid extensions to ManagedObjectContext 
+    @Getter private final PersistenceSession persistenceSession;
+    
+	public IsisSession(
+			final AuthenticationSession authenticationSession,
+			final PersistenceSessionFactory persistenceSessionFactory) {
+		
+		super(IsisContext.getConfiguration(),
+				IsisContext.getServiceInjector(),
+				IsisContext.getServiceRegistry(),
+				IsisContext.getSpecificationLoader(),
+				authenticationSession);
+		
+		this.persistenceSession =
+                persistenceSessionFactory.createPersistenceSession(authenticationSession);
+        
+        
+	}
+	
+	// -- CURRENT
+	
+	public static IsisSession current() {
+		return _Context.threadLocalGetIfAny(IsisSession.class);
+	}
+	
+	// -- OPEN
+    
+    
     void open() {
+    	_Context.threadLocalPut(IsisSession.class, this);
         persistenceSession.open();
     }
 
+    // -- CLOSE
+    
     /**
      * Closes session.
      */
@@ -65,31 +84,9 @@ public class IsisSession implements SessionScopedComponent {
         if(persistenceSession != null) {
             persistenceSession.close();
         }
+        _Context.cleanupThread();
     }
 
-
-
-
-    // -- AuthenticationSession
-    /**
-     * Returns the {@link AuthenticationSession} representing this user for this
-     * {@link IsisSession}.
-     */
-    public AuthenticationSession getAuthenticationSession() {
-        return authenticationSession;
-    }
-
-
-    // -- Persistence Session
-    /**
-     * The {@link PersistenceSession} within this {@link IsisSession}.
-     */
-    public PersistenceSession getPersistenceSession() {
-        return persistenceSession;
-    }
-
-
-
     // -- transaction
 
     /**
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
index c4d2e0a..9f9ea2e 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactory.java
@@ -53,7 +53,10 @@ public interface IsisSessionFactory {
     public IsisSession openSession(final AuthenticationSession authenticationSession);
     public void closeSession();
 
-    public IsisSession getCurrentSession();
+    @Deprecated //TODO [2033] replace with IsisSession.current()
+    default public IsisSession getCurrentSession() {
+    	return IsisSession.current();
+    }
 
 
     /**
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
index 91c9f50..ea84e52 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/session/IsisSessionFactoryDefault.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.title.TitleService;
 import org.apache.isis.commons.internal.base._Blackhole;
+import org.apache.isis.commons.internal.context._Context;
 import org.apache.isis.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.specloader.ServiceInitializer;
@@ -40,7 +41,6 @@ import org.apache.isis.core.runtime.fixtures.FixturesInstallerFromConfiguration;
 import org.apache.isis.core.runtime.system.MessageRegistry;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.core.runtime.system.internal.InitialisationSession;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSessionFactory;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManager;
 import org.apache.isis.core.runtime.system.transaction.IsisTransactionManagerException;
@@ -48,6 +48,8 @@ import org.apache.isis.core.security.authentication.AuthenticationSession;
 import org.apache.isis.core.security.authentication.manager.AuthenticationManager;
 import org.apache.isis.core.security.authorization.manager.AuthorizationManager;
 
+import lombok.val;
+
 /**
  * Is the factory of {@link IsisSession}s, also holding a reference to the current session using
  * a thread-local.
@@ -217,40 +219,26 @@ public class IsisSessionFactoryDefault implements IsisSessionFactory {
         specificationLoader.shutdown();
     }
 
-    // -- openSession, closeSession, currentSession, inSession
+    // -- 
     
-    /**
-     * Inheritable... allows to have concurrent computations utilizing the ForkJoinPool.
-     * see {@link IsisContext#compute(java.util.function.Supplier)}
-     */ 
-    private final InheritableThreadLocal<IsisSession> currentSession = new InheritableThreadLocal<>();
-
     @Override
     public IsisSession openSession(final AuthenticationSession authenticationSession) {
 
         closeSession();
 
-        final PersistenceSession persistenceSession =
-                persistenceSessionFactory.createPersistenceSession(authenticationSession);
-        IsisSession session = new IsisSession(authenticationSession, persistenceSession);
-        currentSession.set(session);
-        session.open();
-        return session;
+        val isisSession = new IsisSession(authenticationSession, persistenceSessionFactory);
+        isisSession.open();
+        return isisSession;
     }
 
     @Override
     public void closeSession() {
         final IsisSession existingSessionIfAny = getCurrentSession();
         if (existingSessionIfAny == null) {
+        	_Context.cleanupThread(); // just in case, to have a well defined post condition here
             return;
         }
         existingSessionIfAny.close();
-        currentSession.set(null);
-    }
-
-    @Override
-    public IsisSession getCurrentSession() {
-        return currentSession.get();
     }
 
     private IsisTransactionManager getCurrentSessionTransactionManager() {
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
index 974749c..da72cda 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/system/transaction/IsisTransactionManager.java
@@ -22,21 +22,19 @@ package org.apache.isis.core.runtime.system.transaction;
 import java.util.UUID;
 import java.util.function.Supplier;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.applib.services.command.CommandContext;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.iactn.InteractionContext;
 import org.apache.isis.applib.services.inject.ServiceInjector;
-import org.apache.isis.core.commons.components.SessionScopedComponent;
 import org.apache.isis.core.commons.exceptions.IsisException;
 import org.apache.isis.core.runtime.persistence.objectstore.transaction.PersistenceCommand;
 import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
 import org.apache.isis.core.runtime.system.session.IsisSession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-public class IsisTransactionManager implements SessionScopedComponent {
+public class IsisTransactionManager {
 
     private static final Logger LOG = LoggerFactory.getLogger(IsisTransactionManager.class);
 
@@ -52,7 +50,6 @@ public class IsisTransactionManager implements SessionScopedComponent {
     // -- constructor, fields
 
     private final PersistenceSession persistenceSession;
-    //private final AuthenticationSession authenticationSession;
     private final ServiceInjector servicesInjector;
 
     private final CommandContext commandContext;
@@ -60,7 +57,6 @@ public class IsisTransactionManager implements SessionScopedComponent {
 
     public IsisTransactionManager(
             final PersistenceSession persistenceSession,
-            /*final AuthenticationSession authenticationSession,*/
             final ServiceInjector servicesInjector) {
 
         this.persistenceSession = persistenceSession;
diff --git a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java
index 7a1b923..d5b7f97 100644
--- a/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java
+++ b/core/viewer-restfulobjects-server/src/main/java/org/apache/isis/viewer/restfulobjects/server/resources/MenuBarsResourceServerside.java
@@ -27,7 +27,7 @@ import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
 import org.apache.isis.applib.layout.links.Link;
 import org.apache.isis.applib.layout.menubars.MenuBars;
 import org.apache.isis.applib.services.menu.MenuBarsService;
-import org.apache.isis.core.runtime.system.persistence.PersistenceSession;
+import org.apache.isis.core.runtime.system.SystemConstants;
 import org.apache.isis.viewer.restfulobjects.applib.Rel;
 import org.apache.isis.viewer.restfulobjects.applib.RepresentationType;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulHttpMethod;
@@ -73,7 +73,7 @@ public class MenuBarsResourceServerside extends ResourceAbstract implements Menu
                 final String objectType = actionLayoutData.getObjectType();
                 final String relativeUrl = String.format(
                         "objects/%s/%s/actions/%s",
-                        objectType, PersistenceSession.SERVICE_IDENTIFIER, actionLayoutData.getId());
+                        objectType, SystemConstants.SERVICE_IDENTIFIER, actionLayoutData.getId());
                 Link link = new Link(
                         Rel.ACTION.getName(),
                         RestfulHttpMethod.GET.getJavaxRsMethod(),
diff --git a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java
index 402dea9..1c373ce 100644
--- a/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java
+++ b/core/viewer-wicket-impl/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/wicket/AuthenticatedWebSessionForIsis.java
@@ -19,14 +19,6 @@
 
 package org.apache.isis.viewer.wicket.viewer.integration.wicket;
 
-import javax.validation.constraints.NotNull;
-
-import org.apache.wicket.Session;
-import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
-import org.apache.wicket.authroles.authorization.strategies.role.Roles;
-import org.apache.wicket.request.Request;
-import org.apache.wicket.request.cycle.RequestCycle;
-
 import org.apache.isis.applib.clock.Clock;
 import org.apache.isis.applib.services.session.SessionLoggingService;
 import org.apache.isis.core.runtime.system.context.IsisContext;
@@ -39,6 +31,11 @@ import org.apache.isis.viewer.wicket.model.models.BookmarkedPagesModel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
 import org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider;
 import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
+import org.apache.wicket.Session;
+import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
+import org.apache.wicket.authroles.authorization.strategies.role.Roles;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.cycle.RequestCycle;
 
 /**
  * Viewer-specific implementation of {@link AuthenticatedWebSession}, which
@@ -46,7 +43,8 @@ import org.apache.isis.viewer.wicket.ui.pages.BookmarkedPagesModelProvider;
  * also tracks thread usage (so that multiple concurrent requests are all
  * associated with the same session).
  */
-public class AuthenticatedWebSessionForIsis extends AuthenticatedWebSession implements BreadcrumbModelProvider, BookmarkedPagesModelProvider {
+public class AuthenticatedWebSessionForIsis extends AuthenticatedWebSession 
+implements BreadcrumbModelProvider, BookmarkedPagesModelProvider {
 
     private static final long serialVersionUID = 1L;
 
@@ -160,7 +158,7 @@ public class AuthenticatedWebSessionForIsis extends AuthenticatedWebSession impl
     // /////////////////////////////////////////////////
 
     protected AuthenticationManager getAuthenticationManager() {
-        return getIsisSessionFactory().getAuthenticationManager();
+        return IsisContext.getAuthenticationManager();
     }
 
     // /////////////////////////////////////////////////
@@ -190,11 +188,11 @@ public class AuthenticatedWebSessionForIsis extends AuthenticatedWebSession impl
 
     }
 
-    protected @NotNull SessionLoggingService getSessionLoggingService() {
+    protected SessionLoggingService getSessionLoggingService() {
         try {
-            final SessionLoggingService service = getIsisSessionFactory().getServiceInjector()
-                    .lookupService(SessionLoggingService.class)
-                    .orElseGet(SessionLoggingService.Stderr::new);
+            final SessionLoggingService service = 
+            		IsisContext.getServiceRegistry().lookupService(SessionLoggingService.class)
+            		.orElseGet(SessionLoggingService.Stderr::new);
             return service;
         } catch (Exception e) {
             // fallback to System.err
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 5d9cadf..f7fb460 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,14 +19,13 @@
 
 package org.apache.isis.viewer.wicket.model.models;
 
-import org.apache.wicket.model.LoadableDetachableModel;
-
 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.IsisSession;
 import org.apache.isis.core.runtime.system.session.IsisSessionFactory;
 import org.apache.isis.core.security.authentication.AuthenticationSession;
+import org.apache.wicket.model.LoadableDetachableModel;
 
 /**
  * Adapter for {@link LoadableDetachableModel}s, providing access to some of the
@@ -49,9 +48,10 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> {
     // //////////////////////////////////////////////////////////////
 
     protected AuthenticationSession getAuthenticationSession() {
-        return getCurrentSession().getAuthenticationSession();
+        return IsisContext.getAuthenticationSession().orElse(null);
     }
 
+    @Deprecated //TODO [2033] replace with ManagedObjectContext
     public PersistenceSession getPersistenceSession() {
         return getCurrentSession().getPersistenceSession();
     }
@@ -65,7 +65,7 @@ public abstract class ModelAbstract<T> extends LoadableDetachableModel<T> {
     }
 
     public SpecificationLoader getSpecificationLoader() {
-        return getIsisSessionFactory().getSpecificationLoader();
+        return IsisContext.getSpecificationLoader();
     }