- Replaced Spring with Jersey 3.1.0
- Updated to Jetty 11.0.12
- Removed Hibernate
- Updated to Thymeleaf 3.1.0
This release is a major refactoring. Attempting to upgrade to the final release of Spring 6 caused some integration issues, mostly around Spring being much more opinionated about how nested contexts are used. So, it gave me an excuse to do something I've toyed with for a while, which is use JAX-RS (Jersey) to serve all the content. I've used Jersey for years as my preferred REST API framework on many other projects, and it's always seemed a little cleaner than Spring for such things.
This did turn into a much larger refactoring though, as removing Spring necessitated removal of Spring Data and Spring Security as well, which meant rewriting the data access layer. I'm not 100% happy performance-wise with where it's currently at, but it's functional and gives me a foundation to build on.
Update: Adding Caffeine for caching of commonly-requested database objects has made a big difference in the page render times. I'm now seeing TTFB (time-to-first-byte) times on the home page of around 50-60ms + ping time, which isn't bad.
- Updated to Spring Framework 6.0.0-M3
- Updated to Jetty 11
- Updated to Hibernate 6.0
- Updated to Thymeleaf 3.1.0-M3
- Updated compiler settings to Java 17
The site is now running with a Java module-path rather than a class-path, with no additional "--add-opens" clauses required under Java 18.
This took far longer than expected (four years), and still required bleeding-edge versions of several dependencies to work. I even needed to patch around a bug in Thymeleaf that only occurs when running on the module path.
A couple of lessons learned from this:
- Migrating to newer Java releases is getting easier all the time.
- Migrating to modules is harder, as libraries are often not tested with the module path.
- The module system really needs a wildcard package export syntax. I import a lot of resources (web content) and having to explicitly open every sub-package is a huge pain.
- Updated to Spring Framework 5
- Updated to Hibernate 5.3
- Updated to Jetty 9.4.11
- Updated to Thymeleaf 3.0
- Updated compiler settings to Java 10
This release is all about updating to Java 10. I've been putting this off due to the large amount of changes required (mostly Java 9+).
I'm still using classpath mode (including "--add-opens java.base/java.lang=ALL-UNNAMED --illegal-access=warn" since Spring still uses cglib) -- I suspect converting to modules is going to be a lengthy process due to the number of third-party dependencies which haven't been updated with module info.
This also paves the way for future Java 11 support (since we're now two months away and counting). Hopefully since Java 11 will be an LTS release we'll see a larger push to support the Java module system within the community.
HTTP/2 support is now live!
- Updated to Spring Framework 4
- Updated to Hibernate 5
- Updated to Jetty 9.3.5
- Converted from JSP to Thymeleaf
- Updated compiler settings to Java 8
Most of these changes should be invisible to casual users. The biggest changes were made to allow the use of HTTP/2 on this site (once I switch to using HAProxy 1.6 instead of Apache as a reverse proxy).
I am currently converting a few other sites which are also hosted here to supporting HTTP/2. Once that is completed, I will be able to run the entire infrastructure over secure HTTP/2. In addition, I am testing out Docker based deployments of all the site components. More details to come.
- New feature: Gravatar avatar images on comments and article postings
- Started adding ajax calls for admin tasks -- finished comment approval / disapproval / deletion
- New Feature: Allow articles to be closed for commenting.
This should hopefully reduce the amount of time I spend cleaning up after spammers. I have started with closing comments for anything older than 30 days. This should at least let me concentrate on page 1 and not have to go back to older stuff.
- Completed migration to Spring MVC 3.2
- Converted data access to Spring Data JPA
- Updated to new randomcoder-taglibs version (supports Spring Pageable implementation)
- Built against Java 7
- Convert unit tests to JUnit 4
- Expand unit test coverage
- Update source to take advantage of Java 7 features
- Refactor data access methods and entities to minimize N+1 selects