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 2021/04/01 04:43:42 UTC

[isis] branch master updated: ISIS-2573: remove InteractionSesson (unify w/ IsisInteraction)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 44a43cf  ISIS-2573: remove InteractionSesson (unify w/ IsisInteraction)
44a43cf is described below

commit 44a43cfb57b827985e2ca16d1cb551aff1a1ed09
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Apr 1 06:43:29 2021 +0200

    ISIS-2573: remove InteractionSesson (unify w/ IsisInteraction)
---
 .../commons/having/HasTypeSpecificAttributes.java  |  32 ++---
 ...teractionAwareTransactionalBoundaryHandler.java |  10 +-
 .../interaction/scope/InteractionScopeAware.java   |  10 +-
 .../interaction/session/AuthenticationLayer.java   |  12 +-
 .../interaction/session/InteractionSession.java    | 144 ---------------------
 .../interaction/session/InteractionTracker.java    |   7 +-
 .../core/interaction/session/IsisInteraction.java  |  58 ++++++++-
 .../metamodel/execution/InteractionInternal.java   |   6 +-
 .../runtime/events/TransactionEventEmitter.java    |   6 +-
 .../session/InteractionFactoryDefault.java         |  36 +++---
 .../isis/core/runtimeservices/session/_Xray.java   |   4 +-
 .../transaction/TransactionServiceSpring.java      |   6 +-
 .../java/demoapp/web/linebreaker/LineBreaker.java  |   4 +-
 .../viewer/javafx/ui/main/UiBuilderFx.java         |  10 +-
 .../viewer/vaadin/viewer/IsisServletForVaadin.java |   4 +-
 .../testdomain/conf/Configuration_headless.java    |  10 +-
 .../util/interaction/InteractionBoundaryProbe.java |   6 +-
 ..._ensureCompatibleAcceptHeader_ContractTest.java |  10 +-
 .../context/ResourceContext_getArg_Test.java       |  10 +-
 .../wicket/ui/app/logout/LogoutHandlerWkt.java     |   4 +-
 .../ajaxtable/PrototypingMessageProvider.java      |   4 +-
 .../viewer/integration/WebRequestCycleForIsis.java |   4 +-
 22 files changed, 154 insertions(+), 243 deletions(-)

diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java b/commons/src/main/java/org/apache/isis/commons/having/HasTypeSpecificAttributes.java
similarity index 55%
copy from core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java
copy to commons/src/main/java/org/apache/isis/commons/having/HasTypeSpecificAttributes.java
index c9d336d..d2cae2b 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java
+++ b/commons/src/main/java/org/apache/isis/commons/having/HasTypeSpecificAttributes.java
@@ -16,26 +16,22 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.core.interaction.scope;
+package org.apache.isis.commons.having;
 
-import org.apache.isis.core.interaction.session.InteractionSession;
+import java.util.function.Function;
 
-public interface InteractionScopeAware {
+public interface HasTypeSpecificAttributes {
 
-    default void beforeEnteringTransactionalBoundary(InteractionSession interactionSession) {
-        
-    }
-    
-    default void afterEnteringTransactionalBoundary(InteractionSession interactionSession, boolean isSynchronizationActive) {
-        
-    }
-    
-    default void beforeLeavingTransactionalBoundary(InteractionSession interactionSession, boolean isSynchronizationActive) {
-        
-    }
-    
-    default void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
-        
-    }
+    /** add type specific attribute */
+    <T> T putAttribute(Class<? super T> type, T value);
+
+    /** conditionally add type specific attribute */
+    <T> T computeAttributeIfAbsent(Class<? super T> type, Function<Class<?>, ? extends T> mappingFunction);
+
+    /** get type specific attribute */
+    <T> T getAttribute(Class<T> type);
+
+    /** remove type specific attribute */
+    void removeAttribute(Class<?> type);
     
 }
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
index ed6e1de..1e302f0 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/integration/InteractionAwareTransactionalBoundaryHandler.java
@@ -38,7 +38,7 @@ import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.functional.ThrowingRunnable;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.debug._Probe;
-import org.apache.isis.core.interaction.session.InteractionSession;
+import org.apache.isis.core.interaction.session.IsisInteraction;
 
 import lombok.NonNull;
 import lombok.Value;
@@ -62,7 +62,7 @@ public class InteractionAwareTransactionalBoundaryHandler {
     
     // -- OPEN
 
-    public void onOpen(final @NonNull InteractionSession session) {
+    public void onOpen(final @NonNull IsisInteraction interaction) {
 
         if (log.isDebugEnabled()) {
             log.debug("opening on {}", _Probe.currentThreadId());
@@ -73,7 +73,7 @@ public class InteractionAwareTransactionalBoundaryHandler {
         }
 
         val onCloseTasks = _Lists.<CloseTask>newArrayList(txManagers.size());
-        session.putAttribute(Handle.class, new Handle(onCloseTasks));
+        interaction.putAttribute(Handle.class, new Handle(onCloseTasks));
         
         txManagers.forEach(txManager->newTransactionOrParticipateInExisting(txManager, onCloseTasks::add));
         
@@ -81,7 +81,7 @@ public class InteractionAwareTransactionalBoundaryHandler {
 
     // -- CLOSE
 
-    public void onClose(final @NonNull InteractionSession session) {
+    public void onClose(final @NonNull IsisInteraction interaction) {
 
         if (log.isDebugEnabled()) {
             log.debug("closing on {}", _Probe.currentThreadId());
@@ -91,7 +91,7 @@ public class InteractionAwareTransactionalBoundaryHandler {
             return; // nothing to do 
         }
 
-        val onCloseTasks = Optional.ofNullable(session.getAttribute(Handle.class))
+        val onCloseTasks = Optional.ofNullable(interaction.getAttribute(Handle.class))
                 .map(Handle::getOnCloseTasks);
         
         onCloseTasks
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java
index c9d336d..0b0eac6 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/scope/InteractionScopeAware.java
@@ -18,23 +18,23 @@
  */
 package org.apache.isis.core.interaction.scope;
 
-import org.apache.isis.core.interaction.session.InteractionSession;
+import org.apache.isis.applib.services.iactn.Interaction;
 
 public interface InteractionScopeAware {
 
-    default void beforeEnteringTransactionalBoundary(InteractionSession interactionSession) {
+    default void beforeEnteringTransactionalBoundary(Interaction interaction) {
         
     }
     
-    default void afterEnteringTransactionalBoundary(InteractionSession interactionSession, boolean isSynchronizationActive) {
+    default void afterEnteringTransactionalBoundary(Interaction interaction, boolean isSynchronizationActive) {
         
     }
     
-    default void beforeLeavingTransactionalBoundary(InteractionSession interactionSession, boolean isSynchronizationActive) {
+    default void beforeLeavingTransactionalBoundary(Interaction interaction, boolean isSynchronizationActive) {
         
     }
     
-    default void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
+    default void afterLeavingTransactionalBoundary(Interaction interaction) {
         
     }
     
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/AuthenticationLayer.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/AuthenticationLayer.java
index 7c417f0..d4567ab 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/AuthenticationLayer.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/AuthenticationLayer.java
@@ -34,18 +34,16 @@ import lombok.NonNull;
  */
 public class AuthenticationLayer {
 
-	@Getter private final InteractionSession interactionSession;
+	@Getter private final IsisInteraction interaction;
 	@Getter private final Authentication authentication;
 
 	public AuthenticationLayer(
-			final @NonNull InteractionSession interactionSession,
+			final @NonNull IsisInteraction interaction,
 			final @NonNull Authentication authentication) {
 
-		//super(interactionSession.getMetaModelContext());
-
-		// current thread's InteractionSession which this layer belongs to,
-		// meaning the InteractionSession that holds the stack containing this layer
-		this.interactionSession = interactionSession;
+		// current thread's Interaction which this layer belongs to,
+		// meaning the Interaction that holds the stack containing this layer
+		this.interaction = interaction;
 
 		// binds given authentication to this layer
 		this.authentication = authentication;
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionSession.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionSession.java
deleted file mode 100644
index 096698b..0000000
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionSession.java
+++ /dev/null
@@ -1,144 +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.interaction.session;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-import java.util.function.Function;
-
-import org.apache.isis.applib.mixins.system.HasInteractionId;
-import org.apache.isis.applib.services.iactn.Interaction;
-import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
-import org.apache.isis.core.metamodel.commons.ToString;
-import org.apache.isis.core.metamodel.context.MetaModelContext;
-
-import lombok.Getter;
-import lombok.NonNull;
-import lombok.Setter;
-
-/**
- * Holds the current set of components for a specific execution context
- * (such as on a thread).
- *
- * <p>
- *     Not to be confused with the applib's
- *     {@link org.apache.isis.applib.services.iactn.Interaction} object, which
- *     captures the details of an action invocation or property edit (along
- *     with any nested calls to other actions through wrapper factory) for
- *     the purpose of publishing using
- *     {@link org.apache.isis.applib.services.publishing.spi.ExecutionSubscriber}.
- * </p>
- *
- * @see InteractionFactory
- */
-public class InteractionSession
-implements HasInteractionId {
-
-    @Getter private final long startedAtSystemNanos;
-
-    /**
-     * The {@link MetaModelContext} that holds services for this session.
-     */
-    @Getter private final MetaModelContext metaModelContext;
-
-    public InteractionSession(
-            final @NonNull MetaModelContext mmc,
-            final @NonNull UUID interactionId) {
-
-        this.metaModelContext = mmc;
-        this.startedAtSystemNanos = System.nanoTime(); // used to measure time periods, so not using ClockService here
-        this.interaction = new IsisInteraction(interactionId);
-    }
-
-    // -- INTERACTION ON CLOSE HANDLER
-
-    @Setter private Runnable onClose;
-
-    // -- INTERACTION SCOPED SESSION ATTRIBUTE
-
-    private Map<Class<?>, Object> attributes = null;
-    private boolean closed = false;
-
-	@Getter private Interaction interaction;
-
-    /** add type specific session data */
-    public <T> T putAttribute(Class<? super T> type, T value) {
-        return _Casts.uncheckedCast(attributes().put(type, value));
-    }
-
-    /** conditionally add type specific session data */
-    public <T> T computeAttributeIfAbsent(Class<? super T> type, Function<Class<?>, ? extends T> mappingFunction) {
-        return _Casts.uncheckedCast(attributes().computeIfAbsent(type, mappingFunction));
-    }
-
-    /** get type specific session data */
-    public <T> T getAttribute(Class<T> type) {
-        return (attributes!=null)
-                ? _Casts.uncheckedCast(attributes.get(type))
-                : null;
-    }
-
-    /** remove type specific session data */
-    public void removeAttribute(Class<?> type) {
-        if(attributes!=null) {
-            attributes.remove(type);
-        }
-    }
-
-    /** Do not use, is called by the framework internally. */
-    public void close() {
-        if(onClose!=null) {
-            onClose.run();
-            onClose = null;
-        }
-        attributes = null;
-        closed = true;
-    }
-
-    private Map<Class<?>, Object> attributes() {
-        if(closed) {
-            throw _Exceptions.illegalState(
-                    "IsisInteraction was already closed, cannot access UserData any longer.");
-        }
-        return (attributes==null)
-                ? attributes = new HashMap<>()
-                : attributes;
-    }
-
-    @Override
-    public UUID getInteractionId() {
-        return getInteraction().getInteractionId();
-    }
-
-    // -- TO STRING
-
-    @Override
-    public String toString() {
-        final ToString asString = new ToString(this);
-//        asString.append("transaction", getCurrentTransactionId());
-        return asString.toString();
-    }
-
-
-
-
-}
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java
index a2e5480..8565009 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/InteractionTracker.java
@@ -44,11 +44,6 @@ extends InteractionContext, AuthenticationContext {
         .orElseThrow(()->_Exceptions.illegalState("No InteractionSession available on current thread"));
     }
     
-    /** @return the current request- or test-scoped InteractionSession*/
-    default Optional<InteractionSession> currentInteractionSession() {
-    	return currentAuthenticationLayer().map(AuthenticationLayer::getInteractionSession);
-    }
-    
     default Optional<ExecutionContext> currentExecutionContext() {
         return currentAuthenticationLayer().map(AuthenticationLayer::getExecutionContext);
     }
@@ -64,7 +59,7 @@ extends InteractionContext, AuthenticationContext {
     
     @Override
     default Optional<Interaction> currentInteraction(){
-    	return currentInteractionSession().map(InteractionSession::getInteraction);
+    	return currentAuthenticationLayer().map(AuthenticationLayer::getInteraction);
     }
 
     
diff --git a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/IsisInteraction.java b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/IsisInteraction.java
index 9d192e8..772a724 100644
--- a/core/interaction/src/main/java/org/apache/isis/core/interaction/session/IsisInteraction.java
+++ b/core/interaction/src/main/java/org/apache/isis/core/interaction/session/IsisInteraction.java
@@ -19,9 +19,12 @@
 package org.apache.isis.core.interaction.session;
 
 import java.sql.Timestamp;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.atomic.LongAdder;
+import java.util.function.Function;
 
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.command.Command;
@@ -29,19 +32,23 @@ import org.apache.isis.applib.services.iactn.ActionInvocation;
 import org.apache.isis.applib.services.iactn.Execution;
 import org.apache.isis.applib.services.iactn.PropertyEdit;
 import org.apache.isis.applib.services.metrics.MetricsService;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.execution.InteractionInternal;
 
 import lombok.Getter;
 import lombok.NonNull;
+import lombok.Setter;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
-public class IsisInteraction implements InteractionInternal {
+public class IsisInteraction 
+implements InteractionInternal {
 
     public IsisInteraction(final @NonNull UUID interactionId) {
+        this.startedAtSystemNanos = System.nanoTime(); // used to measure time periods, so not using ClockService here
         this.command = new Command(interactionId);
     }
 
@@ -53,6 +60,26 @@ public class IsisInteraction implements InteractionInternal {
         return command.getInteractionId();
     }
 
+    @Getter private final long startedAtSystemNanos;
+    
+    // -- INTERACTION ON CLOSE HANDLER
+
+    @Setter private Runnable onClose;
+
+    private boolean closed = false;
+
+    /** Do not use, is called by the framework internally. */
+    public void close() {
+        if(!closed
+                && onClose!=null) {
+            onClose.run();
+            onClose = null;
+        }
+        closed = true;
+    }
+    
+    // --
+    
     private final List<Execution<?,?>> executionGraphs = _Lists.newArrayList();
 
     @Getter(onMethod_ = {@Override})
@@ -203,5 +230,34 @@ public class IsisInteraction implements InteractionInternal {
     @Getter(onMethod_ = {@Override})
     private final LongAdder transactionSequence = new LongAdder();
 
+    // -- INTERACTION SCOPED ATTRIBUTES
+
+    // not thread-safe
+    private final Map<Class<?>, Object> attributes = new HashMap<>();
+
+    @Override
+    public <T> T putAttribute(Class<? super T> type, T value) {
+        return _Casts.uncheckedCast(attributes.put(type, value));
+    }
+
+    @Override
+    public <T> T computeAttributeIfAbsent(Class<? super T> type, Function<Class<?>, ? extends T> mappingFunction) {
+        return _Casts.uncheckedCast(attributes.computeIfAbsent(type, mappingFunction));
+    }
+
+    @Override
+    public <T> T getAttribute(Class<T> type) {
+        return (attributes!=null)
+                ? _Casts.uncheckedCast(attributes.get(type))
+                : null;
+    }
+
+    @Override
+    public void removeAttribute(Class<?> type) {
+        if(attributes!=null) {
+            attributes.remove(type);
+        }
+    }
+    
 
 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/execution/InteractionInternal.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/execution/InteractionInternal.java
index 2040978..bce0c1c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/execution/InteractionInternal.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/execution/InteractionInternal.java
@@ -28,11 +28,15 @@ import org.apache.isis.applib.services.iactn.Execution;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.iactn.PropertyEdit;
 import org.apache.isis.applib.services.metrics.MetricsService;
+import org.apache.isis.commons.having.HasTypeSpecificAttributes;
 
 /**
  * @since 2.0
  */
-public interface InteractionInternal extends Interaction {
+public interface InteractionInternal 
+extends 
+    Interaction, 
+    HasTypeSpecificAttributes {
 
     /**
      * (Modeled after {@link Callable}), is the implementation
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/TransactionEventEmitter.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/TransactionEventEmitter.java
index 2b89d0a..ddc3dcb 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/events/TransactionEventEmitter.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/events/TransactionEventEmitter.java
@@ -25,8 +25,8 @@ import org.springframework.transaction.support.TransactionSynchronization;
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 
 import org.apache.isis.applib.services.eventbus.EventBusService;
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.core.interaction.scope.InteractionScopeAware;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.transaction.events.TransactionAfterCompletionEvent;
 import org.apache.isis.core.transaction.events.TransactionBeforeCompletionEvent;
@@ -57,8 +57,8 @@ implements TransactionSynchronization, InteractionScopeAware {
     
     @Override
     public void afterEnteringTransactionalBoundary(
-            InteractionSession interactionSession, 
-            boolean isSynchronizationActive) {
+            final Interaction interaction, 
+            final boolean isSynchronizationActive) {
         if(isSynchronizationActive) {
             TransactionSynchronizationManager.registerSynchronization(this);
         }
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java
index 373c8c4..ba6b67f 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/InteractionFactoryDefault.java
@@ -19,6 +19,8 @@
 
 package org.apache.isis.core.runtimeservices.session;
 
+import static org.apache.isis.commons.internal.base._With.requires;
+
 import java.io.File;
 import java.sql.Timestamp;
 import java.util.List;
@@ -42,6 +44,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
 import org.apache.isis.applib.services.clock.ClockService;
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.applib.util.schema.ChangesDtoUtils;
 import org.apache.isis.applib.util.schema.CommandDtoUtils;
@@ -59,7 +62,6 @@ import org.apache.isis.core.interaction.scope.InteractionScopeBeanFactoryPostPro
 import org.apache.isis.core.interaction.scope.InteractionScopeLifecycleHandler;
 import org.apache.isis.core.interaction.session.AuthenticationLayer;
 import org.apache.isis.core.interaction.session.InteractionFactory;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.interaction.session.IsisInteraction;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
@@ -69,15 +71,13 @@ import org.apache.isis.core.runtime.events.MetamodelEventService;
 import org.apache.isis.core.security.authentication.Authentication;
 import org.apache.isis.core.security.authentication.manager.AuthenticationManager;
 
-import static org.apache.isis.commons.internal.base._With.requires;
-
 import lombok.NonNull;
 import lombok.SneakyThrows;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * Is the factory of {@link InteractionSession}s.
+ * Is the factory of {@link Interaction}s.
  * 
  * @implNote holds a reference to the current session using a thread-local
  */
@@ -204,11 +204,11 @@ implements
         return authenticationLayer;
     }
     
-    private InteractionSession getOrCreateInteractionSession() {
+    private IsisInteraction getOrCreateInteractionSession() {
     	
     	return authenticationStack.get().isEmpty()
-    			? new InteractionSession(metaModelContext, UUID.randomUUID())
-				: authenticationStack.get().firstElement().getInteractionSession();
+    			? new IsisInteraction(UUID.randomUUID())
+				: authenticationStack.get().firstElement().getInteraction();
     }
 
     @Override
@@ -312,23 +312,23 @@ implements
     	return authenticationStack.get().size()==1; 
     }
     
-    private void postSessionOpened(InteractionSession session) {
-        interactionId.set(session.getInteractionId());
-        interactionScopeAwareBeans.forEach(bean->bean.beforeEnteringTransactionalBoundary(session));
-        txBoundaryHandler.onOpen(session);
+    private void postSessionOpened(IsisInteraction interaction) {
+        interactionId.set(interaction.getInteractionId());
+        interactionScopeAwareBeans.forEach(bean->bean.beforeEnteringTransactionalBoundary(interaction));
+        txBoundaryHandler.onOpen(interaction);
         val isSynchronizationActive = TransactionSynchronizationManager.isSynchronizationActive();
-        interactionScopeAwareBeans.forEach(bean->bean.afterEnteringTransactionalBoundary(session, isSynchronizationActive));
+        interactionScopeAwareBeans.forEach(bean->bean.afterEnteringTransactionalBoundary(interaction, isSynchronizationActive));
         interactionScopeLifecycleHandler.onTopLevelInteractionOpened();
     }
     
-    private void preSessionClosed(InteractionSession session) {
+    private void preSessionClosed(IsisInteraction interaction) {
         completeAndPublishCurrentCommand();
         interactionScopeLifecycleHandler.onTopLevelInteractionClosing(); // cleanup the isis-session scope
         val isSynchronizationActive = TransactionSynchronizationManager.isSynchronizationActive();
-        interactionScopeAwareBeans.forEach(bean->bean.beforeLeavingTransactionalBoundary(session, isSynchronizationActive));
-        txBoundaryHandler.onClose(session);
-        interactionScopeAwareBeans.forEach(bean->bean.afterLeavingTransactionalBoundary(session));
-        session.close(); // do this last
+        interactionScopeAwareBeans.forEach(bean->bean.beforeLeavingTransactionalBoundary(interaction, isSynchronizationActive));
+        txBoundaryHandler.onClose(interaction);
+        interactionScopeAwareBeans.forEach(bean->bean.afterLeavingTransactionalBoundary(interaction));
+        interaction.close(); // do this last
     }
     
     private void closeSessionStackDownToStackSize(int downToStackSize) {
@@ -343,7 +343,7 @@ implements
         while(stack.size()>downToStackSize) {
         	if(isInBaseLayer()) {
         		// keep the stack unmodified yet, to allow for callbacks to properly operate
-        		preSessionClosed(stack.peek().getInteractionSession());
+        		preSessionClosed(stack.peek().getInteraction());
         	}
         	_Xray.closeAuthenticationLayer(stack);
             stack.pop();
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java
index 3c5804b..44eb1de 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/_Xray.java
@@ -38,7 +38,7 @@ final class _Xray {
 
         // make defensive copies, so can use in another thread
         final int authStackSize = afterEnter.size();
-        val interactionId = afterEnter.peek().getInteractionSession().getInteractionId();
+        val interactionId = afterEnter.peek().getInteraction().getInteractionId();
         val executionContext = afterEnter.peek().getExecutionContext();
         
         val threadId = XrayUtil.currentThreadAsMemento();
@@ -92,7 +92,7 @@ final class _Xray {
         }
         
         final int authStackSize = beforeClose.size();
-        val interactionId = beforeClose.peek().getInteractionSession().getInteractionId();
+        val interactionId = beforeClose.peek().getInteraction().getInteractionId();
         val sequenceId = XrayUtil.sequenceId(interactionId);
         
         XrayUi.updateModel(model->{
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/transaction/TransactionServiceSpring.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/transaction/TransactionServiceSpring.java
index 0d420a9..80d3d78 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/transaction/TransactionServiceSpring.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/transaction/TransactionServiceSpring.java
@@ -40,6 +40,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
 import org.springframework.transaction.support.TransactionTemplate;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.xactn.TransactionId;
 import org.apache.isis.applib.services.xactn.TransactionService;
 import org.apache.isis.applib.services.xactn.TransactionState;
@@ -48,7 +49,6 @@ 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.scope.InteractionScopeAware;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.interaction.session.InteractionTracker;
 import org.apache.isis.core.transaction.events.TransactionAfterCompletionEvent;
 
@@ -232,7 +232,7 @@ implements
     
     /** INTERACTION BEGIN BOUNDARY */
     @Override
-    public void beforeEnteringTransactionalBoundary(InteractionSession interactionSession) {
+    public void beforeEnteringTransactionalBoundary(Interaction interaction) {
         txCounter.get().reset();
     }
     
@@ -244,7 +244,7 @@ implements
     
     /** INTERACTION END BOUNDARY */
     @Override
-    public void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
+    public void afterLeavingTransactionalBoundary(Interaction interaction) {
         txCounter.remove(); //XXX not tested yet: can we be certain that no txCounter.get() is called afterwards? 
     }
     
diff --git a/examples/demo/web/src/main/java/demoapp/web/linebreaker/LineBreaker.java b/examples/demo/web/src/main/java/demoapp/web/linebreaker/LineBreaker.java
index 23c9c2e..fe93b01 100644
--- a/examples/demo/web/src/main/java/demoapp/web/linebreaker/LineBreaker.java
+++ b/examples/demo/web/src/main/java/demoapp/web/linebreaker/LineBreaker.java
@@ -25,6 +25,7 @@ import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.NatureOfService;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.core.interaction.session.InteractionTracker;
+import org.apache.isis.core.interaction.session.IsisInteraction;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
@@ -46,7 +47,8 @@ public class LineBreaker {
         log.info("about to shutdown the JVM");
 
         // allow for current interaction to complete gracefully
-        isisInteractionTracker.currentInteractionSession()
+        isisInteractionTracker.currentInteraction()
+        .map(IsisInteraction.class::cast)
         .ifPresent(interaction->{
             interaction.setOnClose(()->System.exit(0));
         });
diff --git a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java
index 6996e24..050279b 100644
--- a/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java
+++ b/incubator/viewers/javafx/ui/src/main/java/org/apache/isis/incubator/viewer/javafx/ui/main/UiBuilderFx.java
@@ -26,9 +26,9 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Component;
 
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.core.interaction.scope.InteractionScopeAware;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.incubator.viewer.javafx.model.events.JavaFxViewerConfig;
 import org.apache.isis.incubator.viewer.javafx.model.events.PrimaryStageReadyEvent;
 
@@ -67,17 +67,17 @@ public class UiBuilderFx implements InteractionScopeAware {
     }
 
     @Override
-    public void beforeEnteringTransactionalBoundary(InteractionSession interactionSession) {
+    public void beforeEnteringTransactionalBoundary(Interaction interaction) {
         //TODO this would be the place to indicate to the user, that a long running task has started
         //scene.getRoot().cursorProperty().set(Cursor.WAIT);
-        _Probe.errOut("Interaction HAS_STARTED conversationId=%s", interactionSession.getInteractionId());
+        _Probe.errOut("Interaction HAS_STARTED conversationId=%s", interaction.getInteractionId());
     }
 
     @Override
-    public void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
+    public void afterLeavingTransactionalBoundary(Interaction interaction) {
         //TODO this would be the place to indicate to the user, that a long running task has ended
         //scene.getRoot().cursorProperty().set(Cursor.DEFAULT);
-        _Probe.errOut("Interaction IS_ENDING interactionId=%s", interactionSession.getInteractionId());
+        _Probe.errOut("Interaction IS_ENDING interactionId=%s", interaction.getInteractionId());
     }
 
     // -- HELPER
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 c6ab4d1..2e63ebc 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
@@ -28,8 +28,8 @@ 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.InteractionSession;
 import org.apache.isis.incubator.viewer.vaadin.ui.auth.AuthSessionStoreUtil;
 
 import lombok.NonNull;
@@ -37,7 +37,7 @@ import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 /**
- * An extension of {@link SpringServlet} to support {@link InteractionSession} life-cycle management.
+ * An extension of {@link SpringServlet} to support {@link Interaction} life-cycle management.
  * @since Mar 14, 2020
  *
  */
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java
index 8a2ffc3..6f3c268 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_headless.java
@@ -34,11 +34,11 @@ import org.springframework.transaction.TransactionException;
 import org.springframework.transaction.TransactionStatus;
 
 import org.apache.isis.applib.annotation.OrderPrecedence;
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.metrics.MetricsService;
 import org.apache.isis.commons.internal.debug._Probe;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.interaction.scope.InteractionScopeAware;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
 import org.apache.isis.extensions.modelannotation.metamodel.IsisModuleExtModelAnnotation;
 import org.apache.isis.security.bypass.IsisModuleSecurityBypass;
@@ -69,14 +69,14 @@ public class Configuration_headless {
 //      private final CommandDispatcher commandDispatcher;
 
         @Override
-        public void beforeEnteringTransactionalBoundary(InteractionSession interactionSession) {
-            _Probe.errOut("Interaction HAS_STARTED conversationId=%s", interactionSession.getInteractionId());
+        public void beforeEnteringTransactionalBoundary(Interaction interaction) {
+            _Probe.errOut("Interaction HAS_STARTED conversationId=%s", interaction.getInteractionId());
             setupCommandCreateIfMissing();
         }
 
         @Override
-        public void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
-            _Probe.errOut("Interaction IS_ENDING conversationId=%s", interactionSession.getInteractionId());
+        public void afterLeavingTransactionalBoundary(Interaction interaction) {
+            _Probe.errOut("Interaction IS_ENDING conversationId=%s", interaction.getInteractionId());
         }
 
         public void setupCommandCreateIfMissing() {
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionBoundaryProbe.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionBoundaryProbe.java
index a9c6fc4..59fd016 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionBoundaryProbe.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/InteractionBoundaryProbe.java
@@ -26,8 +26,8 @@ import org.junit.jupiter.api.Assertions;
 import org.springframework.context.event.EventListener;
 import org.springframework.stereotype.Service;
 
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.core.interaction.scope.InteractionScopeAware;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.transaction.events.TransactionAfterCompletionEvent;
 import org.apache.isis.core.transaction.events.TransactionBeforeCompletionEvent;
 import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
@@ -43,14 +43,14 @@ public class InteractionBoundaryProbe implements InteractionScopeAware {
     
     /** INTERACTION BEGIN BOUNDARY */
     @Override
-    public void beforeEnteringTransactionalBoundary(InteractionSession interactionSession) {
+    public void beforeEnteringTransactionalBoundary(Interaction interaction) {
         log.debug("iaStarted");
         kvStoreForTesting.incrementCounter(InteractionBoundaryProbe.class, "iaStarted");
     }
     
     /** INTERACTION END BOUNDARY */
     @Override
-    public void afterLeavingTransactionalBoundary(InteractionSession interactionSession) {
+    public void afterLeavingTransactionalBoundary(Interaction interaction) {
         log.debug("iaEnded");
         kvStoreForTesting.incrementCounter(InteractionBoundaryProbe.class, "iaEnded");
     }
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 bee267b..61e5b24 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
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.viewer.restfulobjects.testing;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -34,12 +37,9 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.springframework.web.context.WebApplicationContext;
 
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
+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.InteractionSession;
 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;
@@ -66,7 +66,7 @@ public abstract class ResourceContext_ensureCompatibleAcceptHeader_ContractTest
     @Mock HttpServletRequest mockHttpServletRequest;
     @Mock ServletContext mockServletContext;
     @Mock InteractionFactory mockIsisInteractionFactory;
-    @Mock InteractionSession mockInteractionSession;
+    @Mock Interaction mockInteraction;
     @Mock Authentication mockAuthentication;
     @Mock SpecificationLoader mockSpecificationLoader;
     @Mock WebApplicationContext webApplicationContext;
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 9044601..fae774e 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
@@ -18,6 +18,9 @@
  */
 package org.apache.isis.viewer.restfulobjects.viewer.context;
 
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 
@@ -28,13 +31,10 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.springframework.web.context.WebApplicationContext;
 
-import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.MatcherAssert.assertThat;
-
 import org.apache.isis.commons.internal.codec._UrlDecoderUtil;
 import org.apache.isis.core.interaction.session.InteractionFactory;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.interaction.session.InteractionTracker;
+import org.apache.isis.core.interaction.session.IsisInteraction;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2;
 import org.apache.isis.core.internaltestsupport.jmocking.JUnitRuleMockery2.Mode;
 import org.apache.isis.core.metamodel._testing.MetaModelContext_forTesting;
@@ -54,7 +54,7 @@ public class ResourceContext_getArg_Test {
 
     @Mock private HttpServletRequest mockHttpServletRequest;
     @Mock private ServletContext mockServletContext;
-    @Mock private InteractionSession mockIsisInteraction;
+    @Mock private IsisInteraction mockIsisInteraction;
     @Mock private InteractionFactory mockIsisInteractionFactory;
     @Mock private InteractionTracker mockIsisInteractionTracker;
     @Mock private AuthenticationManager mockAuthenticationManager;
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/logout/LogoutHandlerWkt.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/logout/LogoutHandlerWkt.java
index bbaa780..46d835d 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/logout/LogoutHandlerWkt.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/app/logout/LogoutHandlerWkt.java
@@ -25,6 +25,7 @@ import org.apache.wicket.request.cycle.RequestCycle;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.core.interaction.session.InteractionTracker;
+import org.apache.isis.core.interaction.session.IsisInteraction;
 import org.apache.isis.core.security.authentication.logout.LogoutHandler;
 
 import lombok.val;
@@ -43,7 +44,8 @@ public class LogoutHandlerWkt implements LogoutHandler {
         }
         
         if(isisInteractionTracker.isInInteraction()) {
-            isisInteractionTracker.currentInteractionSession()
+            isisInteractionTracker.currentInteraction()
+            .map(IsisInteraction.class::cast)
             .ifPresent(interaction->
                 interaction.setOnClose(currentWktSession::invalidateNow));
             
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java
index 925d974..61cbb8f 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/collectioncontents/ajaxtable/PrototypingMessageProvider.java
@@ -21,6 +21,7 @@ package org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable
 import java.util.Locale;
 
 import org.apache.isis.commons.internal.base._Timing;
+import org.apache.isis.core.interaction.session.IsisInteraction;
 import org.apache.isis.core.runtime.context.IsisAppCommonContext;
 import org.apache.isis.viewer.wicket.model.common.CommonContextUtils;
 
@@ -59,7 +60,8 @@ class PrototypingMessageProvider {
 
         final StringBuilder tookTimingMessage = new StringBuilder();
 
-        commonContext().getInteractionTracker().currentInteractionSession()
+        commonContext().getInteractionTracker().currentInteraction()
+        .map(IsisInteraction.class::cast)
         .ifPresent(interaction->{
             val stopWatch = _Timing.atSystemNanos(interaction.getStartedAtSystemNanos());    
             tookTimingMessage.append(String.format(Locale.US, "... took %.2f seconds", stopWatch.getSeconds()));
diff --git a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
index 548fd89..74ccb04 100644
--- a/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
+++ b/viewers/wicket/viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/integration/WebRequestCycleForIsis.java
@@ -50,12 +50,12 @@ import org.apache.isis.applib.services.exceprecog.ExceptionRecognizer;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerForType;
 import org.apache.isis.applib.services.exceprecog.ExceptionRecognizerService;
 import org.apache.isis.applib.services.exceprecog.Recognition;
+import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.interaction.integration.IsisRequestCycle;
 import org.apache.isis.core.interaction.session.InteractionFactory;
-import org.apache.isis.core.interaction.session.InteractionSession;
 import org.apache.isis.core.interaction.session.MessageBroker;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
@@ -74,7 +74,7 @@ import lombok.extern.log4j.Log4j2;
 
 /**
  * Isis-specific implementation of the Wicket's {@link RequestCycle},
- * automatically opening a {@link InteractionSession} at the beginning of the request
+ * automatically opening a {@link Interaction} at the beginning of the request
  * and committing the transaction and closing the session at the end.
  *
  * @since 2.0