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();