diff --git a/src/main/java/io/ebean/ExtendedServer.java b/src/main/java/io/ebean/ExtendedServer.java
index 1d3d6264f..0b159f877 100644
--- a/src/main/java/io/ebean/ExtendedServer.java
+++ b/src/main/java/io/ebean/ExtendedServer.java
@@ -3,6 +3,7 @@ package io.ebean;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.persistence.NonUniqueResultException;
+import java.time.Clock;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -28,6 +29,19 @@ import java.util.function.Predicate;
*/
public interface ExtendedServer {
+ /**
+ * Return the NOW time from the Clock.
+ */
+ long clockNow();
+
+ /**
+ * Set the Clock to use for @WhenCreated and @WhenModified.
+ *
+ * Note that we only expect to change the Clock for testing purposes. + *
+ */ + void setClock(Clock clock); + /** * Return the number of 'top level' or 'root' entities this query should return. * @@ -370,7 +384,7 @@ public interface ExtendedServer { /** * Execute the update query returning the number of rows updated. *- * The update query must be created using {@link #update(Class)}. + * The update query must be created using {@link EbeanServer#update(Class)}. *
* * @param query the update query to execute diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 307cc3d44..89fe28b6b 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -119,10 +119,10 @@ import javax.persistence.NonUniqueResultException; import javax.persistence.OptimisticLockException; import javax.persistence.PersistenceException; import javax.sql.DataSource; +import java.time.Clock; import java.util.Collection; import java.util.Collections; import java.util.HashSet; -import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -151,6 +151,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { private final DataTimeZone dataTimeZone; + /** + * Clock to use for WhenModified and WhenCreated. + */ + private Clock clock; + private final CallStackFactory callStackFactory; /** @@ -278,6 +283,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { this.beanLoader = new DefaultBeanLoader(this); this.jsonContext = config.createJsonContext(this); this.dataTimeZone = config.getDataTimeZone(); + this.clock = config.getServerConfig().getClock(); DocStoreIntegration docStoreComponents = config.createDocStoreIntegration(this); this.transactionManager = config.createTransactionManager(docStoreComponents.updateProcessor()); @@ -507,6 +513,16 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { return this; } + @Override + public long clockNow() { + return clock.millis(); + } + + @Override + public void setClock(Clock clock) { + this.clock = clock; + } + @Override public BeanState getBeanState(Object bean) { if (bean instanceof EntityBean) { diff --git a/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java index 6fd15caf0..3c658f34d 100644 --- a/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java @@ -1275,7 +1275,7 @@ public final class PersistRequestBean