Project started on August 4th, 2008. The reason was that we were not satisfied with JaMON in terms of simplicity and monitor structure and so we created our own sort-of clone with some enhancements (nanoseconds, monitors in tree structure). Our first release was finished on December 15th, 2008 and Java Simon contained first version of the core and JDBC Proxy driver at that time.
Second version was released on June 19th, 2009 and brought JMX support, Spring AOP integration and also a little overhaul of the core API based on the feedback generated by the first version. Little additions and fixes followed during the subsequent 2.x releases with active periods alternating with some slower ones. Besides constant bug-fixing (thanks to our users) we added Maven support and basic Java EE support (Servlet filter, EJB interceptor).
Third version dropped JDK 5 dependency (and JDBC3 proxy driver in favour of JDBC4 version) and came out on October 11th, 2011. We moved to Maven Central (group-id org.javasimon) and further improved Java EE support. Embeddable web-console was added in version 3.2.
With Fourth version in 2014 Java Simon moved to GitHub (from now forgotten Google Code) and to Java 7. It continued to be maintained in very slow pace, often with unexpected pull requests from the community (thanks!). In 2019 with 4.2.0 we bumped the minimum Java to 8.
Fixes for SQL normalizer and upgrade to Java 8:
- Fixed SqlNormalizer is CPU expensive during JDBC profiling via SqlNormalizer extracted
- Fixed Detailed view cannot be refreshed if simon name contains characters that should be url-encoded
- Fixed ConcurrentModificationException in ManagerConfiguration
- Compiled with Java 8 (Java Simon 4.1 was based on Java 7), which means it requires Java 8
- Many dependency upgrades (latest Spring 4.x, H2, TestNG, Jackson, Jetty, ...)
Minor bugfix release mostly around logging and Console JSON stringification:
- Fixed Hid unnecessary logging
- Fixed fixed boolean getters recognition, improved performance
- Fixed Fixed json stringifier
- Fixed Incorrect json escaping in Console
- Fixed Mismatched Jackson lib in demo
- Added missing connection and statement listeners for proper handling of connection and statement events. If missing, they cause a wrong propagation of real connection instead of Simon connection.
- Fixed Spring StopWatch show wrong classname.methodname in case of class hierarchy
- Fixed EnabledManager.getOrCreateSimon() is synchronized
- Deadlock problem when using Split.stop(String) with more than one subSimon name and SimonManager.clear()
- Add support for sampleIncrementNoReset
- pushing
StopwatchInfo
to upper level under nameReporterStopwatchInfo
, it didn't make sense to have it as inner class ofDefaultRequestReporter
(probably historical reason) - JDBC fixes: fixed driver class name (accident) and NPE if
driver.properties
are not found Callback.Event
codes are internally lowercased before used as a key or when returning event by the code (fixes matching)
Console bugfixes:
- Version 4 requires Java 7 or higher
- Fix #1
Version 3.5.1 fixes NPE in SimonServletFilter
when init-param stopwatch-source-props
is not present
(empty value would be probably workaround). If you are using servlet filter to measure your requests,
this fix is definitely for you.
Java Simon presents the last 3.x version (sans patches if necessary) - 3.5.0! It brings some nice features as a promise to future 4.0 and also it is the last version supporting Java SE 6 (again, some patches may come later).
- We added
Clock
abstraction that allows you to feed Simons with nano/millis values. This allows you to shift timestamps in time (if needed), test it better, or even switch it to CPU user-time counter for instance. - Utility methods for aggregation over a subtree were added, allowing you to sum up all Stopwatches or Counters,
or only the ones matching
SimonFilter
. CheckSimonUtils.calculate*Aggregate
methods. - Major addition is "incremental sampling". You can now sample incremental change since the last sample -
and do it for multiple clients or periods on the same Simon. Check
Simon.sampleIncrement(key)
. This effectively deprecatessampleAndReset
andreset
as well. Both will be removed in 4.0. - And some bugfixes - check the whole release notes here.
Check the Maven OSS repository (see MavenSupport page) and Javadocs. In overall we are very positive about this version, especially because of the incremental sampling, which is definitely the right way to go if we want to offer any cluster/aggregation support in the future. Other than that it's your good old Simon as you know it. :-) Enjoy
Slowly, but surely and proudly we are marching on - with another fixes + little features release. Release notes are here, with these highlights:
- Splits can now use attributes too - no out of box support yet, but you can for instance store actual parameters of the method call in them for your own Callbacks.
- Some JDBC enhancements/fixes like this, this and this.
- Console shows active field for Stopwatches too.
- You can sample multiple Simons with one JMX call.
- There are also better defaults for Simon Servlet Filter.
- Anonymous split is created with factory method, not with constructor.
Check the Maven repository (see MavenSupport page) and Javadocs too. There are minor interface changes (anonymous Split - anyone? :-)), but upgrades should be generally smooth. And there are bugfixes, so upgrades are recommended.
From now on we are releasing under New 3-clause BSD License leaving GPL behind. This should be generally good news for our users.
This is sort of wrap-up release of all the changes that went first into 3.2.1 and more that followed + at least
one renaming (SimonManagerMXBean
) justifies the minor version bump. Most fixes and enhancements went into Console
and monitoring web-filter, but there is more to it - check it in
this list
(combined with 3.2.1 fixes too).
3.2.1 is more than just a few fixes:
- Web Console UI overhaul, looks better and acts better :-) and doesn't cache on IE anymore.
- A few performance fixes - especially disabled manager overhead is now 50% of the previous version (on get/start/stop scenario), also some synchronization was overhauled and get/start/stop with enabled Stopwatch got 5-25% better (depends on thread count, OS, CPU and planet positions of course).
RequestReporters
were separated to own package + a few more useful implementations were added.
In overall I'm very excited about this version and I recommend update from 3.2.0 - should be smooth and fixes to Console are really nice! Javadoc was updated to the latest 3.2.1 - URL is still the same.
Dates may be off a few days, as they may point to the news release, not the actual Maven release.