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 2020/03/25 10:26:12 UTC
[isis] branch master updated: ISIS-2331: further decouple from
PersistenceSession
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 ffaea16 ISIS-2331: further decouple from PersistenceSession
ffaea16 is described below
commit ffaea169a87d5b9875580258c7122e2421e0f0a1
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 25 11:26:03 2020 +0100
ISIS-2331: further decouple from PersistenceSession
---
.../isis/core/runtime/context/IsisContext.java | 20 +++++---------------
.../session/IsisInteractionLifecycleEvent.java | 5 +++--
.../context/session/RuntimeEventService.java | 14 +++++++-------
.../session/IsisInteractionFactoryDefault.java | 4 ++--
.../service/JdoPersistenceLifecycleService.java | 22 ++++++++++------------
.../wicket/ui/panels/FormExecutorDefault.java | 12 ++++++------
6 files changed, 33 insertions(+), 44 deletions(-)
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisContext.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisContext.java
index a822a13..203a4ec 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisContext.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/IsisContext.java
@@ -22,16 +22,15 @@ import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
import org.apache.isis.core.commons.internal.context._Context;
-import org.apache.isis.core.metamodel.specloader.validator.MetaModelInvalidException;
import org.apache.isis.core.runtime.iactn.IsisInteraction;
-import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
-import org.apache.isis.core.runtime.persistence.session.PersistenceSession;
+
+import lombok.experimental.UtilityClass;
/**
- * Provides static access to current context's singletons
- * {@link MetaModelInvalidException} and {@link IsisInteractionFactory}.
+ * Context Utility
*/
-public interface IsisContext {
+@UtilityClass
+public final class IsisContext {
/**
*
@@ -56,14 +55,5 @@ public interface IsisContext {
return CompletableFuture.supplyAsync(computation);
}
- // -- DEPRECATIONS
-
- @Deprecated
- public static void flush() {
- PersistenceSession.current(PersistenceSession.class)
- .stream()
- .forEach(ps->ps.flush());
- }
-
}
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/IsisInteractionLifecycleEvent.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/IsisInteractionLifecycleEvent.java
index 4e20153..36d8bff 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/IsisInteractionLifecycleEvent.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/IsisInteractionLifecycleEvent.java
@@ -28,8 +28,9 @@ import lombok.Value;
public class IsisInteractionLifecycleEvent {
public enum EventType {
- OPENED,
- CLOSING,
+ HAS_STARTED,
+ IS_ENDING,
+ FLUSH_REQUEST
}
@Getter IsisInteraction isisInteraction;
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/RuntimeEventService.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/RuntimeEventService.java
index 13693d6..75dbef3 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/RuntimeEventService.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/context/session/RuntimeEventService.java
@@ -57,17 +57,17 @@ public class RuntimeEventService {
// -- SESSION
- public void fireSessionOpened(IsisInteraction session) {
- eventBusService.post(IsisInteractionLifecycleEvent.of(session, IsisInteractionLifecycleEvent.EventType.OPENED));
+ public void fireInteractionHasStarted(IsisInteraction session) {
+ eventBusService.post(IsisInteractionLifecycleEvent.of(session, IsisInteractionLifecycleEvent.EventType.HAS_STARTED));
}
- public void fireSessionClosing(IsisInteraction session) {
- eventBusService.post(IsisInteractionLifecycleEvent.of(session, IsisInteractionLifecycleEvent.EventType.CLOSING));
+ public void fireInteractionIsEnding(IsisInteraction session) {
+ eventBusService.post(IsisInteractionLifecycleEvent.of(session, IsisInteractionLifecycleEvent.EventType.IS_ENDING));
}
- // public void fireSessionFlushing(IsisInteraction session) {
- // sessionLifecycleEvent.fire(SessionLifecycleEvent.of(session, SessionLifecycleEvent.EventType.sessionClosing));
- // }
+ public void fireInteractionFlushRequest(IsisInteraction session) {
+ eventBusService.post(IsisInteractionLifecycleEvent.of(session, IsisInteractionLifecycleEvent.EventType.FLUSH_REQUEST));
+ }
}
diff --git a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/IsisInteractionFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/IsisInteractionFactoryDefault.java
index ac6dc91..e87825a 100644
--- a/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/IsisInteractionFactoryDefault.java
+++ b/core/runtimeservices/src/main/java/org/apache/isis/core/runtimeservices/session/IsisInteractionFactoryDefault.java
@@ -235,14 +235,14 @@ public class IsisInteractionFactoryDefault implements IsisInteractionFactory, Is
final boolean isTopLevel = stackSizeAfterOpen==1;
if(isTopLevel) {
conversationId.set(UUID.randomUUID());
- runtimeEventService.fireSessionOpened(newIsisInteraction); // only fire on top-level session
+ runtimeEventService.fireInteractionHasStarted(newIsisInteraction); // only fire on top-level session
}
}
private void preClose(int stackSizeBeforeClose, IsisInteraction isisInteraction) {
final boolean isTopLevel = stackSizeBeforeClose==1;
if(isTopLevel) {
- runtimeEventService.fireSessionClosing(isisInteraction); // only fire on top-level session
+ runtimeEventService.fireInteractionIsEnding(isisInteraction); // only fire on top-level session
isisInteractionScopeCloseListener.preTopLevelIsisInteractionClose(); // cleanup the isis-session scope
}
isisInteraction.close(); // do this last
diff --git a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/service/JdoPersistenceLifecycleService.java b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/service/JdoPersistenceLifecycleService.java
index 9d15469..7e45361 100644
--- a/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/service/JdoPersistenceLifecycleService.java
+++ b/persistence/jdo/datanucleus-5/src/main/java/org/apache/isis/persistence/jdo/datanucleus5/datanucleus/service/JdoPersistenceLifecycleService.java
@@ -93,15 +93,15 @@ public class JdoPersistenceLifecycleService {
}
switch (eventType) {
- case OPENED:
+ case HAS_STARTED:
openSession(event.getIsisInteraction());
break;
- case CLOSING:
+ case IS_ENDING:
closeSession(event.getIsisInteraction());
break;
- // case sessionFlushing:
- // flushSession();
- // break;
+ case FLUSH_REQUEST:
+ flushSession();
+ break;
default:
throw _Exceptions.unmatchedCase(eventType);
@@ -136,13 +136,11 @@ public class JdoPersistenceLifecycleService {
_Context.threadLocalClear(PersistenceSession.class);
}
- // private void flushSession() {
- // val persistenceSession = PersistenceSessionJdo.current();
- //
- // if(persistenceSession != null) {
- // persistenceSession.flush();
- // }
- // }
+ private void flushSession() {
+ PersistenceSession.current(PersistenceSession.class)
+ .stream()
+ .forEach(ps->ps.flush());
+ }
private void create() {
persistenceSessionFactory.init(metaModelContext);
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
index cb61039..34690f2 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/panels/FormExecutorDefault.java
@@ -50,7 +50,7 @@ import org.apache.isis.core.metamodel.facets.actions.redirect.RedirectFacet;
import org.apache.isis.core.metamodel.facets.properties.renderunchanged.UnchangingFacet;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
-import org.apache.isis.core.runtime.context.IsisContext;
+import org.apache.isis.core.runtime.context.session.RuntimeEventService;
import org.apache.isis.core.runtime.iactn.IsisInteractionFactory;
import org.apache.isis.core.security.authentication.AuthenticationSession;
import org.apache.isis.core.security.authentication.MessageBroker;
@@ -148,12 +148,12 @@ implements FormExecutor {
// flush any queued changes; any concurrency or violation exceptions will actually be thrown here
{
val commonContext = targetEntityModel.getCommonContext();
- if(commonContext.getIsisInteractionTracker().isInInteraction()) {
- IsisContext.flush();
- }
+ commonContext.getIsisInteractionTracker().currentInteraction()
+ .ifPresent(interaction->{
+ commonContext.lookupServiceElseFail(RuntimeEventService.class)
+ .fireInteractionFlushRequest(interaction);
+ });
}
-
-
// update target, since version updated (concurrency checks)
targetAdapter = targetEntityModel.load();