1111import io .teaql .core .businessid .BusinessIdKeyProvider ;
1212import io .teaql .core .businessid .BusinessIdSchemaContributor ;
1313import io .teaql .core .businessid .BusinessIdService ;
14+ import io .teaql .core .businessid .BusinessClock ;
1415import io .teaql .runtime .businessid .DefaultBusinessIdService ;
1516import io .teaql .core .reference .RoundTripReferenceCodec ;
1617import io .teaql .core .reference .RoundTripReferenceProvider ;
18+ import io .teaql .runtime .businessid .SystemBusinessClock ;
1719import java .util .*;
1820import java .util .stream .Stream ;
1921
@@ -31,6 +33,7 @@ public class TeaQLRuntime {
3133 private final BusinessIdSchemaContributor businessIdSchemaContributor ;
3234 private final BusinessIdKeyProvider businessIdKeyProvider ;
3335 private final RoundTripReferenceCodec roundTripReferenceCodec ;
36+ private final BusinessClock businessClock ;
3437 private final Map <String , Checker <?>> checkers = new java .util .concurrent .ConcurrentHashMap <>();
3538 private final List <GeneratedSchemaBootstrap > generatedBootstraps =
3639 new java .util .concurrent .CopyOnWriteArrayList <>();
@@ -51,6 +54,7 @@ private TeaQLRuntime(Builder builder) {
5154 this .roundTripReferenceCodec = builder .roundTripReferenceProvider == null
5255 ? null
5356 : new RoundTripReferenceCodec (builder .roundTripReferenceProvider );
57+ this .businessClock = builder .businessClock ;
5458 }
5559
5660 public static Builder builder () {
@@ -101,6 +105,10 @@ BusinessIdService getBusinessIdService() {
101105 return businessIdService ;
102106 }
103107
108+ BusinessClock getBusinessClock () {
109+ return businessClock ;
110+ }
111+
104112 BusinessIdSchemaContributor getBusinessIdSchemaContributor () {
105113 return businessIdSchemaContributor ;
106114 }
@@ -524,7 +532,7 @@ private void checkAndFix(UserContext context, Entity entity) {
524532 context .beginFixEvidence ();
525533 boolean ownsFixTime = context .getAttribute (Checker .TEAQL_FIX_TIME ) == null ;
526534 if (ownsFixTime ) {
527- context .putAttribute (Checker .TEAQL_FIX_TIME , java . time . LocalDateTime . now ());
535+ context .putAttribute (Checker .TEAQL_FIX_TIME , context . businessTime ());
528536 }
529537 try {
530538 checker .checkAndFix (context , (BaseEntity ) entity );
@@ -1007,6 +1015,7 @@ public static class Builder {
10071015 private BusinessIdSchemaContributor businessIdSchemaContributor ;
10081016 private BusinessIdKeyProvider businessIdKeyProvider ;
10091017 private RoundTripReferenceProvider roundTripReferenceProvider ;
1018+ private BusinessClock businessClock = SystemBusinessClock .INSTANCE ;
10101019
10111020 public Builder metadata (EntityMetaFactory metadata ) {
10121021 this .metadata = metadata ;
@@ -1045,6 +1054,12 @@ public Builder businessIdService(BusinessIdService businessIdService) {
10451054 return this ;
10461055 }
10471056
1057+ /** Installs the time source visible to domain behavior in each context. */
1058+ public Builder businessClock (BusinessClock businessClock ) {
1059+ this .businessClock = java .util .Objects .requireNonNull (businessClock , "businessClock" );
1060+ return this ;
1061+ }
1062+
10481063 /**
10491064 * Installs one provider-backed allocator for generated Fix execution and
10501065 * the explicit {@code context.ensureSchema()} lifecycle.
0 commit comments