Code Monkey home page Code Monkey logo

spring-native's Introduction

spring-native is no longer actively maintained by VMware, Inc.

In order to adapt to the permissions changes on https://repo.spring.io/release/, Spring Native artifacts are now available from https://repo.spring.io/milestone/, Gradle and Maven build configuration of projects depending on Spring Native should be updated accordingly.

Spring Native provides beta support for compiling Spring applications to native executables using GraalVM native-image compiler, in order to provide a native deployment option typically designed to be packaged in lightweight containers.

Quick start

The easiest way to start with Spring Native is probably to go to start.spring.io, add the Spring Native dependency, and read the reference documentation. Make sure to configure properly the Spring AOT Maven and Gradle plugins that are mandatory to get proper native support for your Spring application.

Play with the samples

Note
You need to install the GraalVM native-image compiler, check the documentation for more details.
  • Download the latest release of this repository.

  • Go into the samples folder and pick one (e.g. cd samples/commandlinerunner)

  • Run ./build.sh which will run the regular JVM build, then a native image compilation, then test the result.

For more details on the samples see the samples documentation.

Contributing

If you have not previously done so, please sign the Contributor License Agreement. You will be reminded automatically when you submit the pull request.

Contributions are welcome, especially for adding support via pull requests for libraries widely used in the Spring ecosystem not yet support. Please refer to the how to contribute section for more details.

This project requires Java 11.

spring-native's People

Contributors

aclement avatar arielcarrera avatar artembilan avatar bclozel avatar christophstrobl avatar dsyer avatar eleftherias avatar fhanik avatar garyrussell avatar gregoirew avatar grekier avatar hdeadman avatar jkroepke avatar joshlong avatar leccelecce avatar marcingrzejszczak avatar mhalbritter avatar michael-simons avatar mminella avatar olegz avatar olgamaciaszek avatar olivierboudet avatar saki-osive avatar sbrannen avatar schauder avatar sdeleuze avatar snicoll avatar spencergibb avatar spring-builds avatar ttddyy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-native's Issues

Remove Hibernate Validator from web samples

Removing Hibernate Validator allows to reduce RSS memory by 3.3M and image size by 10M!

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Avoid inclusion of ImageBanner and AWT classes when not needed

Analyzing classes included in a commandlinerunner sample Spring Boot native image with -H:+PrintAnalysisCallTree reveals that a significant number of java.awt.* classes are compiled and included (both with feature or agent).

The call tree shows that these classes are included because GraalVM analysis detects that SpringApplicationBannerPrinter used in SpringApplication could potentially create an instance of ImageBanner which uses these java.awt.* classes.

Moving banner classes initialization to build time is possible, probably an optimization that makes sense, but it does not solve this issue since the condition to know if ImageBanner and its related java.awt.* classes is only know at runtime. With close world + properties frozen at build time assumptions, it should be possible to avoid compiling and shipping ImageBanner in the native image.

This looks like an interesting use case to discuss with @bclozel and @snicoll.

Error occurred while native image building

I'm facing error during building native image.

Here is Dockerfile which I used (Current latest version is 19.3.0)

FROM oracle/graalvm-ce:latest

RUN gu install native-image
RUN yum install git -y
RUN git clone https://github.com/spring-projects-experimental/spring-graal-native.git
WORKDIR spring-graal-native
RUN ./mvnw clean package
RUN git clone --single-branch --branch postgres-r2dbc https://github.com/sausageRoll/kotlindemo.git
WORKDIR /spring-graal-native/spring-graal-native-samples/kotlin-webmvc
RUN ../../mvnw clean install
RUN printf "Unpacking $JAR"
RUN rm -rf unpack
RUN mkdir unpack
WORKDIR /spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack
RUN jar -xvf ../target/kotlin-webmvc-0.0.1-SNAPSHOT.jar >/dev/null 2>&1
RUN cp -R META-INF BOOT-INF/classes
WORKDIR /spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes
RUN LIBPATH=$(find ../../BOOT-INF/lib | tr '\n' ':') && \
    echo $LIBPATH && \
    CP=.:$LIBPATH && \
    echo $CP && \
    CP=$CP:../../../../../spring-graal-native-feature/target/spring-graal-native-feature-0.6.0.BUILD-SNAPSHOT.jar && \
    echo $CP && \
    echo "Compile" && \
    native-image \
      --no-server \
      -H:+TraceClassInitialization \
      -H:Name=kotlindemo \
      -H:+ReportExceptionStackTraces \
      --no-fallback \
      --allow-incomplete-classpath \
      --report-unsupported-elements-at-runtime \
      -DremoveUnusedAutoconfig=true \
      -cp $CP com.example.demo.DemoApplicationKt 

All steps are just copied appropriately from compile.sh
And get the error below:

Fatal error: java.lang.RuntimeException: java.lang.RuntimeException: host C compiler or linker does not seem to work: java.lang.RuntimeException: returned 1

Running command: cc -v -o /spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes/kotlindemo -z noexecstack -Wl,--gc-sections -Wl,--dynamic-list -Wl,/tmp/SVM-2757203419255951332/exported_symbols.list -Wl,-x -L/tmp/SVM-2757203419255951332 -L/opt/graalvm-ce-java8-19.3.0/jre/lib -L/opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64 /tmp/SVM-2757203419255951332/kotlindemo.o /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libffi.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libjvm.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnet.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libzip.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lz -lrt

Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39.0.1) (GCC) 
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/:/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/:/usr/lib/gcc/x86_64-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.8.5/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' '/spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes/kotlindemo' '-z' 'noexecstack' '-L/tmp/SVM-2757203419255951332' '-L/opt/graalvm-ce-java8-19.3.0/jre/lib' '-L/opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
 /usr/libexec/gcc/x86_64-redhat-linux/4.8.5/collect2 --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o /spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes/kotlindemo -z noexecstack /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o -L/tmp/SVM-2757203419255951332 -L/opt/graalvm-ce-java8-19.3.0/jre/lib -L/opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../.. --gc-sections --dynamic-list /tmp/SVM-2757203419255951332/exported_symbols.list -x /tmp/SVM-2757203419255951332/kotlindemo.o /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libffi.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libjvm.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnet.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libzip.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lz -lrt -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crtn.o
/tmp/SVM-2757203419255951332/kotlindemo.o:(.data+0x2c0): undefined reference to `Java_sun_misc_Unsafe_defineClass'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(Throwable.o): In function `Java_java_lang_Throwable_fillInStackTrace':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/java/lang/Throwable.c:49: undefined reference to `JVM_FillInStackTrace'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(URLClassPath.o): In function `Java_sun_misc_URLClassPath_getLookupCacheForClassLoader':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/sun/misc/URLClassPath.c:100: undefined reference to `JVM_GetResourceLookupCache'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(URLClassPath.o): In function `Java_sun_misc_URLClassPath_getLookupCacheURLs':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/sun/misc/URLClassPath.c:77: undefined reference to `JVM_GetResourceLookupCacheURLs'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(VM.o): In function `Java_sun_misc_VM_latestUserDefinedLoader0':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/sun/misc/VM.c:116: undefined reference to `JVM_LatestUserDefinedLoader'
collect2: error: ld returned 1 exit status

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
        at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
        at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:462)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:315)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:454)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:115)
Caused by: java.lang.RuntimeException: host C compiler or linker does not seem to work: java.lang.RuntimeException: returned 1

Running command: cc -v -o /spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes/kotlindemo -z noexecstack -Wl,--gc-sections -Wl,--dynamic-list -Wl,/tmp/SVM-2757203419255951332/exported_symbols.list -Wl,-x -L/tmp/SVM-2757203419255951332 -L/opt/graalvm-ce-java8-19.3.0/jre/lib -L/opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64 /tmp/SVM-2757203419255951332/kotlindemo.o /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libffi.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libjvm.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnet.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libzip.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lz -lrt

Using built-in specs.
COLLECT_GCC=cc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39.0.1) (GCC) 
COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/:/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/:/usr/lib/gcc/x86_64-redhat-linux/
LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/4.8.5/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-o' '/spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes/kotlindemo' '-z' 'noexecstack' '-L/tmp/SVM-2757203419255951332' '-L/opt/graalvm-ce-java8-19.3.0/jre/lib' '-L/opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64' '-mtune=generic' '-march=x86-64'
 /usr/libexec/gcc/x86_64-redhat-linux/4.8.5/collect2 --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o /spring-graal-native/spring-graal-native-samples/kotlin-webmvc/unpack/BOOT-INF/classes/kotlindemo -z noexecstack /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtbegin.o -L/tmp/SVM-2757203419255951332 -L/opt/graalvm-ce-java8-19.3.0/jre/lib -L/opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../.. --gc-sections --dynamic-list /tmp/SVM-2757203419255951332/exported_symbols.list -x /tmp/SVM-2757203419255951332/kotlindemo.o /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libffi.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/liblibchelper.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libjvm.a /opt/graalvm-ce-java8-19.3.0/jre/lib/svm/clibraries/linux-amd64/libstrictmath.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnet.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libzip.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a /opt/graalvm-ce-java8-19.3.0/jre/lib/libnio.a -lm -lpthread -ldl -lpthread -lz -lrt -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/gcc/x86_64-redhat-linux/4.8.5/crtend.o /usr/lib/gcc/x86_64-redhat-linux/4.8.5/../../../../lib64/crtn.o
/tmp/SVM-2757203419255951332/kotlindemo.o:(.data+0x2c0): undefined reference to `Java_sun_misc_Unsafe_defineClass'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(Throwable.o): In function `Java_java_lang_Throwable_fillInStackTrace':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/java/lang/Throwable.c:49: undefined reference to `JVM_FillInStackTrace'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(URLClassPath.o): In function `Java_sun_misc_URLClassPath_getLookupCacheForClassLoader':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/sun/misc/URLClassPath.c:100: undefined reference to `JVM_GetResourceLookupCache'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(URLClassPath.o): In function `Java_sun_misc_URLClassPath_getLookupCacheURLs':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/sun/misc/URLClassPath.c:77: undefined reference to `JVM_GetResourceLookupCacheURLs'
/opt/graalvm-ce-java8-19.3.0/jre/lib/libjava.a(VM.o): In function `Java_sun_misc_VM_latestUserDefinedLoader0':
/opt/jprt/T/P1/225159.buildslave/s/jdk/src/share/native/sun/misc/VM.c:116: undefined reference to `JVM_LatestUserDefinedLoader'
collect2: error: ld returned 1 exit status

        at com.oracle.svm.hosted.image.NativeBootImageViaCC.write(NativeBootImageViaCC.java:382)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:652)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Static initializer in reactor Traces barfs

I had to add this to make the riff streaming-processor work as a native image:

[
    {
        "name": "reactor.core.publisher.Traces$StackWalkerCallSiteSupplierFactory",
        "allDeclaredConstructors": true
    },
    {
        "name": "reactor.core.publisher.Traces$SharedSecretsCallSiteSupplierFactory",
        "allDeclaredConstructors": true
    },
    {
        "name": "reactor.core.publisher.Traces$ExceptionCallSiteSupplierFactory",
        "allDeclaredConstructors": true
    }
]

Switch to build time initialization by default

To limit the RSS memory consumption.

Proposal:

  • Use --initialize-at-build-time in all compile.sh scripts
  • Remove the buildTimeInitialization part from initialization.json
  • Add classes known to be required to be initialized at runtime like org.springframework.core.io.VfsUtils, org.apache.tomcat.jni.SSL or InetAddress and related subclasses (see #21)
  • Check all samples and fine tune the feature accordingly

application.yml not being read at runtime

I only see application.yml in two samples. I don't think it is being read - the webclient is starting netty on port 8080 (which it doesn't do if you run in a regular JVM).

No @CompilationHint found for import selector

Hi,

So today I updated my Spring Feature clone repo and tried native compiling my Spring boot project with the recent changes of the master branch. But it seems I'm missing something (it worked perfecty with the lastest master version before merging of branch extensible-configuration).

I'm getting an error at native compiling :

Fatal error: java.lang.IllegalStateException: java.lang.IllegalStateException: No @CompilationHint found for import selector: org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration$CacheConfigurationImportSelector
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
        at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
        at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:462)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:357)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:501)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:115)
Caused by: java.lang.IllegalStateException: No @CompilationHint found for import selector: org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration$CacheConfigurationImportSelector
        at org.springframework.graal.type.Type.getHints(Type.java:1074)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:728)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:1030)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:633)
        at org.springframework.graal.support.ResourcesHandler.checkAndRegisterConfigurationType(ResourcesHandler.java:621)
        at org.springframework.graal.support.ResourcesHandler.processSpringFactory(ResourcesHandler.java:564)
        at org.springframework.graal.support.ResourcesHandler.processSpringFactories(ResourcesHandler.java:425)
        at org.springframework.graal.support.ResourcesHandler.register(ResourcesHandler.java:110)
        at org.springframework.graal.support.SpringFeature.beforeAnalysis(SpringFeature.java:79)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$7(NativeImageGenerator.java:674)
        at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
        at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:674)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Strange behaviour since I'm not using any cache library or functionality in my project.
My project uses resource bundles, jackson, has some basic @component beans without any database configuration, caching system nor web server controller.
I set spring.main.web-application-type to none and only have spring-boot-starter and spring-boot-starter-json (excluding spring-boot-starter-web) as dependencies.

Any idea where I should start looking for to fix this ?

WebFlux and Spring Security

Hi, I'm getting error which fails the build:

Fatal error: java.lang.IllegalStateException: java.lang.IllegalStateException: No @CompilationHint found for import selector: org.springframework.security.con
fig.annotation.web.reactive.ReactiveOAuth2ClientImportSelector
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
        at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:600)
        at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)
        at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:462)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:357)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:501)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:115)
        at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:528)
Caused by: java.lang.IllegalStateException: No @CompilationHint found for import selector: org.springframework.security.config.annotation.web.reactive.Reactiv
eOAuth2ClientImportSelector
        at org.springframework.graal.type.Type.getHints(Type.java:1074)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:728)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:987)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:1030)
        at org.springframework.graal.support.ResourcesHandler.processType(ResourcesHandler.java:633)
        at org.springframework.graal.support.ResourcesHandler.checkAndRegisterConfigurationType(ResourcesHandler.java:621)
        at org.springframework.graal.support.ResourcesHandler.processSpringFactory(ResourcesHandler.java:564)
        at org.springframework.graal.support.ResourcesHandler.processSpringFactories(ResourcesHandler.java:425)
        at org.springframework.graal.support.ResourcesHandler.register(ResourcesHandler.java:110)
        at org.springframework.graal.support.SpringFeature.beforeAnalysis(SpringFeature.java:79)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$7(NativeImageGenerator.java:674)
        at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
        at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:674)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
        at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
        at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
        at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
        at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
        at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
        at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Error: Image build request failed with exit status 1
com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
        at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1527)
        at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1289)
        at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1250)
        at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1209)
        at com.oracle.svm.driver.NativeImage$JDK9Plus.main(NativeImage.java:1707)

As far as I understand, it means that ReactiveOAuth2ClientImportSelector is missing a configuration in spring-feature project.

I've tried to configure myself, but no luck. Any tips?

Introduce a spring-data-mongodb sample

Hi,

I am trying to build a minimal sample with spring-data-mongodb. The project is here : https://github.com/olivierboudet/spring-graal-native/tree/master/spring-graal-native-samples/spring-data-mongodb

I encounter this error when running native-image :

Unpacking spring-data-mongodb-0.0.1-SNAPSHOT.jar

Compile
[clr:6070]    classlist:   7,894.53 ms
 ____             _               _____          _                  
/ ___| _ __  _ __(_)_ __   __ _  |  ___|__  __ _| |_ _   _ _ __ ___ 
\___ \| '_ \| '__| | '_ \ / _` | | |_ / _ \/ _` | __| | | | '__/ _ \
 ___) | |_) | |  | | | | | (_| | |  _|  __/ (_| | |_| |_| | | |  __/
|____/| .__/|_|  |_|_| |_|\__, | |_|  \___|\__,_|\__|\__,_|_|  \___|
      |_|                 |___/                                     

Use -Dverbose=true on native-image call to see more detailed information from the feature
Remove unused config = true
[clr:6070]        (cap):     831.52 ms
Found #312 types in static reflection list to register
Skipping #232 types not on the classpath
Attempting proxy registration of #24 proxies
Skipped registration of #18 proxies - relevant types not on classpath
[clr:6070]        setup:   1,994.43 ms
Registering resources - #61 patterns
Processing META-INF/spring.factories files...
Adding all the classes for this key: org.springframework.data.repository.core.support.RepositoryFactorySupport
Fatal error: java.lang.IllegalStateException: java.lang.IllegalStateException: Problem registering member <init> for reflective access on type class org.springframework.data.mongodb.repository.support.MongoRepositoryFactory
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
	at java.base/java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:600)
	at java.base/java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)
	at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:462)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:315)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:454)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:115)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:479)
Caused by: java.lang.IllegalStateException: Problem registering member <init> for reflective access on type class org.springframework.data.mongodb.repository.support.MongoRepositoryFactory
	at org.springframework.graal.support.ReflectionHandler.addAccess(ReflectionHandler.java:361)
	at org.springframework.graal.support.ResourcesHandler.registerTypeReferencedBySpringFactoriesKey(ResourcesHandler.java:399)
	at org.springframework.graal.support.ResourcesHandler.processSpringFactory(ResourcesHandler.java:425)
	at org.springframework.graal.support.ResourcesHandler.processSpringFactories(ResourcesHandler.java:326)
	at org.springframework.graal.support.ResourcesHandler.register(ResourcesHandler.java:109)
	at org.springframework.graal.support.SpringFeature.beforeAnalysis(SpringFeature.java:84)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$7(NativeImageGenerator.java:669)
	at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
	at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:669)
	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
	at java.base/java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1407)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: java.lang.NoSuchMethodException: org.springframework.data.mongodb.repository.support.MongoRepositoryFactory.<init>()
	at java.base/java.lang.Class.getConstructor0(Class.java:3349)
	at java.base/java.lang.Class.getDeclaredConstructor(Class.java:2553)
	at com.oracle.svm.hosted.config.ReflectionRegistryAdapter.registerConstructor(ReflectionRegistryAdapter.java:137)
	at org.springframework.graal.support.ReflectionHandler.addAccess(ReflectionHandler.java:356)
	... 16 more
Error: Image build request failed with exit status 1

I tried to add some reflection hint to reflect.json like this :

{
		"name": "org.springframework.data.mongodb.repository.support.MongoRepositoryFactory",
		"allDeclaredConstructors": true,
		"allDeclaredMethods": true,
		"methods": [
			{
				"name": "<init>",
				"parameterTypes": [
					"org.springframework.data.mongodb.core.MongoOperations"
				]
			}
		]
	}

I modified the class Type.java of the feature to add some logs and I am surprised to see that the parameters of the constructor is not detected.
This is the change I did :

+++ b/spring-graal-native-feature/src/main/java/org/springframework/graal/type/Type.java
@@ -1308,9 +1308,15 @@ public class Type {
 
        public boolean hasOnlySimpleConstructor() {
                boolean hasCtor = false;
+               SpringFeature.log("type " + node.name);
                List<MethodNode> methods = node.methods;
                for (MethodNode mn: methods) {
+                       SpringFeature.log("method " + mn.name);
+                       if (mn.parameters!=null) {
+                               SpringFeature.log("method params " + mn.parameters.size());
+                       }
                        if (mn.name.equals("<init>")) {
+
                                if (mn.parameters!=null && mn.parameters.size()!=0) {
                                        return false;
                                } else {
@@ -1318,6 +1324,9 @@ public class Type {
                                }
                        }
                }
+
+               SpringFeature.log("hasOnlySimpleConstructor " + hasCtor);
+
                return hasCtor;
        }

And this is the log when running native-image : the parameters are always null and hasOnlySimpleConstructor is always true for all classes.

type org/springframework/data/mongodb/repository/support/MongoRepositoryFactory
method <init>
method getRepositoryBaseClass
method getRepositoryFragments
method getTargetRepository
method getQueryLookupStrategy
method getEntityInformation
method getEntityInformation
method getEntityInformation
method access$000
method <clinit>
hasOnlySimpleConstructor true

Add actuator support

I'm seeing the error below when trying to use the command line runner example.

No @CompilationHint found for import selector: org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextConfigurationImportSelector

What is the best way to determine the root cause of an error during native-image?

Provide metrics as CSV

As a follow-up of #30, we should generate a CSV file or display the data in a CSV friendly format to allow easy comparison of metrics collected such as RSS, image size or startup time.

Error occurred using compile.sh in the example

There is a compile error in the example

I am trying to test kotlin graal native.
I found this example.
https://github.com/spring-projects-experimental/spring-graal-native/tree/master/spring-graal-native-samples/kotlin-webmvc

But when I complied using compile.sh as instructed. It gave me an error as below

Error: No instances of org.springframework.util.unit.DataSize are allowed in the image heap as this class should be initialized at image runtime.Object has been initialized without the native-image initialization instrumentation and the stack trace can't be tracked.
Detailed message:
Trace:  object org.springframework.util.unit.DataUnit
        method org.springframework.util.unit.DataSize.determineDataUnit(String, DataUnit)
Call path from entry point to org.springframework.util.unit.DataSize.determineDataUnit(String, DataUnit): 
        at org.springframework.util.unit.DataSize.determineDataUnit(DataSize.java:192)
        at org.springframework.util.unit.DataSize.parse(DataSize.java:182)
        at org.springframework.boot.convert.StringToDataSizeConverter.convert(StringToDataSizeConverter.java:57)
        at org.springframework.boot.convert.StringToDataSizeConverter.convert(StringToDataSizeConverter.java:48)
        at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
        at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191)
        at org.springframework.boot.convert.DelimitedStringToCollectionConverter.lambda$convert$0(DelimitedStringToCollectionConverter.java:72)
        at org.springframework.boot.convert.DelimitedStringToCollectionConverter$$Lambda$513/1107588916.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.util.stream.SpinedBuffer.forEach(SpinedBuffer.java:246)
        at java.util.stream.SpinedBuffer.toString(SpinedBuffer.java:269)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:179)
        at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:129)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

com.oracle.svm.core.util.UserError$UserException: No instances of org.springframework.util.unit.DataSize are allowed in the image heap as this class should be initialized at image runtime.Object has been initialized without the native-image initialization instrumentation and the stack trace can't be tracked.
Detailed message:
Trace:  object org.springframework.util.unit.DataUnit
        method org.springframework.util.unit.DataSize.determineDataUnit(String, DataUnit)
Call path from entry point to org.springframework.util.unit.DataSize.determineDataUnit(String, DataUnit): 
        at org.springframework.util.unit.DataSize.determineDataUnit(DataSize.java:192)
        at org.springframework.util.unit.DataSize.parse(DataSize.java:182)
        at org.springframework.boot.convert.StringToDataSizeConverter.convert(StringToDataSizeConverter.java:57)
        at org.springframework.boot.convert.StringToDataSizeConverter.convert(StringToDataSizeConverter.java:48)
        at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
        at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191)
        at org.springframework.boot.convert.DelimitedStringToCollectionConverter.lambda$convert$0(DelimitedStringToCollectionConverter.java:72)
        at org.springframework.boot.convert.DelimitedStringToCollectionConverter$$Lambda$513/1107588916.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.util.stream.SpinedBuffer.forEach(SpinedBuffer.java:246)
        at java.util.stream.SpinedBuffer.toString(SpinedBuffer.java:269)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:179)
        at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:129)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

        at com.oracle.svm.core.util.UserError.abort(UserError.java:75)
        at com.oracle.svm.hosted.FallbackFeature.reportAsFallback(FallbackFeature.java:223)
        at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:737)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:526)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:444)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: No instances of org.springframework.util.unit.DataSize are allowed in the image heap as this class should be initialized at image runtime.Object has been initialized without the native-image initialization instrumentation and the stack trace can't be tracked.
Detailed message:
Trace:  object org.springframework.util.unit.DataUnit
        method org.springframework.util.unit.DataSize.determineDataUnit(String, DataUnit)
Call path from entry point to org.springframework.util.unit.DataSize.determineDataUnit(String, DataUnit): 
        at org.springframework.util.unit.DataSize.determineDataUnit(DataSize.java:192)
        at org.springframework.util.unit.DataSize.parse(DataSize.java:182)
        at org.springframework.boot.convert.StringToDataSizeConverter.convert(StringToDataSizeConverter.java:57)
        at org.springframework.boot.convert.StringToDataSizeConverter.convert(StringToDataSizeConverter.java:48)
        at org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:41)
        at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:191)
        at org.springframework.boot.convert.DelimitedStringToCollectionConverter.lambda$convert$0(DelimitedStringToCollectionConverter.java:72)
        at org.springframework.boot.convert.DelimitedStringToCollectionConverter$$Lambda$513/1107588916.apply(Unknown Source)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
        at java.util.stream.SpinedBuffer.forEach(SpinedBuffer.java:246)
        at java.util.stream.SpinedBuffer.toString(SpinedBuffer.java:269)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:179)
        at com.oracle.svm.core.JavaMainWrapper.runCore(JavaMainWrapper.java:129)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:186)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)

        at com.oracle.graal.pointsto.constraints.UnsupportedFeatures.report(UnsupportedFeatures.java:130)
        at com.oracle.graal.pointsto.BigBang.finish(BigBang.java:565)
        at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:688)
        ... 7 more
Error: Image build request failed with exit status 1

image

image

Add MySQL support in feature mode

Hi, I am trying to build vanilla-jpa with MySQL as database, but got some error.

1. Add mysql dependency and some config

pom.xml

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/bar
spring.datasource.username=root
spring.datasource.password=password

Error:

Error: Classes that should be initialized at run time got initialized during image building:
 com.mysql.cj.jdbc.NonRegisteringDriver was unintentionally initialized at build time. java.sql.DriverManager caused initialization of this class with the following trace: 
        at com.mysql.cj.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.sql.DriverManager$2.run(DriverManager.java:603)
        at java.sql.DriverManager$2.run(DriverManager.java:583)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
        at java.sql.DriverManager.<clinit>(DriverManager.java:101)

com.mysql.cj.jdbc.Driver was unintentionally initialized at build time. java.sql.DriverManager caused initialization of this class with the following trace: 
        at com.mysql.cj.jdbc.Driver.<clinit>(Driver.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.sql.DriverManager$2.run(DriverManager.java:603)
        at java.sql.DriverManager$2.run(DriverManager.java:583)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
        at java.sql.DriverManager.<clinit>(DriverManager.java:101)


com.oracle.svm.core.util.UserError$UserException: Classes that should be initialized at run time got initialized during image building:
 com.mysql.cj.jdbc.NonRegisteringDriver was unintentionally initialized at build time. java.sql.DriverManager caused initialization of this class with the following trace: 
        at com.mysql.cj.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.sql.DriverManager$2.run(DriverManager.java:603)
        at java.sql.DriverManager$2.run(DriverManager.java:583)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
        at java.sql.DriverManager.<clinit>(DriverManager.java:101)

com.mysql.cj.jdbc.Driver was unintentionally initialized at build time. java.sql.DriverManager caused initialization of this class with the following trace: 
        at com.mysql.cj.jdbc.Driver.<clinit>(Driver.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.sql.DriverManager$2.run(DriverManager.java:603)
        at java.sql.DriverManager$2.run(DriverManager.java:583)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
        at java.sql.DriverManager.<clinit>(DriverManager.java:101)


        at com.oracle.svm.core.util.UserError.abort(UserError.java:68)
        at com.oracle.svm.hosted.classinitialization.ConfigurableClassInitialization.checkDelayedInitialization(ConfigurableClassInitialization.java:510)
        at com.oracle.svm.hosted.classinitialization.ClassInitializationFeature.duringAnalysis(ClassInitializationFeature.java:187)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$8(NativeImageGenerator.java:715)
        at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
        at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:715)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Image build request failed with exit status 1
com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
        at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1527)
        at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1289)
        at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1250)
        at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1209)

2. I add this option in compile.sh

--initialize-at-run-time=java.sql.DriverManager \

Error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Mar 20, 2020 3:33:07 PM org.springframework.boot.SpringApplication reportFailure
SEVERE: Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.ExceptionInInitializerError
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
        at app.main.SampleApplication.main(SampleApplication.java:65)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is java.lang.ExceptionInInitializerError
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
        ... 19 more
Caused by: java.lang.ExceptionInInitializerError
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:290)
        at java.lang.Class.ensureInitialized(DynamicHub.java:496)
        at com.mysql.cj.Constants.<clinit>(Constants.java:49)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        at java.lang.Class.ensureInitialized(DynamicHub.java:496)
        at com.mysql.cj.util.Util.<clinit>(Util.java:67)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        at java.lang.Class.ensureInitialized(DynamicHub.java:496)
        at com.mysql.cj.conf.ConnectionUrl.getConnectionUrlInstance(ConnectionUrl.java:200)
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:196)
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:353)
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:562)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
        at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:324)
        at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:120)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:136)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:102)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:94)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:132)
        at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:133)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 20 more
Caused by: java.lang.RuntimeException: Can't load resource bundle due to underlying exception java.util.MissingResourceException: Resource bundle not found com.mysql.cj.LocalizedErrorMessages. Register the resource bundle using the option -H:IncludeResourceBundles=com.mysql.cj.LocalizedErrorMessages.
        at com.mysql.cj.Messages.<clinit>(Messages.java:60)
        at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)
        at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)
        ... 53 more
Caused by: java.util.MissingResourceException: Resource bundle not found com.mysql.cj.LocalizedErrorMessages. Register the resource bundle using the option -H:IncludeResourceBundles=com.mysql.cj.LocalizedErrorMessages.
        at com.oracle.svm.core.jdk.LocalizationSupport.getCached(LocalizationSupport.java:66)
        at java.util.ResourceBundle.getBundle(ResourceBundle.java:53)
        at com.mysql.cj.Messages.<clinit>(Messages.java:58)
        ... 55 more

3. Add more option in compile.sh
Until here the compilation process is complete, errors appear in the runtime.

-H:IncludeResourceBundles=com.mysql.cj.LocalizedErrorMessages \

Error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Mar 20, 2020 3:05:07 PM org.springframework.boot.SpringApplication reportFailure
SEVERE: Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: com.mysql.cj.exceptions.CJException cannot be cast to com.mysql.cj.exceptions.WrongArgumentException
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
        at app.main.SampleApplication.main(SampleApplication.java:65)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean]: Factory method 'entityManagerFactory' threw exception; nested exception is com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: com.mysql.cj.exceptions.CJException cannot be cast to com.mysql.cj.exceptions.WrongArgumentException
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
        ... 19 more
Caused by: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: com.mysql.cj.exceptions.CJException cannot be cast to com.mysql.cj.exceptions.WrongArgumentException
        at com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException(HikariPool.java:597)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:576)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
        at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:324)
        at org.springframework.boot.jdbc.EmbeddedDatabaseConnection.isEmbedded(EmbeddedDatabaseConnection.java:120)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateDefaultDdlAutoProvider.getDefaultDdlAuto(HibernateDefaultDdlAutoProvider.java:42)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.lambda$getVendorProperties$1(HibernateJpaConfiguration.java:130)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings.getDdlAuto(HibernateSettings.java:41)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineDdlAuto(HibernateProperties.java:136)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.getAdditionalProperties(HibernateProperties.java:102)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties.determineHibernateProperties(HibernateProperties.java:94)
        at org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaConfiguration.getVendorProperties(HibernateJpaConfiguration.java:132)
        at org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.entityManagerFactory(JpaBaseConfiguration.java:133)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        ... 20 more
Caused by: java.lang.ClassCastException: com.mysql.cj.exceptions.CJException cannot be cast to com.mysql.cj.exceptions.WrongArgumentException
        at com.mysql.cj.util.Util.getInstance(Util.java:169)
        at com.mysql.cj.util.Util.getInstance(Util.java:174)
        at com.mysql.cj.conf.ConnectionUrl.getConnectionUrlInstance(ConnectionUrl.java:200)
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:196)
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:353)
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:562)
        ... 37 more
  • GraalVM Community Edition 20.0.0 (Java 8)
  • spring-graal-native from master branch

Is there anything I missed?

Maybe related with https://bugs.mysql.com/bug.php?id=91968

Fix vanilla-tx sample

Running vanilla-tx in upgrade_19_3 branch currently fails with the following error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Jan 20, 2020 1:54:21 PM org.springframework.boot.SpringApplication reportFailure
SEVERE: Application run failed
java.lang.IllegalStateException: Failed to execute CommandLineRunner
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at app.main.SampleApplication.main(SampleApplication.java:26)
Caused by: java.lang.IllegalArgumentException: Expected transaction
	at org.springframework.util.Assert.isTrue(Assert.java:118)
	at app.main.Runner.run(Runner.java:53)
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
	... 5 more

Notice that spring-petclinic-jpa works even if it uses @Transactional.

Scan error in Spring Feature, trying to find missing jar

Trying to build a pretty small app using Spring Boot 2.2.0 using GRPC libraries.

It's trying to find
grpc-core-1.21.0.jar
in the
/repository/io/grpc/grpc-netty-shaded/1.21.0/
directory.

[clr:84473]    classlist:  21,846.86 ms
 ____             _               _____          _
/ ___| _ __  _ __(_)_ __   __ _  |  ___|__  __ _| |_ _   _ _ __ ___
\___ \| '_ \| '__| | '_ \ / _` | | |_ / _ \/ _` | __| | | | '__/ _ \
 ___) | |_) | |  | | | | | (_| | |  _|  __/ (_| | |_| |_| | | |  __/
|____/| .__/|_|  |_|_| |_|\__, | |_|  \___|\__,_|\__|\__,_|_|  \___|
      |_|                 |___/

Use -Dverbose=true on native-image call to see more detailed information from the feature
Remove unused config = false
[clr:84473]        (cap):   1,717.82 ms
Found #397 types in static list to register
Skipping #52 types not on the classpath
Attempting proxy registration of #23 proxies
Skipped registration of #4 proxies - relevant types not on classpath
[clr:84473]        setup:   3,737.12 ms
Fatal error: java.lang.RuntimeException: java.lang.RuntimeException: Problem during scan of /Users/gostajonasson/.m2/repository/io/grpc/grpc-netty-shaded/1.21.0/grpc-core-1.21.0.jar
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
	at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
	at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:461)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:310)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:448)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:113)
Caused by: java.lang.RuntimeException: Problem during scan of /Users/gostajonasson/.m2/repository/io/grpc/grpc-netty-shaded/1.21.0/grpc-core-1.21.0.jar
	at org.springframework.graal.type.TypeSystem.indexJar(TypeSystem.java:275)
	at org.springframework.graal.type.TypeSystem.index(TypeSystem.java:228)
	at org.springframework.graal.type.TypeSystem.<init>(TypeSystem.java:73)
	at org.springframework.graal.type.TypeSystem.get(TypeSystem.java:68)
	at org.springframework.graal.support.ResourcesHandler.register(ResourcesHandler.java:86)
	at org.springframework.graal.support.SpringFeature.beforeAnalysis(SpringFeature.java:84)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$7(NativeImageGenerator.java:670)
	at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
	at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:670)
	at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:526)
	at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:444)
	at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.io.FileNotFoundException: /Users/gostajonasson/.m2/repository/io/grpc/grpc-netty-shaded/1.21.0/grpc-core-1.21.0.jar (No such file or directory)
	at java.util.zip.ZipFile.open(Native Method)
	at java.util.zip.ZipFile.<init>(ZipFile.java:225)
	at java.util.zip.ZipFile.<init>(ZipFile.java:155)
	at java.util.zip.ZipFile.<init>(ZipFile.java:169)
	at org.springframework.graal.type.TypeSystem.indexJar(TypeSystem.java:261)
	... 15 more
Error: Image build request failed with exit status 1

ConditionalOnUse

Here is the idea. ConditionalOnUse is not an annotation but a behavior that intends to avoid creating unused feature even if they are on the classpath if the related beans and/or annotations are not used.

The interesting point of convergence here is that with the tracing agent we need a phase where we run the application. Combined with closed world assumptions and the fact that most singletons are instantiated at startup, could we use this opportunity to identify unused beans, to remove them from what we provide to native-image allowing then to avoid compiling and bundled these classes in the native image? This could for example apply to RestTemplate and WebClient builders and avoid to load client related infrastructure when just the server is needed.

Another source of waste is Hibernate Validator (provided by default with spring-boot-starter-web and spring-boot-starter-webflux via spring-boot-starter-validation), I have briefly discuss this one with @bclozel, it is more complex because it depends of the validation classes used in the application, so just analyzing the whole classpath is likely to not be precise enough. A more simple and pragmatic approach for this case would be to find a way to solve how users could use thespring-boot-starter-validation without the non-intuitive exclude, that could potentially allow to avoid providing this spring-boot-starter-validation by default with the web starters.

Any thoughts?

Logback's File Appender in build time causes failed native image creation

Hi. I'm working on a project involving Spring Boot with WebSockets, and using Logback Classic as the logging implementation API.
The project is packaged on a war file with an embedded Tomcat.

Here are the logging dependencies in pom.xml:

		<!-- Logging APIs -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>log4j-over-slf4j</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jul-to-slf4j</artifactId>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
		</dependency>

and this is the logback.xml located at src/main/resources

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration debug="false" scan="false">
	<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
	<appender name="FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!-- Daily rollover -->
			<fileNamePattern>logs/signaling-%d{yyyyMMdd}.log</fileNamePattern>
			<!-- Keep 7 days' worth of history -->
			<maxHistory>7</maxHistory>
			<!-- logs up to a maximum size of 1GB -->
			<totalSizeCap>1GB</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%date{ISO8601} %-5level [%t] %X{uid} %c{0}: %msg%n</pattern>
		</encoder>
	</appender>
	<root level="INFO">
		<appender-ref ref="FILE" />
	</root>
</configuration>

As you can see above, the logging configuration file defines a File Appender (specifically the RollingFileAppender) which will create a file when the logging backend is instanciated at boot time.

The problem is that I'm not able to create a native image with file creation during native image build time.

After collecting every class involved in build time for the reflective instantiation of logback's file appender and put them into respective Spring Graal Feature files:
initialization.json, proxies.json, reflect.json, resources.json
(see attached file native-image-missing-features.txt)
I get the next message:

[signaling.war:3400]     analysis: 853,104.17 ms
Error: Detected a FileDescriptor in the image heap. File descriptors opened during image generation are no longer open at image run time, and the files might not even be present anymore at image run time. Object has been initialized without the native-image initialization instrumentation and the stack trace can't be tracked. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image run time by using the option --initialize-at-build-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Detailed message:
Trace:  object java.io.FileOutputStream
        object ch.qos.logback.core.recovery.ResilientFileOutputStream
        object ch.qos.logback.core.rolling.RollingFileAppender
        object ch.qos.logback.core.status.InfoStatus
        object java.lang.Object[]
        object java.util.ArrayList
        object ch.qos.logback.core.BasicStatusManager
        object ch.qos.logback.classic.LoggerContext
        object org.slf4j.impl.StaticLoggerBinder
        field org.slf4j.impl.StaticLoggerBinder.SINGLETON

Which is due to the attempt of a file creation given the File Appender configured in logback.properties.
See file attached file native-image-missing-features.txt to get an idea of all the missing features I had to add.

Is this caused by a misconfiguration on my project? Or is it a missing feature to allow logback's file appender correctly create a file descriptor in build time?

Aside note: if I use an empty logback.xml (I mean no appenders) then the error message disappears.

native-image-missing-features.txt

Upgrade to GraalVM 19.3

Main breaking change is about InetAddress and related subclasses, after the java 11 support refactoring, they now need to be initialized at runtime and not at build time. See this related issue.

No @CompilationHint found for: ManagementContextConfigurationImportSelector

Running with the latest self compiled version of spring-graal-native-feature from the master branch (0.6.0.BUILD-SNAPSHOT) on a rather small Spring Boot app that I have.

Then I get this error:

Fatal error: java.lang.IllegalStateException: java.lang.IllegalStateException: No @CompilationHint found for import selector: org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextConfigurationImportSelector
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
	at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
	at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:461)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:310)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:448)
	at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:113)
Caused by: java.lang.IllegalStateException: No @CompilationHint found for import selector: org.springframework.boot.actuate.autoconfigure.web.server.ManagementContextConfigurationImportSelector
	at org.springframework.graal.type.Type.getHints(Type.java:865)

What do I need to do in order to compile successfully?

proxy and reflection settings are insufficient for Pet Clinic

The Pet Clinic application can be built as Native Image.
However, when I click the "Add New Pet" button in "Owner Information" page, an internal error has occurred.

The settings seem to be insufficient.
After I added org.springframework.web.bind.annotation.ModelAttribute and org.springframework.format.annotation.DateTimeFormat to both proxies.json and reflect.json, it works fine.

Error occurred while native image building springmvc-tomcat

When executing the compile.sh of springmvc-tomcat. Native image is not getting generated.

Can you please let me know what needs to be done.

Receiving the following error.
Fatal error: java.lang.NoClassDefFoundError: org/springframework/orm/jpa/JpaVendorAdapter at java.base/java.lang.Class.getDeclaringClass0(Native Method) at java.base/java.lang.Class.isMemberClass(Class.java:1668) at java.base/sun.reflect.annotation.TypeAnnotationParser.buildAnnotatedTypes(TypeAnnotationParser.java:134) at java.base/java.lang.reflect.Executable.getAnnotatedParameterTypes(Executable.java:700) at com.oracle.svm.reflect.target.Target_java_lang_reflect_Executable$AnnotatedParameterTypesComputer.compute(Target_java_lang_reflect_Executable.java:154) at com.oracle.svm.hosted.substitute.ComputedValueField.readValue(ComputedValueField.java:265) at com.oracle.svm.core.meta.ReadableJavaField.readFieldValue(ReadableJavaField.java:35) at com.oracle.svm.hosted.ameta.AnalysisConstantReflectionProvider.readValue(AnalysisConstantReflectionProvider.java:98) at com.oracle.svm.hosted.ameta.AnalysisConstantReflectionProvider.readFieldValue(AnalysisConstantReflectionProvider.java:77) at com.oracle.graal.pointsto.ObjectScanner.scanField(ObjectScanner.java:175) at com.oracle.graal.pointsto.ObjectScanner.doScan(ObjectScanner.java:344) at com.oracle.graal.pointsto.ObjectScanner.access$400(ObjectScanner.java:62) at com.oracle.graal.pointsto.ObjectScanner$3$1.run(ObjectScanner.java:414) at com.oracle.graal.pointsto.util.CompletionExecutor.lambda$execute$0(CompletionExecutor.java:171) at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177) Error: Image build request failed with exit status 1

java.lang.OutOfMemoryError: GC overhead limit exceeded

Hi
I tried to compile vanilla-jpa sample project on my 8GB Ubuntu (7.5GB free) but got this error message

java.lang.OutOfMemoryError: GC overhead limit exceeded

GraalVM version

openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-20190711120915.buildslave.jdk8u-src-tar--b08)
OpenJDK 64-Bit GraalVM CE 19.2.0 (build 25.222-b08-jvmci-19.2-b02, mixed mode)

Is there anything I missed? or is there a minimum of RAM for building native image in this project?

Trying to build vanilla-jpa with PostgreSQL

Hi, I am trying to build vanilla-jpa with PostgreSQL as database, but got some error.

1. Add postgresql dependency and some config
pom.xml

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>

application.properties

spring.datasource.url=jdbc:postgresql://localhost:5432/bar
spring.datasource.username=root
spring.datasource.password=password

Error:

Error: Classes that should be initialized at run time got initialized during image building:
 org.postgresql.Driver was unintentionally initialized at build time. java.sql.DriverManager caused initialization of this class with the following trace: 
        at org.postgresql.Driver.<clinit>(Driver.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.sql.DriverManager$2.run(DriverManager.java:603)
        at java.sql.DriverManager$2.run(DriverManager.java:583)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
        at java.sql.DriverManager.<clinit>(DriverManager.java:101)


com.oracle.svm.core.util.UserError$UserException: Classes that should be initialized at run time got initialized during image building:
 org.postgresql.Driver was unintentionally initialized at build time. java.sql.DriverManager caused initialization of this class with the following trace: 
        at org.postgresql.Driver.<clinit>(Driver.java)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
        at java.sql.DriverManager$2.run(DriverManager.java:603)
        at java.sql.DriverManager$2.run(DriverManager.java:583)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.sql.DriverManager.loadInitialDrivers(DriverManager.java:583)
        at java.sql.DriverManager.<clinit>(DriverManager.java:101)


        at com.oracle.svm.core.util.UserError.abort(UserError.java:68)
        at com.oracle.svm.hosted.classinitialization.ConfigurableClassInitialization.checkDelayedInitialization(ConfigurableClassInitialization.java:510)
        at com.oracle.svm.hosted.classinitialization.ClassInitializationFeature.duringAnalysis(ClassInitializationFeature.java:187)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$runPointsToAnalysis$8(NativeImageGenerator.java:715)
        at com.oracle.svm.hosted.FeatureHandler.forEachFeature(FeatureHandler.java:63)
        at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:715)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:530)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:445)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error: Image build request failed with exit status 1
com.oracle.svm.driver.NativeImage$NativeImageError: Image build request failed with exit status 1
        at com.oracle.svm.driver.NativeImage.showError(NativeImage.java:1527)
        at com.oracle.svm.driver.NativeImage.build(NativeImage.java:1289)
        at com.oracle.svm.driver.NativeImage.performBuild(NativeImage.java:1250)
        at com.oracle.svm.driver.NativeImage.main(NativeImage.java:1209)

2. Add some option in compile.sh

--initialize-at-run-time=java.sql.DriverManager \

Error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Mar 20, 2020 3:56:53 PM org.springframework.boot.SpringApplication reportFailure
SEVERE: Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fooRepository' defined in app.main.model.FooRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:113)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1699)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1444)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:617)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:605)
        at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:51)
        at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:36)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897)
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.finishRefresh(ReactiveWebServerApplicationContext.java:116)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
        at app.main.SampleApplication.main(SampleApplication.java:65)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:330)
        ... 28 more
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
        at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:175)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233)
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
        at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:527)
        at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:100)
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:54)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
        ... 19 more

3. Add this properties in application.properties

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect

Error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Mar 20, 2020 4:06:20 PM org.springframework.boot.SpringApplication reportFailure
SEVERE: Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'fooRepository' defined in app.main.model.FooRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:342)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:113)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1699)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1444)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:617)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:605)
        at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:51)
        at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:36)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897)
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.finishRefresh(ReactiveWebServerApplicationContext.java:116)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
        at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
        at app.main.SampleApplication.main(SampleApplication.java:65)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:330)
        ... 28 more
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:237)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
        at org.hibernate.id.factory.internal.DefaultIdentifierGeneratorFactory.injectServices(DefaultIdentifierGeneratorFactory.java:152)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.injectDependencies(AbstractServiceRegistryImpl.java:286)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:243)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:214)
        at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.<init>(InFlightMetadataCollectorImpl.java:175)
        at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:118)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202)
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233)
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
        at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:527)
        at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:193)
Caused by: org.hibernate.boot.registry.selector.spi.StrategySelectionException: Unable to resolve name [org.hibernate.dialect.PostgreSQL10Dialect] as strategy [org.hibernate.dialect.Dialect]
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:133)
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:212)
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:160)
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveDefaultableStrategy(StrategySelectorImpl.java:147)
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.resolveStrategy(StrategySelectorImpl.java:141)
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.constructDialect(DialectFactoryImpl.java:74)
        at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:51)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:137)
        at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
        at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:101)
        at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:263)
        ... 19 more
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [org.hibernate.dialect.PostgreSQL10Dialect]
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:133)
        at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:129)
        ... 29 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.dialect.PostgreSQL10Dialect
        at com.oracle.svm.core.hub.ClassForNameSupport.forName(ClassForNameSupport.java:60)
        at java.lang.Class.forName(DynamicHub.java:1224)
        at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:130)
        ... 30 more

4. Add this in reflect-config.json
Until here the compilation process is complete, errors appear in the runtime.

{
"name": "org.hibernate.dialect.PostgreSQL10Dialect",
"allDeclaredFields": true,
"allDeclaredConstructors": true,
"allDeclaredMethods": true
}

Error:

2020-03-20 16:19:59.602 DEBUG 19253 --- [           main] o.h.e.t.internal.TransactionImpl         : On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
        at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:448)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:376)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:572)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:360)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:99)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:178)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
        at com.sun.proxy.$Proxy253.findById(Unknown Source)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:344)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:205)
        at com.sun.proxy.$Proxy254.findById(Unknown Source)
        at app.main.SampleApplication.lambda$runner$0(SampleApplication.java:35)
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
        at app.main.SampleApplication.main(SampleApplication.java:65)
Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
        at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:112)
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
        at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:107)
        at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:134)
        at org.hibernate.internal.SessionImpl.connection(SessionImpl.java:462)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:282)
        at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:266)
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle.doGetConnection(HibernateJpaDialect.java:430)
        at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:174)
        at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:402)
        ... 24 more
Caused by: org.postgresql.util.PSQLException: Could not find a java cryptographic algorithm: Error constructing implementation (algorithm: TLS, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$TLSContext).
        at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:162)
        at org.postgresql.core.SocketFactoryFactory.getSslSocketFactory(SocketFactoryFactory.java:61)
        at org.postgresql.ssl.MakeSSL.convert(MakeSSL.java:33)
        at org.postgresql.core.v3.ConnectionFactoryImpl.enableSSL(ConnectionFactoryImpl.java:441)
        at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:94)
        at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:192)
        at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
        at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
        at org.postgresql.Driver.makeConnection(Driver.java:458)
        at org.postgresql.Driver.connect(Driver.java:260)
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:353)
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201)
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473)
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:562)
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
        at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122)
        at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:38)
        at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:104)
        ... 32 more
Caused by: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: TLS, provider: SunJSSE, class: sun.security.ssl.SSLContextImpl$TLSContext)
        at java.security.Provider$Service.newInstance(Provider.java:1621)
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:236)
        at sun.security.jca.GetInstance.getInstance(GetInstance.java:164)
        at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
        at org.postgresql.ssl.LibPQFactory.<init>(LibPQFactory.java:51)
        ... 51 more
Caused by: java.lang.NoSuchMethodException: sun.security.ssl.SSLContextImpl$TLSContext.<init>()
        at java.lang.Class.getConstructor0(DynamicHub.java:3082)
        at java.lang.Class.getConstructor(DynamicHub.java:1825)
        at java.security.Provider$Service.newInstance(Provider.java:1594)
        ... 55 more
  • GraalVM Community Edition 20.0.0 (Java 8)
  • spring-graal-native from master branch

Is there anything I missed?

Remove CGLIB classes from native images

Native images are currently compiled and shipped with CGLIB classes provided with Spring Framework in org.springframework.cglib package, they should be excluded via configuration (in the feature ?) and we should check that nothing breaks on Spring Framework side. Otherwise we should create a dedicated issue in Spring Framework to make it possible to run it without CGLIB.

Fix vanilla-orm sample

Running vanilla-orm in upgrade_19_3 branch currently fails with the following error:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Jan 20, 2020 1:57:07 PM org.springframework.boot.SpringApplication reportFailure
SEVERE: Application run failed
java.lang.IllegalStateException: Failed to execute CommandLineRunner
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:787)
	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:768)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
	at app.main.SampleApplication.main(SampleApplication.java:38)
Caused by: javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call
	at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298)
	at com.sun.proxy.$Proxy229.persist(Unknown Source)
	at app.main.Bootstrap.run(SampleApplication.java:55)
	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:784)
	... 5 more

Notice that vanilla-orm2 works, and the main difference between the 2 seems to be the fact that vanilla-orm uses @Transactional while vanilla-orm2 uses programmatic transactions. Surprisingly, spring-petclinic-jpa works even if it uses @Transactional.

Refactor modules

  • Create a dedicated spring-graal-native-substitutions module
  • Create a shaded spring-graal-native module for user consumption

Support running JUnit 5 tests as native image

@aclement has recently demonstrated it is possible to run a subset of Spring Framework unit tests as native images. The purpose of this issue is to start from that POC to experiment and identify the next steps toward a more robust and mature arrangement that would allow to run a subset of Spring Framework and Spring Boot JUnit 5 tests as a native image in order to:

  • Identify in an automated fashion what part of Spring ecosystem works as native image and what part does not
  • Provide regression testing for each update of Spring Framework, Spring Boot and GraalVM native.
  • Provide a way for end user Spring Boot applications to be tested
  • Provide a way to test GraalVM native support for libraries that support it natively like Netty or Tomcat

Goal of this issue:

  • Provide a way to run these tests via command line/Gradle/Maven
  • Provide a way to identify tests that will be ran as native images and those who will not because for example by design they can't due to native images limitations (configuration whitelisting or backlisting, support for conditional execution via annotations and ExecutionCondition).
  • Is JUnit console launcher this right way to support it or not?
  • What kind of output are we expecting? Could we generate similar output than JUnit 5 Maven/Gradle regular OpenJDK plugins?
  • Create GraalVM native support for JUnit 5 via a feature or JSON configuration files (the related module can live in spring-graal-native for now)
  • Allow to run tests locally (using java and native-image currently in the path, or in a container)
  • Explore with @bsideup the opportunity of leveraging Testcontainers for testing in containers
  • Check if that's interesting to use GraalVM capability to create shared libraries + calling them from Java code
  • Provide a dedicated wiki page.

Non-goal of this issue:

  • Integration in IDEs
  • JUnit 4 support

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.