Skip to content

Native image

Tomas Langer edited this page Apr 30, 2020 · 17 revisions

Helidon supports ahead of time compilation using GraalVM native image.

The following table shows support of native-image in Helidon modules (all module names are prefixed with helidon-).

There are two sections - one for Helidon 1.x and one for (the next version) Helidon 2.x.

Status:

✅ - native-image is supported and tested

👍 - native-image should work, not part of regular tests (yet)

🔶 - native-image works partially (description provided)

⏳ - native-image does not work (and we are working on it!)

🛑 - native-image does not work (and will not work for now)

❓ - native-image not yet tested

Helidon 1

This is a work in progress, the list is incomplete

Module Description native-image status
webserver HTTP server
media-jsonp-server JSON-P suppport
media-jsonb-server JSON-B suppport 👍
media-jsonb-server Jackson suppport 👍
config Configuration
config-yaml YAML file support
config-object-mapping Object mapping support 🛑
metrics Metric support
health Health check support
health-checks Health checks (built-in)
tracing Tracing builder 👍
tracing-zipkin Zipkin tracing support 👍
tracing-jaeger Jaeger tracing support 👍
security Security 👍
security-providers-abac ABAC provider 👍
security-providers-http-auth HTTP Basic authentication provider 👍
security-providers-http-sign HTTP Signatures provider 👍
security-providers-oidc Open ID Connect provider 👍
org.glassfish.jersey.core:jersey-client Jersey HTTP Client *1 🔶
org.glassfish.jersey.inject:jersey-hk2 Jersey HK2 *2 🔶
security-integration-jersey-client Security propagation 👍
tracing-jersey-client Tracing propagation 👍
microprofile All Helidon MP modules 🛑

*1: Jersey HTTP Client: Jersey core currently contains a dependency on "rendered image writer" - this depends on Image I/O. As a result, you can build such an image on an environment that supports Image I/O (such as a MacOS or a Linux distribution with X). Unfortunately this is not supported when building a native image within a Docker (as is one option in our quickstart example)

*2: Jersey HK2: This is required for the Jersey client to work. We have seen this working without issues, though there is quite a wide filter to include classes for reflection. This results in long image builds.

Helidon 2

This list is valid for Helidon 2.0 and newer ONLY

Current list is valid for master branch (until the release of Helidon 2.0.0).

Support will NOT be backported into 1.x branch, due to required backward incompatible changes in MP implementation.

Helidon SE

Module Description native-image status
config Configuration
config-encryption Encrypt secrets in config
config-etcd etcd config source
config-git git config source
config-hocon hocon config source 👍
config-object-mapping Object mapping support
config-yaml YAML config source
dbclient Helidon reactive DB client
health Health check support
health-checks Health checks (built-in)
jersey-client Jersey client *1 🔶
jersey-media-jsonp Jersey JSON-P
jersey-server Jersey server *1 🔶
media-jackson-server Jackson suppport 👍
media-jsonb-server JSON-B suppport 👍
media-jsonp-server JSON-P suppport
metrics Metric support
metrics-prometheus Prometheus client support
openapi OpenAPI support
security Security
security-abac-policy ABAC provider
security-abac-policy-el ABAC extension for Expression language
security-abac-role ABAC extension for RBAC
security-abac-scope ABAC extension for scopes
security-abac-time ABAC extension for time based rules
security-integration-jersey Security integration with Jersey server
security-integration-jersey-client Security integration with Jersey client
security-integration-webserver Security integration with webserver
security-providers-abac ABAC provider
security-providers-google-login Google login button support
security-providers-header Header based security
security-providers-http-auth HTTP Basic authentication provider
security-providers-http-sign HTTP Signatures provider 👍
security-providers-idcs-mapper IDCS role mapping
security-providers-jwt JWT provider (use OIDC)
security-providers-oidc Open ID Connect provider
tracing Tracing builder
tracing-jaeger Jaeger tracing support
tracing-jersey Tracing support for Jersey server
tracing-jersey-client Tracing support for Jersey client
tracing-zipkin Zipkin tracing support 👍
webclient-jaxrs Helidon extension of Jersey client 👍
webclient Helidon reactive web client
webserver HTTP Server
webserver-access-log Access Log
webserver-jersey Jersey support
websocket WebSocket support

*1: Jersey Server and Client: Jersey core currently contains a dependency on "rendered image writer" - this depends on Image I/O. As a result, you can build such an image on an environment that supports Image I/O (such as a MacOS or a Linux distribution with X). Unfortunately this is not supported when building a native image within a Docker (as is one option in our quickstart example) Also there is quite a wide filter to include classes for reflection. This results in long image builds.

Helidon MP

Module Description native-image status
microprofile-cdi CDI
microprofile-server Server Impl
microprofile-access-log Access Log Support
microprofile-config Configuration Spec Impl
microprofile-fault-tolerance Fault Tolerance Spec Impl
microprofile-health Health Spec Impl
microprofile-jwt-auth JWT-Auth Spec Impl
microprofile-metrics Metrics Spec Impl
microprofile-oidc OIDC Security Support
microprofile-openapi OpenAPI Spec Impl
microprofile-rest-client REST-Client Spec Impl *1 🔶
microprofile-security Security Support
microprofile-tracing Tracing Spec Impl

*1 - MP REST-Client: calling a default method on an interface does not work (limitations of native image due to complicated method reference implementation).

Helidon gRPC

Modules of gRPC implementation.

gRPC SE

Module Description native-image status
grpc-server gRPC server
grpc-client gRPC client
grpc-metrics Metrics for gRPC
security-integration-grpc gRPC security

gRPC MP

Module Description native-image status
microprofile-grpc-server gRPC Server
microprofile-grpc-client gRPC Client
microprofile-grpc-metrics gRPC Metrics

CDI extensions

Module Description native-image status
integrations-cdi-datasource-hikaricp Hikari Data Source 👍
integrations-cdi-datasource-ucp Oracle UCP Data Source
integrations-cdi-jta JTA 👍
integrations-cdi-eclipselink JPA - Eclipse Link
integrations-cdi-hibernate JPA - Hibernate 👍
integrations-cdi-jedis Jedis Support
integrations-cdi-oci-objectstorage Object Storage
serviceconfiguration-api
serviceconfiguration-config-source
serviceconfiguration-hikaricp
serviceconfiguration-hikaricp-accs
serviceconfiguration-hikaricp-localhost
serviceconfiguration-system-kubernetes
serviceconfiguration-system-oracle-accs
serviceconfiguration-ucp
serviceconfiguration-ucp-accs
serviceconfiguration-ucp-localhost