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