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