You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/09 13:47:52 UTC

[isis] branch ISIS-2727 updated: ISIS-2727: factors out InteractionHandler as superinterface of InteractionFactory

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

danhaywood pushed a commit to branch ISIS-2727
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/ISIS-2727 by this push:
     new 2fac54a  ISIS-2727: factors out InteractionHandler as superinterface of InteractionFactory
2fac54a is described below

commit 2fac54a041c11c26473c63d79d6d0b9f9d967546
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jun 9 14:45:27 2021 +0100

    ISIS-2727: factors out InteractionHandler as superinterface of InteractionFactory
---
 .../interaction/integration/IsisRequestCycle.java  |  8 +--
 .../interaction/session/InteractionFactory.java    | 74 ++--------------------
 ...ractionFactory.java => InteractionHandler.java} | 72 +--------------------
 .../core/runtime/context/RuntimeContextBase.java   |  7 +-
 .../command/CommandExecutorServiceDefault.java     |  4 +-
 .../factory/FactoryServiceDefault.java             |  4 +-
 .../commandlog/jdo/entities/CommandJdo_retry.java  |  4 +-
 .../viewer/vaadin/model/context/UiContextVaa.java  |  4 +-
 .../viewer/IsisModuleIncViewerVaadinViewer.java    |  6 +-
 .../viewer/vaadin/viewer/IsisServletForVaadin.java | 14 ++--
 .../util/interaction/InteractionTestAbstract.java  |  4 +-
 .../keycloak/webmodule/KeycloakFilter.java         |  6 +-
 .../spring/webmodule/SpringSecurityFilter.java     |  6 +-
 .../applib/services/FixturesLifecycleService.java  |  4 +-
 .../applib/IsisInteractionHandler.java             |  4 +-
 .../testing/integtestsupport/applib/_Helper.java   |  3 +-
 ..._ensureCompatibleAcceptHeader_ContractTest.java |  6 +-
 .../IsisRestfulObjectsInteractionFilter.java       | 10 +--
 .../context/ResourceContext_getArg_Test.java       | 16 ++---
 .../widgets/themepicker/ThemeChooser.java          |  4 +-
 .../wicket/ui/pages/login/IsisSignInPanel.java     |  4 +-
 .../wicket/ui/panels/FormExecutorDefault.java      |  3 +-
 .../AuthenticatedWebSessionForIsis.java            |  3 +-
 ...uthenticatedWebSessionForIsis_Authenticate.java |  9 +--
 .../AuthenticatedWebSessionForIsis_SignIn.java     |  9 +--
 ...uthenticatedWebSessionForIsis_TestAbstract.java |  7 +-
 26 files changed, 85 insertions(+), 210 deletions(-)

diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java
index fffb69b..abf2545 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/IsisRequestCycle.java
@@ -19,7 +19,7 @@
 package org.apache.isis.core.interaction.integration;
 
 import org.apache.isis.applib.services.user.ImpersonatedUserHolder;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.standard.SimpleAuthentication;
 
@@ -33,7 +33,7 @@ import lombok.val;
 @RequiredArgsConstructor(staticName = "next")
 public class IsisRequestCycle {
 
-    private final InteractionFactory isisInteractionFactory;
+    private final InteractionHandler interactionHandler;
     private final ImpersonatedUserHolder impersonatedUserHolder;
 
     // -- SUPPORTING WEB REQUEST CYCLE FOR ISIS ...
@@ -47,7 +47,7 @@ public class IsisRequestCycle {
                         authentication.getValidationCode()))
                 .orElse(authentication);
 
-        isisInteractionFactory.openInteraction(authenticationToUse.getInteractionContext());
+        interactionHandler.openInteraction(authenticationToUse.getInteractionContext());
     }
 
     public void onRequestHandlerExecuted() {
@@ -56,7 +56,7 @@ public class IsisRequestCycle {
 
     public void onEndRequest() {
 
-        isisInteractionFactory.closeInteractionLayers();
+        interactionHandler.closeInteractionLayers();
 
     }
 
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
index 1efc154..30e7f87 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
@@ -41,56 +41,7 @@ import lombok.NonNull;
  * @since 2.0 {@index}
  */
 public interface InteractionFactory
-extends AnonymousInteractionFactory {
-
-    /**
-     * If present, reuses the current top level {@link InteractionLayer}, otherwise creates a new
-     * anonymous one.
-     *
-     * @see #openInteraction(InteractionContext)
-     */
-    InteractionLayer openInteraction();
-
-    /**
-     * Returns a new or reused {@link InteractionLayer} that is a holder of {@link Authentication}
-     * on top of the current thread's authentication layer stack.
-     * <p>
-     * If available reuses an existing {@link Authentication}, otherwise creates a new one.
-     * <p>
-     * The {@link InteractionLayer} represents a user's span of activities interacting with
-     * the application. The session's stack is later closed using {@link #closeInteractionLayers()}.
-     *
-     * @param interactionContext
-     *
-     * @apiNote if the current {@link InteractionLayer} (if any) has an {@link Authentication} that
-     * equals that of the given one, as an optimization, no new layer is pushed onto the stack;
-     * instead the current one is returned
-     */
-    InteractionLayer openInteraction(
-            @NonNull InteractionContext interactionContext);
-
-    /**
-     * @return whether the calling thread is within the context of an open {@link InteractionLayer}
-     */
-    boolean isInInteraction();
-
-    /**
-     * Executes a block of code with a new or reused {@link InteractionContext} using a new or
-     * reused {@link InteractionLayer}.
-     *
-     * <p>
-     * If there is currently no {@link InteractionLayer} a new one is created.
-     * </p>
-     *
-     * <p>
-     * If there is currently an {@link InteractionLayer} that has an equal {@link InteractionContext}
-     * to the given one, it is reused, otherwise a new one is created.
-     * </p>
-     *
-     * @param interactionContext - the context to run under (non-null)
-     * @param callable - the piece of code to run (non-null)
-     */
-    <R> R call(@NonNull InteractionContext interactionContext, @NonNull Callable<R> callable);
+extends AnonymousInteractionFactory, InteractionHandler {
 
     /**
      * As per {@link #call(InteractionContext, Callable)}, using the {@link InteractionContext}
@@ -102,12 +53,13 @@ extends AnonymousInteractionFactory {
     <R> R callAuthenticated(@NonNull Authentication authentication, @NonNull Callable<R> callable);
 
     /**
-     * Variant of {@link #call(InteractionContext, Callable)} that takes a runnable.
+     * As per {@link #call(InteractionContext, Callable)}, but using an {@link InteractionContext}
+     * {@link Authentication#getInteractionContext() obtained} from an anonymous {@link Authentication}.
      *
-     * @param interactionContext - the user details to run under (non-null)
-     * @param runnable (non-null)
+     * @param <R>
+     * @param callable (non-null)
      */
-    void run(@NonNull InteractionContext interactionContext, @NonNull ThrowingRunnable runnable);
+    <R> R callAnonymous(@NonNull Callable<R> callable);
 
     /**
      * As per {@link #callAuthenticated(Authentication, Callable)}, but for a runnable.
@@ -118,15 +70,6 @@ extends AnonymousInteractionFactory {
     void runAuthenticated(@NonNull Authentication authentication, @NonNull ThrowingRunnable runnable);
 
     /**
-     * As per {@link #call(InteractionContext, Callable)}, but using an {@link InteractionContext}
-     * {@link Authentication#getInteractionContext() obtained} from an anonymous {@link Authentication}.
-     *
-     * @param <R>
-     * @param callable (non-null)
-     */
-    <R> R callAnonymous(@NonNull Callable<R> callable);
-
-    /**
      * As per {@link #callAnonymous(Callable)}, but for a runnable.
      *
      * @param runnable (non-null)
@@ -134,10 +77,5 @@ extends AnonymousInteractionFactory {
     @Override
     void runAnonymous(@NonNull ThrowingRunnable runnable);
 
-    /**
-     * closes all open {@link InteractionLayer}(s) as stacked on the current thread
-     */
-    void closeInteractionLayers();
-
 
 }
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionHandler.java
similarity index 50%
copy from core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
copy to core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionHandler.java
index 1efc154..f121530 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionFactory.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionHandler.java
@@ -1,22 +1,3 @@
-/*
- *  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.interaction.session;
 
 import java.util.concurrent.Callable;
@@ -24,25 +5,10 @@ import java.util.concurrent.Callable;
 import org.apache.isis.applib.services.iactnlayer.InteractionContext;
 import org.apache.isis.applib.services.iactnlayer.ThrowingRunnable;
 import org.apache.isis.core.security.authentication.Authentication;
-import org.apache.isis.core.security.authentication.manager.AnonymousInteractionFactory;
 
 import lombok.NonNull;
 
-/**
- * The factory of {@link Authentication}(s) and {@link InteractionLayer}(s),
- * holding a reference to the current
- * {@link InteractionLayer authentication layer} stack using
- * a thread-local.
- *
- * <p>
- * @apiNote This is a framework internal class and so does not constitute a formal API.
- * </p>
- *
- * @since 2.0 {@index}
- */
-public interface InteractionFactory
-extends AnonymousInteractionFactory {
-
+public interface InteractionHandler {
     /**
      * If present, reuses the current top level {@link InteractionLayer}, otherwise creates a new
      * anonymous one.
@@ -93,15 +59,6 @@ extends AnonymousInteractionFactory {
     <R> R call(@NonNull InteractionContext interactionContext, @NonNull Callable<R> callable);
 
     /**
-     * As per {@link #call(InteractionContext, Callable)}, using the {@link InteractionContext}
-     * {@link Authentication#getInteractionContext() obtained} from the provided {@link Authentication}.
-     *
-     * @param authentication - the user details to run under (non-null)
-     * @param callable - the piece of code to run (non-null)
-     */
-    <R> R callAuthenticated(@NonNull Authentication authentication, @NonNull Callable<R> callable);
-
-    /**
      * Variant of {@link #call(InteractionContext, Callable)} that takes a runnable.
      *
      * @param interactionContext - the user details to run under (non-null)
@@ -110,34 +67,7 @@ extends AnonymousInteractionFactory {
     void run(@NonNull InteractionContext interactionContext, @NonNull ThrowingRunnable runnable);
 
     /**
-     * As per {@link #callAuthenticated(Authentication, Callable)}, but for a runnable.
-     *
-     * @param authentication - the user details to run under (non-null)
-     * @param runnable (non-null)
-     */
-    void runAuthenticated(@NonNull Authentication authentication, @NonNull ThrowingRunnable runnable);
-
-    /**
-     * As per {@link #call(InteractionContext, Callable)}, but using an {@link InteractionContext}
-     * {@link Authentication#getInteractionContext() obtained} from an anonymous {@link Authentication}.
-     *
-     * @param <R>
-     * @param callable (non-null)
-     */
-    <R> R callAnonymous(@NonNull Callable<R> callable);
-
-    /**
-     * As per {@link #callAnonymous(Callable)}, but for a runnable.
-     *
-     * @param runnable (non-null)
-     */
-    @Override
-    void runAnonymous(@NonNull ThrowingRunnable runnable);
-
-    /**
      * closes all open {@link InteractionLayer}(s) as stacked on the current thread
      */
     void closeInteractionLayers();
-
-
 }
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/RuntimeContextBase.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/RuntimeContextBase.java
index dcf20ea..4f700cb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/RuntimeContextBase.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/RuntimeContextBase.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
@@ -51,7 +52,7 @@ public abstract class RuntimeContextBase implements RuntimeContext {
     @Getter(onMethod = @__(@Override)) protected final SpecificationLoader specificationLoader;
     @Getter(onMethod = @__(@Override)) protected final InteractionTracker interactionTracker;
 
-    @Getter protected final InteractionFactory interactionFactory;
+    @Getter protected final InteractionHandler interactionHandler;
     @Getter protected final AuthenticationManager authenticationManager;
     @Getter protected final TransactionService transactionService;
     @Getter protected final Supplier<ManagedObject> homePageSupplier;
@@ -68,7 +69,7 @@ public abstract class RuntimeContextBase implements RuntimeContext {
         this.objectManager = mmc.getObjectManager();
         this.transactionService = mmc.getTransactionService();
         this.homePageSupplier = mmc::getHomePageAdapter;
-        this.interactionFactory = serviceRegistry.lookupServiceElseFail(InteractionFactory.class);
+        this.interactionHandler = serviceRegistry.lookupServiceElseFail(InteractionFactory.class);
         this.authenticationManager = serviceRegistry.lookupServiceElseFail(AuthenticationManager.class);
         this.interactionTracker = serviceRegistry.lookupServiceElseFail(InteractionTracker.class);
     }
@@ -89,7 +90,7 @@ public abstract class RuntimeContextBase implements RuntimeContext {
         .ifPresent(authentication->{
 
             authenticationManager.closeSession(authentication);
-            interactionFactory.closeInteractionLayers();
+            interactionHandler.closeInteractionLayers();
 
         });
 
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
index f5ffe9f..3b48317 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/command/CommandExecutorServiceDefault.java
@@ -52,7 +52,7 @@ import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.functional.Result;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
@@ -101,7 +101,7 @@ public class CommandExecutorServiceDefault implements CommandExecutorService {
     @Inject final InteractionTracker isisInteractionTracker;
     @Inject final Provider<InteractionProvider> interactionProviderProvider;
 
-    @Inject @Getter final InteractionFactory isisInteractionFactory;
+    @Inject @Getter final InteractionHandler interactionHandler;
     @Inject @Getter final SpecificationLoader specificationLoader;
 
     @Override
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/factory/FactoryServiceDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/factory/FactoryServiceDefault.java
index dfbf858..df1ed3f 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/factory/FactoryServiceDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/factory/FactoryServiceDefault.java
@@ -40,7 +40,7 @@ import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.reflection._Reflect;
 import org.apache.isis.core.config.environment.IsisSystemEnvironment;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
 import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -56,7 +56,7 @@ import lombok.val;
 @Qualifier("Default")
 public class FactoryServiceDefault implements FactoryService {
 
-    @Inject InteractionFactory isisInteractionFactory; // dependsOn
+    @Inject InteractionHandler interactionHandler; // dependsOn
     @Inject private SpecificationLoader specificationLoader;
     @Inject private ServiceInjector serviceInjector;
     @Inject private IsisSystemEnvironment isisSystemEnvironment;
diff --git a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo_retry.java b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo_retry.java
index aeefcb9..4b8bb12 100644
--- a/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo_retry.java
+++ b/extensions/core/command-log/jdo/src/main/java/org/apache/isis/extensions/commandlog/jdo/entities/CommandJdo_retry.java
@@ -29,7 +29,7 @@ import org.apache.isis.applib.services.command.CommandExecutorService;
 import org.apache.isis.applib.services.metamodel.MetaModelService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.xactn.TransactionService;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.extensions.commandlog.jdo.IsisModuleExtCommandLogJdo;
 import org.apache.isis.extensions.commandlog.model.command.ReplayState;
 
@@ -59,7 +59,7 @@ public class CommandJdo_retry {
         return commandJdo;
     }
 
-    @Inject InteractionFactory isisInteractionFactory;
+    @Inject InteractionHandler interactionHandler;
     @Inject TransactionService transactionService;
     @Inject CommandExecutorService commandExecutorService;
     @Inject RepositoryService repositoryService;
diff --git a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java
index 31d458f..7145182 100644
--- a/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java
+++ b/incubator/viewers/vaadin/model/src/main/java/org/apache/isis/incubator/viewer/vaadin/model/context/UiContextVaa.java
@@ -24,14 +24,14 @@ import java.util.function.Supplier;
 
 import com.vaadin.flow.component.Component;
 
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 public interface UiContextVaa {
 
     //JavaFxViewerConfig getJavaFxViewerConfig();
 
-    InteractionFactory getIsisInteractionFactory();
+    InteractionHandler getIsisInteractionFactory();
     //ActionUiModelFactoryFx getActionUiModelFactory();
 
     void setNewPageHandler(Consumer<Component> onNewPage);
diff --git a/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisModuleIncViewerVaadinViewer.java b/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisModuleIncViewerVaadinViewer.java
index 73cbaeb..9eb66a1 100644
--- a/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisModuleIncViewerVaadinViewer.java
+++ b/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisModuleIncViewerVaadinViewer.java
@@ -41,7 +41,7 @@ import org.springframework.util.ClassUtils;
 import org.springframework.web.context.WebApplicationContext;
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.incubator.viewer.vaadin.ui.IsisModuleIncViewerVaadinUi;
 
 import lombok.val;
@@ -71,7 +71,7 @@ public class IsisModuleIncViewerVaadinViewer {
 
     @Inject private WebApplicationContext context;
     @Inject private VaadinConfigurationProperties configurationProperties;
-    @Inject private InteractionFactory isisInteractionFactory;
+    @Inject private InteractionHandler interactionHandler;
 
     /**
      * Creates a {@link ServletContextInitializer} instance.
@@ -99,7 +99,7 @@ public class IsisModuleIncViewerVaadinViewer {
                     makeContextRelative(urlMapping.replace("*", "")));
         }
         val registration = new ServletRegistrationBean<SpringServlet>(
-                new IsisServletForVaadin(isisInteractionFactory, context, isRootMapping),
+                new IsisServletForVaadin(interactionHandler, context, isRootMapping),
                 urlMapping);
         registration.setInitParameters(initParameters);
         registration.setAsyncSupported(configurationProperties.isAsyncSupported());
diff --git a/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisServletForVaadin.java b/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisServletForVaadin.java
index 6d206a4..8457156 100644
--- a/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisServletForVaadin.java
+++ b/incubator/viewers/vaadin/viewer/src/main/java/org/apache/isis/incubator/viewer/vaadin/viewer/IsisServletForVaadin.java
@@ -29,7 +29,7 @@ import com.vaadin.flow.spring.SpringServlet;
 import org.springframework.context.ApplicationContext;
 
 import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.incubator.viewer.vaadin.ui.auth.AuthSessionStoreUtil;
 
 import lombok.NonNull;
@@ -47,14 +47,14 @@ extends SpringServlet {
 
     private static final long serialVersionUID = 1L;
 
-    private final InteractionFactory isisInteractionFactory;
+    private final InteractionHandler interactionHandler;
 
     public IsisServletForVaadin(
-            @NonNull final InteractionFactory isisInteractionFactory,
+            @NonNull final InteractionHandler interactionHandler,
             @NonNull final ApplicationContext context,
             final boolean forwardingEnforced) {
         super(context, forwardingEnforced);
-        this.isisInteractionFactory = isisInteractionFactory;
+        this.interactionHandler = interactionHandler;
     }
 
 
@@ -68,7 +68,7 @@ extends SpringServlet {
         log.debug("new request incoming (authentication={})", authentication);
 
         if(authentication!=null) {
-            isisInteractionFactory.runAuthenticated(authentication, ()->{
+            interactionHandler.runAuthenticated(authentication, ()->{
                 super.service(request, response);
             });
         } else {
@@ -79,8 +79,8 @@ extends SpringServlet {
 
         log.debug("request was successfully serviced (authentication={})", authentication);
 
-        if(isisInteractionFactory.isInInteraction()) {
-            isisInteractionFactory.closeInteractionLayers();
+        if(interactionHandler.isInInteraction()) {
+            interactionHandler.closeInteractionLayers();
             log.warn("after servicing current request some interactions have been closed forcefully (authentication={})", authentication);
         }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionTestAbstract.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionTestAbstract.java
index 3cfadcc..373fa62 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionTestAbstract.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionTestAbstract.java
@@ -37,7 +37,7 @@ import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Sets;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
 import org.apache.isis.core.metamodel.interactions.managed.CollectionInteraction;
 import org.apache.isis.core.metamodel.interactions.managed.PropertyInteraction;
@@ -53,7 +53,7 @@ import lombok.val;
 public abstract class InteractionTestAbstract extends IsisIntegrationTestAbstract {
 
     @Inject protected ObjectManager objectManager;
-    @Inject protected InteractionFactory interactionFactory;
+    @Inject protected InteractionHandler interactionHandler;
     @Inject protected WrapperFactory wrapper;
     @Inject protected KVStoreForTesting kvStoreForTesting;
     @Inject private javax.inject.Provider<EntityChangeTracker> entityChangeTrackerProvider;
diff --git a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java
index b74de88..d801f42 100644
--- a/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java
+++ b/security/keycloak/src/main/java/org/apache/isis/security/keycloak/webmodule/KeycloakFilter.java
@@ -35,7 +35,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import org.apache.isis.applib.services.user.UserMemento;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.standard.SimpleAuthentication;
 
@@ -46,7 +46,7 @@ import lombok.val;
  */
 public class KeycloakFilter implements Filter {
 
-    @Autowired private InteractionFactory isisInteractionFactory;
+    @Autowired private InteractionHandler interactionHandler;
 
     @Override
     public void doFilter(
@@ -69,7 +69,7 @@ public class KeycloakFilter implements Filter {
         val authentication = SimpleAuthentication.of(user, subjectHeader);
         authentication.setType(Authentication.Type.EXTERNAL);
 
-        isisInteractionFactory.runAuthenticated(
+        interactionHandler.runAuthenticated(
                 authentication,
                 ()->{
                         filterChain.doFilter(servletRequest, servletResponse);
diff --git a/security/spring/src/main/java/org/apache/isis/security/spring/webmodule/SpringSecurityFilter.java b/security/spring/src/main/java/org/apache/isis/security/spring/webmodule/SpringSecurityFilter.java
index 082f530..173cb0e 100644
--- a/security/spring/src/main/java/org/apache/isis/security/spring/webmodule/SpringSecurityFilter.java
+++ b/security/spring/src/main/java/org/apache/isis/security/spring/webmodule/SpringSecurityFilter.java
@@ -33,7 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.context.SecurityContextHolder;
 
 import org.apache.isis.applib.services.user.UserMemento;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.standard.SimpleAuthentication;
 import org.apache.isis.security.spring.authconverters.AuthenticationConverter;
@@ -47,7 +47,7 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class SpringSecurityFilter implements Filter {
 
-    @Autowired private InteractionFactory isisInteractionFactory;
+    @Autowired private InteractionHandler interactionHandler;
 
     @Override
     public void doFilter(
@@ -86,7 +86,7 @@ public class SpringSecurityFilter implements Filter {
         val authentication = SimpleAuthentication.validOf(userMemento);
         authentication.setType(Authentication.Type.EXTERNAL);
 
-        isisInteractionFactory.runAuthenticated(
+        interactionHandler.runAuthenticated(
                 authentication,
                 ()->{
                         filterChain.doFilter(servletRequest, servletResponse);
diff --git a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
index ccd947f..0d98961 100644
--- a/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
+++ b/testing/fixtures/applib/src/main/java/org/apache/isis/testing/fixtures/applib/services/FixturesLifecycleService.java
@@ -33,7 +33,7 @@ import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.core.config.IsisConfiguration;
 import org.apache.isis.core.config.environment.IsisSystemEnvironment;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.metamodel.events.MetamodelEvent;
 import org.apache.isis.testing.fixtures.applib.clock.clock.Clock;
 import org.apache.isis.testing.fixtures.applib.clock.clock.FixtureClock;
@@ -56,7 +56,7 @@ public class FixturesLifecycleService {
     @SuppressWarnings("unused")
 
     @Inject
-    private InteractionFactory isisInteractionFactory; // depends on relationship
+    private InteractionHandler interactionHandler; // depends on relationship
     @Inject
     private IsisSystemEnvironment isisSystemEnvironment;
     @Inject
diff --git a/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/IsisInteractionHandler.java b/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/IsisInteractionHandler.java
index 83a7160..bf5b655 100644
--- a/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/IsisInteractionHandler.java
+++ b/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/IsisInteractionHandler.java
@@ -22,7 +22,7 @@ import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 
 /**
  * @since 2.0 {@index}
@@ -38,7 +38,7 @@ public class IsisInteractionHandler implements BeforeEachCallback, AfterEachCall
     @Override
     public void afterEach(ExtensionContext extensionContext) throws Exception {
         _Helper.getInteractionFactory(extensionContext)
-        .ifPresent(InteractionFactory::closeInteractionLayers);
+        .ifPresent(InteractionHandler::closeInteractionLayers);
     }
 
 
diff --git a/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/_Helper.java b/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/_Helper.java
index d319e20..85cc9f6 100644
--- a/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/_Helper.java
+++ b/testing/integtestsupport/applib/src/main/java/org/apache/isis/testing/integtestsupport/applib/_Helper.java
@@ -25,6 +25,7 @@ import org.junit.jupiter.api.extension.ExtensionContext;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 
 class _Helper {
 
@@ -37,7 +38,7 @@ class _Helper {
 
     // -- SHORTCUTS
 
-    static Optional<InteractionFactory> getInteractionFactory(final ExtensionContext extensionContext) {
+    static Optional<InteractionHandler> getInteractionFactory(final ExtensionContext extensionContext) {
         return getServiceRegistry(extensionContext)
         .flatMap(serviceRegistry->serviceRegistry.lookupService(InteractionFactory.class));
     }
diff --git a/viewers/restfulobjects/testing/src/main/java/org/apache/isis/viewer/restfulobjects/testing/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java b/viewers/restfulobjects/testing/src/main/java/org/apache/isis/viewer/restfulobjects/testing/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
index cf3e095..8e3c894 100644
--- a/viewers/restfulobjects/testing/src/main/java/org/apache/isis/viewer/restfulobjects/testing/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
+++ b/viewers/restfulobjects/testing/src/main/java/org/apache/isis/viewer/restfulobjects/testing/ResourceContext_ensureCompatibleAcceptHeader_ContractTest.java
@@ -39,7 +39,7 @@ import org.springframework.web.context.WebApplicationContext;
 
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
@@ -65,7 +65,7 @@ public abstract class ResourceContext_ensureCompatibleAcceptHeader_ContractTest
     @Mock HttpHeaders mockHttpHeaders;
     @Mock HttpServletRequest mockHttpServletRequest;
     @Mock ServletContext mockServletContext;
-    @Mock InteractionFactory mockIsisInteractionFactory;
+    @Mock InteractionHandler mockInteractionHandler;
     @Mock Interaction mockInteraction;
     @Mock Authentication mockAuthentication;
     @Mock SpecificationLoader mockSpecificationLoader;
@@ -85,7 +85,7 @@ public abstract class ResourceContext_ensureCompatibleAcceptHeader_ContractTest
                 .authentication(mockAuthentication)
                 .singleton(mockAuthenticationManager)
                 .singleton(mockIsisInteractionTracker)
-                .singleton(mockIsisInteractionFactory)
+                .singleton(mockInteractionHandler)
                 .build();
 
         context.checking(new Expectations() {
diff --git a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsInteractionFilter.java b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsInteractionFilter.java
index ccfb3a8..bef0460 100644
--- a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsInteractionFilter.java
+++ b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/webmodule/IsisRestfulObjectsInteractionFilter.java
@@ -48,7 +48,7 @@ import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.commons.internal.factory._InstanceUtil;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.metamodel.commons.StringExtensions;
 import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
@@ -157,7 +157,7 @@ public class IsisRestfulObjectsInteractionFilter implements Filter {
         return Pattern.compile(".*\\." + input);
     };
 
-    @Autowired private InteractionFactory isisInteractionFactory;
+    @Autowired private InteractionHandler interactionHandler;
     @Autowired private SpecificationLoader specificationLoader;
     @Autowired private TransactionService transactionService;
 
@@ -344,7 +344,7 @@ public class IsisRestfulObjectsInteractionFilter implements Filter {
     @Override
     public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
 
-        requires(isisInteractionFactory, "isisInteractionFactory");
+        requires(interactionHandler, "isisInteractionFactory");
         requires(specificationLoader, "specificationLoader");
 
         ensureMetamodelIsValid(specificationLoader);
@@ -379,7 +379,7 @@ public class IsisRestfulObjectsInteractionFilter implements Filter {
 
                 authStrategy.bind(httpServletRequest, httpServletResponse, authentication);
 
-                isisInteractionFactory.runAuthenticated(
+                interactionHandler.runAuthenticated(
                         authentication,
                         ()->{
 
@@ -406,7 +406,7 @@ public class IsisRestfulObjectsInteractionFilter implements Filter {
             }
 
         } finally {
-            isisInteractionFactory.closeInteractionLayers();
+            interactionHandler.closeInteractionLayers();
         }
 
     }
diff --git a/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java b/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
index fae774e..0ab4fb8 100644
--- a/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
+++ b/viewers/restfulobjects/viewer/src/test/java/org/apache/isis/viewer/restfulobjects/viewer/context/ResourceContext_getArg_Test.java
@@ -32,7 +32,7 @@ import org.junit.Test;
 import org.springframework.web.context.WebApplicationContext;
 
 import org.apache.isis.commons.internal.codec._UrlDecoderUtil;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.interaction.session.IsisInteraction;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
@@ -55,7 +55,7 @@ public class ResourceContext_getArg_Test {
     @Mock private HttpServletRequest mockHttpServletRequest;
     @Mock private ServletContext mockServletContext;
     @Mock private IsisInteraction mockIsisInteraction;
-    @Mock private InteractionFactory mockIsisInteractionFactory;
+    @Mock private InteractionHandler mockInteractionHandler;
     @Mock private InteractionTracker mockIsisInteractionTracker;
     @Mock private AuthenticationManager mockAuthenticationManager;
     @Mock private Authentication mockAuthentication;
@@ -72,7 +72,7 @@ public class ResourceContext_getArg_Test {
 
         metaModelContext = MetaModelContext_forTesting.builder()
                 .specificationLoader(mockSpecificationLoader)
-                .singleton(mockIsisInteractionFactory)
+                .singleton(mockInteractionHandler)
                 .singleton(mockAuthenticationManager)
                 .singleton(mockIsisInteractionTracker)
                 //                .serviceInjector(mockServiceInjector)
@@ -84,19 +84,19 @@ public class ResourceContext_getArg_Test {
 
 
         context.checking(new Expectations() {{
-                
+
                 allowing(webApplicationContext).getBean(MetaModelContext.class);
                 will(returnValue(metaModelContext));
-            
+
                 allowing(mockServletContext).getAttribute("org.springframework.web.context.WebApplicationContext.ROOT");
                 will(returnValue(webApplicationContext));
-            
+
                 allowing(mockHttpServletRequest).getServletContext();
                 will(returnValue(mockServletContext));
-                
+
                 allowing(mockHttpServletRequest).getQueryString();
                 will(returnValue(""));
-         
+
         }});
     }
 
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/themepicker/ThemeChooser.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/themepicker/ThemeChooser.java
index 893db8a..502e529 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/themepicker/ThemeChooser.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/widgets/themepicker/ThemeChooser.java
@@ -32,7 +32,7 @@ import org.apache.wicket.util.cookies.CookieUtils;
 import org.apache.wicket.util.string.Strings;
 
 import org.apache.isis.core.config.IsisConfiguration;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 
 import lombok.Getter;
 import lombok.val;
@@ -158,5 +158,5 @@ public class ThemeChooser extends Panel {
 
     @Inject @Getter private IsisWicketThemeSupport themeSupport;
     @Inject @Getter private IsisConfiguration configuration;
-    @Inject @Getter private InteractionFactory isisInteractionFactory;
+    @Inject @Getter private InteractionHandler interactionHandler;
 }
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java
index 1835228..514bb71 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/login/IsisSignInPanel.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.userreg.EmailNotificationService;
 import org.apache.isis.applib.services.userreg.UserRegistrationService;
 import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
 
@@ -50,7 +50,7 @@ public class IsisSignInPanel extends SignInPanel {
 
     private static final long serialVersionUID = 1L;
 
-    @Inject transient InteractionFactory isisInteractionFactory;
+    @Inject transient InteractionHandler interactionHandler;
     @Inject transient ServiceInjector serviceInjector;
     @Inject transient ServiceRegistry serviceRegistry;
     @Inject transient private PageClassRegistry pageClassRegistry;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index 2537eee..2457ab6 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -41,6 +41,7 @@ import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.commons.internal.collections._Sets;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.MessageBroker;
 import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacet;
 import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet;
@@ -429,7 +430,7 @@ implements FormExecutor {
         return getCommonContext().getSpecificationLoader();
     }
 
-    protected InteractionFactory getIsisInteractionFactory() {
+    protected InteractionHandler getIsisInteractionFactory() {
         return getCommonContext().lookupServiceElseFail(InteractionFactory.class);
     }
 
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java
index d999355..6b371b7 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis.java
@@ -32,6 +32,7 @@ import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.session.SessionLoggingService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext.HasCommonContext;
@@ -268,7 +269,7 @@ implements BreadcrumbModelProvider, BookmarkedPagesModelProvider, HasCommonConte
         return commonContext.getServiceRegistry().select(SessionLoggingService.class);
     }
 
-    protected InteractionFactory getIsisInteractionFactory() {
+    protected InteractionHandler getIsisInteractionFactory() {
         return commonContext.lookupServiceElseFail(InteractionFactory.class);
     }
 
diff --git a/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_Authenticate.java b/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_Authenticate.java
index bb1a2a0..43d4134 100644
--- a/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_Authenticate.java
+++ b/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_Authenticate.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.services.session.SessionLoggingService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.applib.services.iactnlayer.ThrowingRunnable;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
@@ -62,7 +63,7 @@ public class AuthenticatedWebSessionForIsis_Authenticate {
     private AuthenticationManager authMgr;
     @Mock protected Authenticator mockAuthenticator;
     @Mock protected IsisAppCommonContext mockCommonContext;
-    @Mock protected InteractionFactory mockInteractionFactory;
+    @Mock protected InteractionHandler mockInteractionHandler;
     @Mock protected InteractionTracker mockInteractionTracker;
     @Mock protected ServiceRegistry mockServiceRegistry;
 
@@ -84,7 +85,7 @@ public class AuthenticatedWebSessionForIsis_Authenticate {
                 will(returnValue(Can.empty()));
 
                 allowing(mockCommonContext).lookupServiceElseFail(InteractionFactory.class);
-                will(returnValue(mockInteractionFactory));
+                will(returnValue(mockInteractionHandler));
 
                 allowing(mockCommonContext).getInteractionTracker();
                 will(returnValue(mockInteractionTracker));
@@ -92,10 +93,10 @@ public class AuthenticatedWebSessionForIsis_Authenticate {
                 allowing(mockInteractionTracker).currentAuthentication();
                 will(returnValue(Optional.of(new SingleUserAuthentication())));
 
-                allowing(mockInteractionFactory)
+                allowing(mockInteractionHandler)
                 .runAuthenticated(with(new SingleUserAuthentication()), with(any(ThrowingRunnable.class)));
 
-                allowing(mockInteractionFactory)
+                allowing(mockInteractionHandler)
                 .runAnonymous(with(any(ThrowingRunnable.class)));
 
                 // ignore
diff --git a/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_SignIn.java b/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_SignIn.java
index 78e0d52..3b28564 100644
--- a/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_SignIn.java
+++ b/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_SignIn.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.services.session.SessionLoggingService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.applib.services.iactnlayer.ThrowingRunnable;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.core.security.authentication.AuthenticationRequest;
@@ -58,7 +59,7 @@ public class AuthenticatedWebSessionForIsis_SignIn {
     private AuthenticationManager authMgr;
     @Mock protected Authenticator mockAuthenticator;
     @Mock protected IsisAppCommonContext mockCommonContext;
-    @Mock protected InteractionFactory mockInteractionFactory;
+    @Mock protected InteractionHandler mockInteractionHandler;
     @Mock protected ServiceRegistry mockServiceRegistry;
 
     protected AuthenticatedWebSessionForIsis webSession;
@@ -82,12 +83,12 @@ public class AuthenticatedWebSessionForIsis_SignIn {
                 will(returnValue(Can.empty()));
 
                 allowing(mockCommonContext).lookupServiceElseFail(InteractionFactory.class);
-                will(returnValue(mockInteractionFactory));
+                will(returnValue(mockInteractionHandler));
 
-                allowing(mockInteractionFactory)
+                allowing(mockInteractionHandler)
                 .runAuthenticated(with(new SingleUserAuthentication()), with(any(ThrowingRunnable.class)));
 
-                allowing(mockInteractionFactory)
+                allowing(mockInteractionHandler)
                 .runAnonymous(with(any(ThrowingRunnable.class)));
 
                 // ignore
diff --git a/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_TestAbstract.java b/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_TestAbstract.java
index b545cc9..4cec39a 100644
--- a/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_TestAbstract.java
+++ b/viewers/wicket/viewer/src/test/java/org/apache/isis/viewer/wicket/viewer/integration/AuthenticatedWebSessionForIsis_TestAbstract.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.services.registry.ServiceRegistry;
 import org.apache.isis.applib.services.session.SessionLoggingService;
 import org.apache.isis.applib.services.iactnlayer.ThrowingRunnable;
 import org.apache.isis.core.interaction.session.InteractionFactory;
+import org.apache.isis.core.interaction.session.InteractionHandler;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
@@ -45,7 +46,7 @@ public abstract class AuthenticatedWebSessionForIsis_TestAbstract {
     @Mock protected Request mockRequest;
     @Mock protected AuthenticationManager mockAuthMgr;
     @Mock protected IsisAppCommonContext mockCommonContext;
-    @Mock protected InteractionFactory mockIsisInteractionFactory;
+    @Mock protected InteractionHandler mockInteractionHandler;
     @Mock protected ServiceRegistry mockServiceRegistry;
 
     protected AuthenticatedWebSessionForIsis webSession;
@@ -60,9 +61,9 @@ public abstract class AuthenticatedWebSessionForIsis_TestAbstract {
                 will(returnValue(Optional.empty()));
 
                 allowing(mockCommonContext).lookupServiceElseFail(InteractionFactory.class);
-                will(returnValue(mockIsisInteractionFactory));
+                will(returnValue(mockInteractionHandler));
 
-                allowing(mockIsisInteractionFactory).runAuthenticated(new SingleUserAuthentication(), with(any(ThrowingRunnable.class)));
+                allowing(mockInteractionHandler).runAuthenticated(new SingleUserAuthentication(), with(any(ThrowingRunnable.class)));
                 // ignore
 
                 // must provide explicit expectation, since Locale is final.