This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch ISIS-3267 in repository https://gitbox.apache.org/repos/asf/isis.git
commit 847274c1826fd078af6d74f5ae6408022dfeba95 Author: Dan Haywood <[email protected]> AuthorDate: Tue Nov 1 07:36:37 2022 +0000 ISIS-3267: adds new repo method and JDO/JPA annotations --- .../wrapper/WrapperFactoryDefault.java | 3 +- .../commandlog/applib/dom/CommandLogEntry.java | 2 +- .../applib/dom/CommandLogEntryRepository.java | 15 ++++++++ .../commandlog/jdo/dom/CommandLogEntry.java | 8 ++++- .../commandlog/jpa/dom/CommandLogEntry.java | 40 +++++++++++++--------- 5 files changed, 48 insertions(+), 20 deletions(-) diff --git a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java index 2e027dc06c..c3a01281ed 100644 --- a/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java +++ b/core/runtimeservices/src/main/java/org/apache/causeway/core/runtimeservices/wrapper/WrapperFactoryDefault.java @@ -582,7 +582,8 @@ implements WrapperFactory, HasMetaModelContext { @Getter private final UUID parentInteractionId; /** - * Note that is a <code>transient</code> field in order that {@link org.apache.causeway.applib.services.wrapper.callable.AsyncCallable} can be declared as + * Note this is a <code>transient</code> field, in order that + * {@link org.apache.causeway.applib.services.wrapper.callable.AsyncCallable} can be declared as * {@link java.io.Serializable}. * * <p> diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java index 166854151a..f21c15e2eb 100644 --- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java +++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntry.java @@ -50,7 +50,6 @@ import org.apache.causeway.applib.annotation.Publishing; import org.apache.causeway.applib.annotation.Where; import org.apache.causeway.applib.jaxb.JavaSqlXMLGregorianCalendarMarshalling; import org.apache.causeway.applib.mixins.system.DomainChangeRecord; -import org.apache.causeway.applib.mixins.system.DomainChangeRecord.ChangeType; import org.apache.causeway.applib.mixins.system.HasInteractionId; import org.apache.causeway.applib.services.bookmark.Bookmark; import org.apache.causeway.applib.services.command.Command; @@ -135,6 +134,7 @@ implements Comparable<CommandLogEntry>, DomainChangeRecord, HasCommandDto { public static final String FIND_MOST_RECENT_REPLAYED = LOGICAL_TYPE_NAME + ".findMostRecentReplayed"; public static final String FIND_MOST_RECENT_COMPLETED = LOGICAL_TYPE_NAME + ".findMostRecentCompleted"; public static final String FIND_BY_REPLAY_STATE = LOGICAL_TYPE_NAME + ".findNotYetReplayed"; + public static final String FIND_NOT_YET_STARTED = "findNotYetStarted"; } diff --git a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java index dbf03593ac..bdb8915b67 100644 --- a/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java +++ b/extensions/core/commandlog/applib/src/main/java/org/apache/causeway/extensions/commandlog/applib/dom/CommandLogEntryRepository.java @@ -255,6 +255,21 @@ public abstract class CommandLogEntryRepository<C extends CommandLogEntry> { .orElse(Collections.emptyList()); } + /** + * Returns any parented commands that have not yet started. + * + * <p> + * This is to support the notion of background commands (the same as their implementation in v1) whereby a + * custom executor service for {@link org.apache.causeway.applib.services.wrapper.WrapperFactory} would + * "execute" a {@link Command} simply by persisting it as a {@link CommandLogEntry}, so that a + * quartz or similar background job could execute the {@link Command} at some point later. + * </p> + */ + public Optional<C> findParentedCommandsNotYetStarted() { + return repositoryService().firstMatch( + Query.named(commandLogEntryClass, CommandLogEntry.Nq.FIND_NOT_YET_STARTED)); + } + /** * The most recent replayed command previously replicated from primary to * secondary. diff --git a/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java b/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java index c120f33814..0b4acc2502 100644 --- a/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java +++ b/extensions/core/commandlog/persistence-jdo/src/main/java/org/apache/causeway/extensions/commandlog/jdo/dom/CommandLogEntry.java @@ -172,7 +172,12 @@ import lombok.Setter; + " && startedAt != null " + " && completedAt != null " + "ORDER BY timestamp ASC"), - + @Query( + name = Nq.FIND_NOT_YET_STARTED, + value = "SELECT " + + "FROM " + CommandLogEntry.FQCN + " " + + "WHERE startedAt == null " + + "ORDER BY timestamp ASC "), // most recent (replayed) command previously replicated from primary to // secondary. This should always exist except for the very first times // (after restored the prod DB to secondary). @@ -306,6 +311,7 @@ extends org.apache.causeway.extensions.commandlog.applib.dom.CommandLogEntry { @Getter @Setter private String exception; + @Column(allowsNull = ReplayState.ALLOWS_NULL, length = ReplayState.MAX_LENGTH) @ReplayState @Getter @Setter diff --git a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java index 12787cf61d..9ffd8aea3a 100644 --- a/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java +++ b/extensions/core/commandlog/persistence-jpa/src/main/java/org/apache/causeway/extensions/commandlog/jpa/dom/CommandLogEntry.java @@ -73,23 +73,6 @@ import lombok.Setter; query = "SELECT cl " + " FROM CommandLogEntry cl " + " WHERE cl.pk.interactionId = :interactionId"), - @NamedQuery( - name = Nq.FIND_BY_PARENT, - query = "SELECT cl " - + " FROM CommandLogEntry cl " - + " WHERE cl.parent = :parent "), - @NamedQuery( - name = Nq.FIND_CURRENT, - query = "SELECT cl " - + " FROM CommandLogEntry cl " - + " WHERE cl.completedAt is null " - + " ORDER BY cl.timestamp DESC"), - @NamedQuery( - name = Nq.FIND_COMPLETED, - query = "SELECT cl " - + " FROM CommandLogEntry cl " - + " WHERE cl.completedAt is not null " - + " ORDER BY cl.timestamp DESC"), @NamedQuery( name = Nq.FIND_RECENT_BY_TARGET, query = "SELECT cl " @@ -166,6 +149,23 @@ import lombok.Setter; + " FROM CommandLogEntry cl " + " WHERE cl.username = :username " + " ORDER BY cl.timestamp DESC"), // programmatic LIMIT 30 + @NamedQuery( + name = Nq.FIND_BY_PARENT, + query = "SELECT cl " + + " FROM CommandLogEntry cl " + + " WHERE cl.parent = :parent "), + @NamedQuery( + name = Nq.FIND_CURRENT, + query = "SELECT cl " + + " FROM CommandLogEntry cl " + + " WHERE cl.completedAt is null " + + " ORDER BY cl.timestamp DESC"), + @NamedQuery( + name = Nq.FIND_COMPLETED, + query = "SELECT cl " + + " FROM CommandLogEntry cl " + + " WHERE cl.completedAt is not null " + + " ORDER BY cl.timestamp DESC"), @NamedQuery( name = Nq.FIND_FIRST, query = "SELECT cl " @@ -181,6 +181,12 @@ import lombok.Setter; + " AND cl.startedAt is not null " + " AND cl.completedAt is not null " + " ORDER BY cl.timestamp ASC"), + @NamedQuery( + name = Nq.FIND_NOT_YET_STARTED, + query = "SELECT cl " + + " FROM CommandLogEntry cl " + + " WHERE cl.startedAt is null " + + " ORDER BY cl.timestamp ASC"), // most recent (replayed) command previously replicated from primary to // secondary. This should always exist except for the very first times // (after restored the prod DB to secondary).
