All,

The recent releases have improved things for users of embedded Tomcat but there are still some issues. I am seeing reports via $work related to Spring Boot.

The problem is on Windows and Mac. The file systems are case insensitive and DirResourceSet instances are read/write by default so the reflection code gets called. The impact varies by Java version:

Java 21 - no issue as the code doesn't get called

Java 17 - exception is thrown and the web application fails to start due
          to missing --add-opens

Java 11 - warning is logged but otherwise web application starts
          normally

Java 8  - web application starts normally


Having chatted at length with the Spring Boot team, they are going to make the DirResourceSet instances read only by default which works around the Java 17 issue but not the Java 11 issue as reflection also occurs in the init of JreCompat.

I have performed some testing and confirmed that the java.io.FileSystem class is loaded by the JRE before any application code gets a chance to execute. That means we can use checking the command line arguments to determine whether the cache is enabled/disabled.

To reduce the impact on anyone using Tomcat in embedded mode - including but not limited to Spring Boot - I intend to make the following improvements:

Java 17
Check the command line arguments to determine if the canonical resource name cache has been enabled Switch to lazy initialisation for JreCompat.useCanonCachesField so reflection is not used unless Tomcat needs to try and disable the cache

Java 16 and below
Check the command line arguments to determine if the canonical resource name cache has been disabled Switch to lazy initialisation for JreCompat.useCanonCachesField so reflection is not used unless Tomcat needs to try and disable the cache


I don't think there is a need to rush out these changes but I'm going to start work on them now so they are ready if we need them in a hurry.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to