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 <ahu...@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();

Reply via email to