forked from quarkusio/quarkus
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use a Quarkus-specific clock provider that is reinitialized at runtime
- so that the actual runtime system timezone is picked up and clock-based (date/time) constraints are correctly evaluated
- Loading branch information
1 parent
b37b8b7
commit 0fdf360
Showing
7 changed files
with
115 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
45 changes: 45 additions & 0 deletions
45
...io/quarkus/hibernate/validator/runtime/clockprovider/HibernateValidatorClockProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package io.quarkus.hibernate.validator.runtime.clockprovider; | ||
|
||
import java.time.Clock; | ||
import java.time.Instant; | ||
import java.time.ZoneId; | ||
|
||
import jakarta.validation.ClockProvider; | ||
|
||
/** | ||
* A Quarkus-specific clock provider that can provide a clock based on a runtime system time zone. | ||
*/ | ||
public class HibernateValidatorClockProvider implements ClockProvider { | ||
|
||
public static final HibernateValidatorClockProvider INSTANCE = new HibernateValidatorClockProvider(); | ||
|
||
private static final HibernateClock clock = new HibernateClock(); | ||
|
||
private HibernateValidatorClockProvider() { | ||
} | ||
|
||
@Override | ||
public Clock getClock() { | ||
return clock; | ||
} | ||
|
||
private static class HibernateClock extends Clock { | ||
|
||
@Override | ||
public ZoneId getZone() { | ||
// we delegate getting the zone id value to a helper class that is reinitialized at runtime | ||
// allowing to pick up an actual runtime timezone. | ||
return HibernateValidatorClockProviderSystemZoneIdHolder.SYSTEM_ZONE_ID; | ||
} | ||
|
||
@Override | ||
public Clock withZone(ZoneId zone) { | ||
return Clock.system(zone); | ||
} | ||
|
||
@Override | ||
public Instant instant() { | ||
return Instant.now(); | ||
} | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
...te/validator/runtime/clockprovider/HibernateValidatorClockProviderSystemZoneIdHolder.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package io.quarkus.hibernate.validator.runtime.clockprovider; | ||
|
||
import java.time.ZoneId; | ||
|
||
/** | ||
* A helper class holding a system timezone. | ||
* <p> | ||
* It is reloaded at runtime to provide the runtime-system time zone | ||
* to the constraints based on a {@link jakarta.validation.ClockProvider}. | ||
*/ | ||
class HibernateValidatorClockProviderSystemZoneIdHolder { | ||
static final ZoneId SYSTEM_ZONE_ID = ZoneId.systemDefault(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters