I feel this interface contains far too much duplication, i.e. wallClockTime and then time(), wallClockDuration() and timeDuration()...etc

I wonder if you could have defined a single interface: TimeService with methods like: time() and duration(), and then have two implementations: WallClockService and ChronoTimeService, where each provides implementations that adjust according to their needs (they use System.currentMillis() vs nanoTime()).

I think that would make the interface much simpler to digest, and each service would decide what it uses. For example, the CacheMgtInterceptor would only use ChronoTimeService, but never the wall clock one, since it's only interested in timed events between a start and a stop phase.

WDYT?