We've had some discussions around this, mostly high level about where this could go.

At this point, anyone strongly opposed to ship a light weight jar?

Do we feel the value is or is not there compared to the maintenance of it?


Filip



On 7/13/20 2:59 PM, Filip Hanik wrote:
for discussion, all feedback and questions welcome:


I've created a concept of having Apache Tomcat, embedded, run without reflection in a native image. This concept creates a jar, tomcat-embedded-programmatic.jar, that can be fine tuned to only include what is needed in a default configuration when an embedded tomcat instance is used and configured programatically.

Steps to run Apache Tomcat using Java 8 without reflection

 1. Make sure you have native-image (from the graal installation) on
    your path
 2. git clone -b feature/embed-minimal-programmatic-jar-file-master
    g...@github.com:fhanik/tomcat.git
 3. cd tomcat/res/graal/
 4. ./build-tomcat-native-image.sh && ./graal-measure.sh

Should yield an output similar to (Graal 20.1):
SUCCESS: the servlet is working
RSS memory: 20.7M
Image size: 20.5M


or using an older graal, 19.2
SUCCESS: the servlet is working
RSS memory: 18.0M
Image size: 16.7M


This also leaves a file named ${java.io.tmpdir}/XReflectionIntrospectionUtils.java so that you can review the solution to IntrospectionUtils.java

Goals of this concept

 1. Do not break anything
 2. Create a new and optimized for size artifact,
    tomcat-embedded-programmatic
 3. Remove reflection by introspecting classes that are currently
    passed into IntrospectionUtils.set/getProperty by generating
    setters/getters at build time

How it's done

 1. I've build out a small introspection tool in the package
    org.apache.tomcat.util.xreflect
 2. During build time, it analyses a set of known classes that are
    used with IntrospectionUtils.java, and generates
    XReflectionIntrospectionUtils.java
 3. When it packages tomcat-embed-programmatic.jar it uses the
    generated code when calling setProperty and getProperty

A PR would look like this:
https://github.com/apache/tomcat/compare/master...fhanik:feature/embed-minimal-programmatic-jar-file-master?expand=1

Reply via email to