All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
This is a major release of Helidon.
- Removed
io.helidon.reactive.Flow
, please usejava.util.concurrent.Flow
- Removed
io.helidon.common.CollectionsHelper
, please use factory methods ofSet
,Map
andList
- Removed
io.helidon.common.OptionalHelper
, please use methods ofjava.util.Optional
- Removed
io.helidon.common.StackWalker
, please usejava.lang.StackWalker
- Removed
io.helidon.common.InputStreamHelper
, please usejava.io.InputStream
methods
- We have upgraded to OpenTracing version 0.33.0 that is not backward compatible, the following breaking changes exist
(these are OpenTracing changes, not Helidon changes):
TextMapExtractAdapter
andTextMapInjectAdapter
are nowTextMapAdapter
- module name changed from
opentracing.api
toio.opentracing.api
(same fornoop
andutil
) SpanBuilder
no longer hasstartActive
method, you need to useTracer.activateSpan(Span)
ScopeManager.activate(Span, boolean)
is replaced byScopeManager.activate(Span)
- second parameter is now alwaysfalse
Scope ScopeManager.active()
is removed - replaced bySpan Tracer.activeSpan()
- If you use the
TracerBuilder
abstraction in Helidon and have no custom Spans, there is no change required
Meta configuration has been refactored to be done through ServiceLoader
services. If you created
a custom ConfigSource
, PollingStrategy
or RetryPolicy
, please have a look at the new documentation.
Config now implements MicroProfile config (not explicitly, you can cast between MP Config and Helidon Config). There is a very small behavior change between MP methods and SE methods of config related to system property handling:
The MP TCK require that system properties are fully mutable (e.g. as soon as the property is changed, it
must be used), so MP Config methods work in this manner (with a certain performance overhead).
Helidon Config treats System properties as a mutable config source, with a time based polling strategy. So
the change is reflected as well, though not immediately (this is only relevant if you use change notifications).
Helidon now supports only MicroProfile Metrics 2.x. Modules for Metrics 1.x were removed, and
modules for 2.x were renamed from metrics2
to metrics
.
- When OIDC provider is configured to use cookie (default configuration) to carry authentication information,
the cookie
Same-Site
is now set toLax
(used to beStrict
). This is to prevent infinite redirects, as browsers would refuse to set the cookie on redirected requests (due to this setting). Only in case the frontend host and identity host match, we leaveStrict
as the default
We have removed all versioned MP bundles. You can use the following:
io.helidon.microprofile.bundles:helidon-microprofile-core
- contains MP Server and Config, allows you to add only specifications needed by your applicationio.helidon.microprofile.bundles:helidon-microprofile
- contains the latest MP version implemented by Helidon
- You cannot start CDI container yourself (this change is required so we can
support GraalVM
native-image
)- You can only run a single instance of Server in a JVM
- If you use
SeContainerInitializer
you would get an exception- this can be worked around by configuration property
mp.initializer.allow=true
, and warning can be removed usingmp.initializer.no-warn=true
- once
SeContainerInitializer
is used, you can no longer use MP withnative-image
- this can be worked around by configuration property
- You can no longer provide a
Context
instance, root context is now built-in MpService
andMpServiceContext
have been removed- methods from context have been moved to
JaxRsCdiExtension
andServerCdiExtension
that can be accessed from CDI extension throughBeanManager.getExtension
. - methods
register
can be used on currentio.helidon.context.Context
MpService
equivalent is a CDI extension. All Helidon services were refactored to CDI extension (you can use these for reference)
- methods from context have been moved to
Server.cdiContainer
is removed, useCDI.current()
instead
New recommended option to start Helidon MP:
- Use class
io.helidon.microprofile.cdi.Main
- Use meta configuration option when advanced configuration of config is required (e.g.
meta-config.yaml
) - Put
logging.properties
on the classpath or in the current directory to be automatically picked up to configure Java util logging
io.helidon.microprofile.server.Main
is still available, just calls io.helidon.microprofile.cdi.Main
and is deprecated.
io.helidon.microprofile.server.Server
is still available, though the features are much reduced
If a JAX-RS application exists that is annotated with @LoginConfig
with value MP-JWT
, the correct authentication
provider is added to security.
The startup would fail if the provider is required yet not configured.
If there is no authentication provider configured, authentication will always fail. If there is no authorization provider configured, ABAC provider will be configured. (original behavior - these were configured if there was no provider configured overall)
- JAX-RS applications now work similar to how they work in application servers
- if there is an
Application
subclass that returns anything fromgetClasses
orgetSingletons
, it is used as is - if there is an
Application
subclass that returns empty sets from these methods, all available resource classes will be part of such an application - if there is no
Application
subclass, a synthetic application will be created with all available resource classes Application
subclasses MUST be annotated with@ApplicationScoped
, otherwise they are ignored
- if there is an
The following enhancements are experimental. They should be considered unstable and subject to change.