- Helidon SE 3.x Upgrade Guide
In Helidon 3 we have made some changes to APIs and runtime behavior. This guide will help you upgrade a Helidon SE 2.x application to 3.x.
Java 17 Runtime
Java 11 is no longer supported in Helidon 3. Java 17 or newer is required. Please follow the instructions in Prerequisites for proper installation.
New Routing
Handling routes based on the protocol version is now possible by registering specific routes on routing builder.
For further information check WebServer Documentation
Http/2 Support
Helidon support of Http/2 is no longer experimental.
Http/2 needed to be explicitly enabled by configuration in Helidon 2:
server:
port: 8080
host: 0.0.0.0
experimental:
enable-http2: true
http2-max-content-length: 16384In Helidon 3 Http/2 is automatically enabled when artifact with Http/2 support is available on the classpath.
<dependency>
<groupId>io.helidon.webserver</groupId>
<artifactId>helidon-webserver-http2</artifactId>
</dependency>With above dependency Helidon 3 supports Http/2 upgrade from Http/1, cleartext Http/2 without prior knowledge and Http/2 with ALPN over TLS.
In Helidon 2, max content length was configurable with server.experimental.http2-max-content-length, in Helidon 3 can be configured with server.max-upgrade-content-length globally or per socket with the same max-upgrade-content-length key.
server:
port: 8080
host: 0.0.0.0
max-upgrade-content-length: 16384For further information check WebServer Documentation
WebSocket
Helidon SE support is now based on the WebSocketRouting class which enables Helidon application to configure routing for both annotated and programmatic WebSocket endpoints. TyrusSupport is now deprecated. Websocket support in now placed in different artifact.
<dependency>
<groupId>io.helidon.webserver</groupId>
<artifactId>helidon-webserver-tyrus</artifactId>
</dependency><dependency>
<groupId>io.helidon.webserver</groupId>
<artifactId>helidon-webserver-websocket</artifactId>
</dependency>In Helidon 2, WebSocket routing is defined by registering TyrusSupport as additional service:
WebServer.builder(Routing.builder()
.register("/rest", new SomeRestService())
.register("/websocket", TyrusSupport.builder()
.register(ServerEndpointConfig.Builder
.create(MessageBoardEndpoint.class, "/")
.encoders(encoders)
.build())
.build()
))
.port(8080)
.build();- Traditional REST routing service registration
- WebSocket setup with Tyrus service
In Helidon 3, WebSocket routing is defined by adding another routing:
WebServer.builder()
.routing(r -> r
.register("/rest", new SomeRestService())
)
.addRouting(WebSocketRouting.builder()
.endpoint("/websocket", ServerEndpointConfig.Builder
.create(MessageBoardEndpoint.class, "/board")
.encoders(encoders)
.build())
.build())
.port(8080)- Traditional REST routing service registration
- WebSocket routing setup
Deprecations
The custom Helidon OCI clients have been deprecated (See PR).
Use the OCI Java SDK instead. If you use Helidon MP you can inject OCI SDK clients by adding the dependency io.helidon.integrations.oci.sdk:helidon-integrations-oci-sdk-cdi.
See Resolving compatibility issue with OCI SDK for detailed information on how to work around this issue.
The MultiPart buffered readers have been deprecated (See PR). Use the MultiPart stream readers instead.
Helidon Common
Deprecations in the following classes:
Resource- old configuration approach (since 2.0)ThreadPoolSupplier- Named thread pools (since 2.4.2)
More information in the following Task.
Media Common
Deprecations in the following classes:
ContentReaders- Methods with alternatives (since 2.0)ContentTypeCharset- Class with alternative (since 2.0)ContentWriters- Methods with alternatives (since 2.0)MessageBodyReaderContext- Methods with alternatives (since 2.0)MessageBodyWriterContext- Methods with alternatives (since 2.0)ReadableByteChannelPublisher- Class with alternative (since 2.0)
More information in the following Task.
Metrics
Deprecations in the following classes:
MetricsSupport- 3 methods, replacing Config with metrics settingsKeyPerformanceIndicatorMetricsSettings- New class in metrics API, for backward compatibility onlyRegistryFactory- New class in metrics API, for backward compatibility only
More information in the following Task.
Common Context
Deprecations in the following class:
DataPropagationProvider- clearData should use new method
More information in the following Task.
GRPC core
Deprecations:
JavaMarshaller- removed support for JavaMarshaller
More information in the following Task.
gRPC scope is temporarily smaller in Helidon, please follow issue https://github.com/helidon-io/helidon/issues/5418
LRA
Deprecations in the following class:
CoordinatorClient- multiple methodsHeaders
More information in the following Task.
MP Messaging
Deprecations in the following class:
MessagingCdiExtension- Alternative methods used
More information in the following Task.
JWT
Deprecations in the following class:
Jwt- Audience can be a list (since 2.4.0)
More information in the following Task.
MP Metrics
Deprecations in the following class:
MetricUtil- multiple methodsMetricsCdiExtension- multiple methods
More information in the following Task.
HTTP Signature Security Provider
backwardCompatibleEol- set to false
More information in the following Task.
Service Common
Deprecations in the following class:
HelidonRestServiceSupport- method configureEndpoint(Rules)
More information in the following Task.
WebServer
Static content supportinWebServer- moved to a separate module. Fully removed fromWebServermodule.
More information in the following Task.