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 ❓