diff --git a/helidon/.helidon b/helidon/.helidon
index 160fb46..4836e90 100644
--- a/helidon/.helidon
+++ b/helidon/.helidon
@@ -1,17 +1,6 @@
-# Helidon Project Configuration
-# >>> This is a generated file, do not edit. <<<
-#
-#Thu Jan 04 15:40:39 MST 2024
-helidon.version=4.0.2
-project.archetype=quickstart
-project.classdirs=/Users/mraible/dev/auth0/auth0-java-rest-api-examples/helidon/target/classes
-project.dependencies=/Users/mraible/.m2/repository/io/helidon/microprofile/bundles/helidon-microprofile-core/4.0.2/helidon-microprofile-core-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/server/helidon-microprofile-server/4.0.2/helidon-microprofile-server-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/observe/helidon-webserver-observe/4.0.2/helidon-webserver-observe-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/cdi/helidon-microprofile-cdi/4.0.2/helidon-microprofile-cdi-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/helidon/4.0.2/helidon-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/weld/weld-se-core/4.0.2/weld-se-core-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/weld/weld-core-impl/4.0.2/weld-core-impl-4.0.2.jar,/Users/mraible/.m2/repository/org/jboss/weld/environment/weld-environment-common/5.1.1.SP2/weld-environment-common-5.1.1.SP2.jar,/Users/mraible/.m2/repository/org/jboss/weld/weld-api/5.0.SP3/weld-api-5.0.SP3.jar,/Users/mraible/.m2/repository/org/jboss/weld/weld-spi/5.0.SP3/weld-spi-5.0.SP3.jar,/Users/mraible/.m2/repository/org/jboss/classfilewriter/jboss-classfilewriter/1.3.0.Final/jboss-classfilewriter-1.3.0.Final.jar,/Users/mraible/.m2/repository/org/jboss/weld/weld-lite-extension-translator/5.1.1.SP2/weld-lite-extension-translator-5.1.1.SP2.jar,/Users/mraible/.m2/repository/org/jboss/logging/jboss-logging-processor/2.2.1.Final/jboss-logging-processor-2.2.1.Final.jar,/Users/mraible/.m2/repository/org/jboss/logging/jboss-logging-annotations/2.2.1.Final/jboss-logging-annotations-2.2.1.Final.jar,/Users/mraible/.m2/repository/org/jboss/jdeparser/jdeparser/2.0.3.Final/jdeparser-2.0.3.Final.jar,/Users/mraible/.m2/repository/io/helidon/common/features/helidon-common-features/4.0.2/helidon-common-features-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/features/helidon-common-features-api/4.0.2/helidon-common-features-api-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/helidon-webserver/4.0.2/helidon-webserver-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-socket/4.0.2/helidon-common-socket-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-key-util/4.0.2/helidon-common-key-util-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-task/4.0.2/helidon-common-task-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-tls/4.0.2/helidon-common-tls-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/http/media/helidon-http-media/4.0.2/helidon-http-media-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/http/encoding/helidon-http-encoding/4.0.2/helidon-http-encoding-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/helidon-webserver-static-content/4.0.2/helidon-webserver-static-content-4.0.2.jar,/Users/mraible/.m2/repository/jakarta/enterprise/jakarta.enterprise.cdi-api/4.0.1/jakarta.enterprise.cdi-api-4.0.1.jar,/Users/mraible/.m2/repository/jakarta/enterprise/jakarta.enterprise.lang-model/4.0.1/jakarta.enterprise.lang-model-4.0.1.jar,/Users/mraible/.m2/repository/jakarta/el/jakarta.el-api/5.0.1/jakarta.el-api-5.0.1.jar,/Users/mraible/.m2/repository/io/helidon/http/media/helidon-http-media-jsonp/4.0.2/helidon-http-media-jsonp-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/helidon-webserver-context/4.0.2/helidon-webserver-context-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/jersey/helidon-jersey-server/4.0.2/helidon-jersey-server-4.0.2.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/core/jersey-server/3.1.4/jersey-server-3.1.4.jar,/Users/mraible/.m2/repository/jakarta/validation/jakarta.validation-api/3.0.0/jakarta.validation-api-3.0.0.jar,/Users/mraible/.m2/repository/io/helidon/config/helidon-config-yaml/4.0.2/helidon-config-yaml-4.0.2.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/ext/cdi/jersey-weld2-se/3.1.4/jersey-weld2-se-3.1.4.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/ext/cdi/jersey-cdi1x/3.1.4/jersey-cdi1x-3.1.4.jar,/Users/mraible/.m2/repository/io/helidon/jersey/helidon-jersey-media-jsonp/4.0.2/helidon-jersey-media-jsonp-4.0.2.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/media/jersey-media-json-processing/3.1.4/jersey-media-json-processing-3.1.4.jar,/Users/mraible/.m2/repository/org/eclipse/parsson/parsson-media/1.1.5/parsson-media-1.1.5.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/config/helidon-microprofile-config/4.0.2/helidon-microprofile-config-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/config/helidon-config-mp/4.0.2/helidon-config-mp-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/config/helidon-config-encryption/4.0.2/helidon-config-encryption-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-crypto/4.0.2/helidon-common-crypto-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/config/helidon-config-object-mapping/4.0.2/helidon-config-object-mapping-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/openapi/helidon-microprofile-openapi/4.0.2/helidon-microprofile-openapi-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/openapi/helidon-openapi/4.0.2/helidon-openapi-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-config/4.0.2/helidon-common-config-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-mapper/4.0.2/helidon-common-mapper-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-media-type/4.0.2/helidon-common-media-type-4.0.2.jar,/Users/mraible/.m2/repository/org/eclipse/microprofile/config/microprofile-config-api/3.0.3/microprofile-config-api-3.0.3.jar,/Users/mraible/.m2/repository/org/eclipse/microprofile/openapi/microprofile-openapi-api/3.1.1/microprofile-openapi-api-3.1.1.jar,/Users/mraible/.m2/repository/io/helidon/webserver/helidon-webserver-service-common/4.0.2/helidon-webserver-service-common-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/helidon-webserver-cors/4.0.2/helidon-webserver-cors-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/cors/helidon-cors/4.0.2/helidon-cors-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/service-common/helidon-microprofile-service-common/4.0.2/helidon-microprofile-service-common-4.0.2.jar,/Users/mraible/.m2/repository/io/smallrye/smallrye-open-api-core/3.3.4/smallrye-open-api-core-3.3.4.jar,/Users/mraible/.m2/repository/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar,/Users/mraible/.m2/repository/io/smallrye/smallrye-open-api-jaxrs/3.3.4/smallrye-open-api-jaxrs-3.3.4.jar,/Users/mraible/.m2/repository/org/yaml/snakeyaml/2.0/snakeyaml-2.0.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/health/helidon-microprofile-health/4.0.2/helidon-microprofile-health-4.0.2.jar,/Users/mraible/.m2/repository/org/eclipse/microprofile/health/microprofile-health-api/4.0.1/microprofile-health-api-4.0.1.jar,/Users/mraible/.m2/repository/io/helidon/webserver/observe/helidon-webserver-observe-health/4.0.2/helidon-webserver-observe-health-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/health/helidon-health/4.0.2/helidon-health-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/jwt/helidon-microprofile-jwt-auth/4.0.2/helidon-microprofile-jwt-auth-4.0.2.jar,/Users/mraible/.m2/repository/org/eclipse/microprofile/jwt/microprofile-jwt-auth-api/2.1/microprofile-jwt-auth-api-2.1.jar,/Users/mraible/.m2/repository/io/helidon/security/helidon-security-jwt/4.0.2/helidon-security-jwt-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/helidon-security-util/4.0.2/helidon-security-util-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-configurable/4.0.2/helidon-common-configurable-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/helidon-security/4.0.2/helidon-security-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-security/4.0.2/helidon-common-security-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-uri/4.0.2/helidon-common-uri-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-parameters/4.0.2/helidon-common-parameters-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/tracing/helidon-tracing/4.0.2/helidon-tracing-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/helidon-microprofile-security/4.0.2/helidon-microprofile-security-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/bundles/helidon-bundles-security/4.0.2/helidon-bundles-security-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/helidon-security-annotations/4.0.2/helidon-security-annotations-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-header/4.0.2/helidon-security-providers-header-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-http-auth/4.0.2/helidon-security-providers-http-auth-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-http-sign/4.0.2/helidon-security-providers-http-sign-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-jwt/4.0.2/helidon-security-providers-jwt-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-abac/4.0.2/helidon-security-providers-abac-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-oidc/4.0.2/helidon-security-providers-oidc-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-oidc-common/4.0.2/helidon-security-providers-oidc-common-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webclient/helidon-webclient/4.0.2/helidon-webclient-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webclient/helidon-webclient-api/4.0.2/helidon-webclient-api-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webclient/helidon-webclient-http1/4.0.2/helidon-webclient-http1-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webclient/helidon-webclient-security/4.0.2/helidon-webclient-security-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webclient/helidon-webclient-tracing/4.0.2/helidon-webclient-tracing-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/abac/helidon-security-abac-time/4.0.2/helidon-security-abac-time-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/abac/helidon-security-abac-role/4.0.2/helidon-security-abac-role-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/abac/helidon-security-abac-scope/4.0.2/helidon-security-abac-scope-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/abac/helidon-security-abac-policy/4.0.2/helidon-security-abac-policy-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/helidon-webserver-security/4.0.2/helidon-webserver-security-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/integration/helidon-security-integration-common/4.0.2/helidon-security-integration-common-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/tracing/helidon-tracing-config/4.0.2/helidon-tracing-config-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/jersey/helidon-jersey-common/4.0.2/helidon-jersey-common-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/config/helidon-config/4.0.2/helidon-config-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/inject/helidon-inject-api/4.0.2/helidon-inject-api-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-types/4.0.2/helidon-common-types-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/security/providers/helidon-security-providers-common/4.0.2/helidon-security-providers-common-4.0.2.jar,/Users/mraible/.m2/repository/jakarta/json/bind/jakarta.json.bind-api/3.0.0/jakarta.json.bind-api-3.0.0.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/media/jersey-media-json-binding/3.1.4/jersey-media-json-binding-3.1.4.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/core/jersey-common/3.1.4/jersey-common-3.1.4.jar,/Users/mraible/.m2/repository/jakarta/ws/rs/jakarta.ws.rs-api/3.1.0/jakarta.ws.rs-api-3.1.0.jar,/Users/mraible/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar,/Users/mraible/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar,/Users/mraible/.m2/repository/org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3.jar,/Users/mraible/.m2/repository/jakarta/json/jakarta.json-api/2.1.1/jakarta.json-api-2.1.1.jar,/Users/mraible/.m2/repository/org/eclipse/parsson/parsson/1.1.5/parsson-1.1.5.jar,/Users/mraible/.m2/repository/org/eclipse/yasson/2.0.4/yasson-2.0.4.jar,/Users/mraible/.m2/repository/org/glassfish/jakarta.json/2.0.0/jakarta.json-2.0.0-module.jar,/Users/mraible/.m2/repository/io/helidon/logging/helidon-logging-jul/4.0.2/helidon-logging-jul-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-context/4.0.2/helidon-common-context-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/logging/helidon-logging-common/4.0.2/helidon-logging-common-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common/4.0.2/helidon-common-4.0.2.jar,/Users/mraible/.m2/repository/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar,/Users/mraible/.m2/repository/jakarta/activation/jakarta.activation-api/2.1.1/jakarta.activation-api-2.1.1.jar,/Users/mraible/.m2/repository/org/eclipse/microprofile/metrics/microprofile-metrics-api/5.0.1/microprofile-metrics-api-5.0.1.jar,/Users/mraible/.m2/repository/jakarta/interceptor/jakarta.interceptor-api/2.1.0/jakarta.interceptor-api-2.1.0.jar,/Users/mraible/.m2/repository/io/helidon/microprofile/metrics/helidon-microprofile-metrics/4.0.2/helidon-microprofile-metrics-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/webserver/observe/helidon-webserver-observe-metrics/4.0.2/helidon-webserver-observe-metrics-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/metrics/providers/helidon-metrics-providers-micrometer/4.0.2/helidon-metrics-providers-micrometer-4.0.2.jar,/Users/mraible/.m2/repository/io/micrometer/micrometer-core/1.11.3/micrometer-core-1.11.3.jar,/Users/mraible/.m2/repository/io/micrometer/micrometer-commons/1.11.3/micrometer-commons-1.11.3.jar,/Users/mraible/.m2/repository/io/micrometer/micrometer-observation/1.11.3/micrometer-observation-1.11.3.jar,/Users/mraible/.m2/repository/org/hdrhistogram/HdrHistogram/2.1.12/HdrHistogram-2.1.12.jar,/Users/mraible/.m2/repository/org/latencyutils/LatencyUtils/2.0.3/LatencyUtils-2.0.3.jar,/Users/mraible/.m2/repository/io/micrometer/micrometer-registry-prometheus/1.11.3/micrometer-registry-prometheus-1.11.3.jar,/Users/mraible/.m2/repository/io/prometheus/simpleclient_common/0.16.0/simpleclient_common-0.16.0.jar,/Users/mraible/.m2/repository/io/prometheus/simpleclient/0.16.0/simpleclient-0.16.0.jar,/Users/mraible/.m2/repository/io/prometheus/simpleclient_tracer_otel/0.16.0/simpleclient_tracer_otel-0.16.0.jar,/Users/mraible/.m2/repository/io/prometheus/simpleclient_tracer_otel_agent/0.16.0/simpleclient_tracer_otel_agent-0.16.0.jar,/Users/mraible/.m2/repository/io/prometheus/simpleclient_tracer_common/0.16.0/simpleclient_tracer_common-0.16.0.jar,/Users/mraible/.m2/repository/io/helidon/metrics/helidon-metrics-api/4.0.2/helidon-metrics-api-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/http/helidon-http/4.0.2/helidon-http-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/common/helidon-common-buffers/4.0.2/helidon-common-buffers-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/builder/helidon-builder-api/4.0.2/helidon-builder-api-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/metrics/helidon-metrics-system-meters/4.0.2/helidon-metrics-system-meters-4.0.2.jar,/Users/mraible/.m2/repository/io/helidon/jersey/helidon-jersey-client/4.0.2/helidon-jersey-client-4.0.2.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/core/jersey-client/3.1.4/jersey-client-3.1.4.jar,/Users/mraible/.m2/repository/org/glassfish/jersey/inject/jersey-hk2/3.1.4/jersey-hk2-3.1.4.jar,/Users/mraible/.m2/repository/org/glassfish/hk2/hk2-locator/3.0.5/hk2-locator-3.0.5.jar,/Users/mraible/.m2/repository/org/glassfish/hk2/external/aopalliance-repackaged/3.0.5/aopalliance-repackaged-3.0.5.jar,/Users/mraible/.m2/repository/org/glassfish/hk2/hk2-api/3.0.5/hk2-api-3.0.5.jar,/Users/mraible/.m2/repository/org/glassfish/hk2/hk2-utils/3.0.5/hk2-utils-3.0.5.jar,/Users/mraible/.m2/repository/org/javassist/javassist/3.29.2-GA/javassist-3.29.2-GA.jar,/Users/mraible/.m2/repository/io/helidon/config/helidon-config-yaml-mp/4.0.2/helidon-config-yaml-mp-4.0.2.jar
-project.flavor=mp
-project.last.build.success.time=1704408039482
-project.mainclass=io.helidon.Main
-project.resourcedirs=/Users/mraible/dev/auth0/auth0-java-rest-api-examples/helidon/src/main/resources\:\:
-project.source.excludes=
-project.source.includes=
-project.sourcedirs=/Users/mraible/dev/auth0/auth0-java-rest-api-examples/helidon/src/main/java,/Users/mraible/dev/auth0/auth0-java-rest-api-examples/helidon/target/generated-sources/annotations
-project.version=1.0-SNAPSHOT
+#Helidon Project Configuration
+#Thu Oct 12 14:27:24 MDT 2023
schema.version=1.1.0
+helidon.version=3.2.2
+project.flavor=mp
+project.archetype=quickstart
diff --git a/helidon/Dockerfile b/helidon/Dockerfile
index e3d0cff..4c2115c 100644
--- a/helidon/Dockerfile
+++ b/helidon/Dockerfile
@@ -16,8 +16,8 @@ WORKDIR /helidon
# Create a first layer to cache the "Maven World" in the local repository.
# Incremental docker builds will always resume after that, unless you update
# the pom
-ADD pom.xml .
-RUN mvn package -Dmaven.test.skip -Declipselink.weave.skip -Declipselink.weave.skip -DskipOpenApiGenerate
+ADD pom.xml pom.xml
+RUN mvn package -Dmaven.test.skip -Declipselink.weave.skip
# Do the Maven build!
# Incremental docker builds will resume here when you change sources
@@ -31,9 +31,9 @@ FROM container-registry.oracle.com/java/openjdk:21
WORKDIR /helidon
# Copy the binary built in the 1st stage
-COPY --from=build /helidon/target/helidon.jar ./
+COPY --from=build /helidon/target/helidon-se.jar ./
COPY --from=build /helidon/target/libs ./libs
-CMD ["java", "-jar", "helidon.jar"]
+CMD ["java", "-jar", "helidon-se.jar"]
EXPOSE 8080
diff --git a/helidon/Dockerfile.jlink b/helidon/Dockerfile.jlink
index 41e4003..baa608c 100644
--- a/helidon/Dockerfile.jlink
+++ b/helidon/Dockerfile.jlink
@@ -1,16 +1,6 @@
# 1st stage, build the app
-FROM container-registry.oracle.com/java/openjdk:21 as build
-
-WORKDIR /usr/share
-
-# Install maven
-RUN set -x && \
- curl -O https://archive.apache.org/dist/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz && \
- tar -xvf apache-maven-*-bin.tar.gz && \
- rm apache-maven-*-bin.tar.gz && \
- mv apache-maven-* maven && \
- ln -s /usr/share/maven/bin/mvn /bin/
+FROM maven:3.8.4-openjdk-17-slim as build
WORKDIR /helidon
@@ -30,6 +20,6 @@ RUN echo "done!"
FROM debian:stretch-slim
WORKDIR /helidon
-COPY --from=build /helidon/target/helidon-jri ./
+COPY --from=build /helidon/target/helidon-se-jri ./
ENTRYPOINT ["/bin/bash", "/helidon/bin/start"]
EXPOSE 8080
diff --git a/helidon/Dockerfile.native b/helidon/Dockerfile.native
index 63e9e07..0747609 100644
--- a/helidon/Dockerfile.native
+++ b/helidon/Dockerfile.native
@@ -32,8 +32,8 @@ FROM scratch
WORKDIR /helidon
# Copy the binary built in the 1st stage
-COPY --from=build /helidon/target/helidon .
+COPY --from=build /helidon/target/helidon-se .
-ENTRYPOINT ["./helidon"]
+ENTRYPOINT ["./helidon-se"]
EXPOSE 8080
diff --git a/helidon/README.md b/helidon/README.md
index 900d3f8..48bc1b9 100644
--- a/helidon/README.md
+++ b/helidon/README.md
@@ -1,6 +1,6 @@
# helidon
-Sample Helidon MP project that includes multiple REST operations.
+Minimal Helidon SE project suitable to start from scratch.
## Build and run
@@ -12,15 +12,11 @@ java -jar target/helidon.jar
```
## Exercise the application
-
-Basic:
```
curl -X GET http://localhost:8080/simple-greet
-Hello World!
+{"message":"Hello World!"}
```
-
-JSON:
```
curl -X GET http://localhost:8080/greet
{"message":"Hello World!"}
@@ -61,65 +57,44 @@ curl -s -X GET http://localhost:8080/health
```
-## Building a Native Image
-The generation of native binaries requires an installation of GraalVM 22.1.0+.
+## Building a Native Image
-You can build a native binary using Maven as follows:
+Make sure you have GraalVM locally installed:
```
-mvn -Pnative-image install -DskipTests
+$GRAALVM_HOME/bin/native-image --version
```
-The generation of the executable binary may take a few minutes to complete depending on
-your hardware and operating system. When completed, the executable file will be available
-under the `target` directory and be named after the artifact ID you have chosen during the
-project generation phase.
-
-
-
-## Building the Docker Image
+Build the native image using the native image profile:
```
-docker build -t helidon .
+mvn package -Pnative-image
```
-## Running the Docker Image
+This uses the helidon-maven-plugin to perform the native compilation using your installed copy of GraalVM. It might take a while to complete.
+Once it completes start the application using the native executable (no JVM!):
```
-docker run --rm -p 8080:8080 helidon:latest
+./target/helidon
```
-Exercise the application as described above.
-
-
-## Run the application in Kubernetes
+Yep, it starts fast. You can exercise the application’s endpoints as before.
-If you don’t have access to a Kubernetes cluster, you can [install one](https://helidon.io/docs/latest/#/about/kubernetes) on your desktop.
-### Verify connectivity to cluster
+## Building the Docker Image
```
-kubectl cluster-info # Verify which cluster
-kubectl get pods # Verify connectivity to cluster
+docker build -t helidon .
```
-### Deploy the application to Kubernetes
+## Running the Docker Image
```
-kubectl create -f app.yaml # Deploy application
-kubectl get pods # Wait for quickstart pod to be RUNNING
-kubectl get service helidon # Get service info
+docker run --rm -p 8080:8080 helidon:latest
```
-Note the PORTs. You can now exercise the application as you did before but use the second
-port number (the NodePort) instead of 8080.
-
-After you’re done, cleanup.
-
-```
-kubectl delete -f app.yaml
-```
+Exercise the application as described above.
## Building a Custom Runtime Image
diff --git a/helidon/app.yaml b/helidon/app.yaml
deleted file mode 100644
index 45e0cfc..0000000
--- a/helidon/app.yaml
+++ /dev/null
@@ -1,36 +0,0 @@
-kind: Service
-apiVersion: v1
-metadata:
- name: helidon
- labels:
- app: helidon
-spec:
- type: NodePort
- selector:
- app: helidon
- ports:
- - port: 8080
- targetPort: 8080
- name: http
----
-kind: Deployment
-apiVersion: apps/v1
-metadata:
- name: helidon
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: helidon
- template:
- metadata:
- labels:
- app: helidon
- version: v1
- spec:
- containers:
- - name: helidon
- image: helidon
- imagePullPolicy: IfNotPresent
- ports:
- - containerPort: 8080
diff --git a/helidon/pom.xml b/helidon/pom.xml
index d26090d..61824a8 100644
--- a/helidon/pom.xml
+++ b/helidon/pom.xml
@@ -5,99 +5,38 @@
4.0.0
io.helidon.applications
- helidon-mp
+ helidon-se
4.0.2
com.okta.rest
- helidon
+ helidon-se
1.0-SNAPSHOT
+
+ com.okta.rest.HelloApplication
+
+
- io.helidon.microprofile.bundles
- helidon-microprofile-core
-
-
- io.helidon.microprofile.openapi
- helidon-microprofile-openapi
-
-
- io.helidon.microprofile.health
- helidon-microprofile-health
-
-
- io.helidon.microprofile.jwt
- helidon-microprofile-jwt-auth
-
-
- jakarta.json.bind
- jakarta.json.bind-api
-
-
- org.glassfish.jersey.media
- jersey-media-json-binding
- runtime
-
-
- io.helidon.logging
- helidon-logging-jul
- runtime
-
-
- io.smallrye
- jandex
- runtime
+ io.helidon.webserver
+ helidon-webserver
- jakarta.activation
- jakarta.activation-api
+ io.helidon.webserver
+ helidon-webserver-security
- org.eclipse.microprofile.metrics
- microprofile-metrics-api
+ io.helidon.webserver
+ helidon-webserver-context
- io.helidon.microprofile.metrics
- helidon-microprofile-metrics
+ io.helidon.security.providers
+ helidon-security-providers-jwt
- org.junit.jupiter
- junit-jupiter-api
- test
-
-
- io.helidon.microprofile.testing
- helidon-microprofile-testing-junit5
- test
-
-
- org.hamcrest
- hamcrest-all
- test
+ io.helidon.http.media
+ helidon-http-media-jsonp
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-libs
-
-
-
-
- io.smallrye
- jandex-maven-plugin
-
-
- make-index
-
-
-
-
-
diff --git a/helidon/src/main/java/com/okta/rest/HelloApplication.java b/helidon/src/main/java/com/okta/rest/HelloApplication.java
index 7247250..14b77bf 100644
--- a/helidon/src/main/java/com/okta/rest/HelloApplication.java
+++ b/helidon/src/main/java/com/okta/rest/HelloApplication.java
@@ -1,19 +1,55 @@
package com.okta.rest;
+import java.net.URI;
+
import com.okta.rest.controller.HelloResource;
-import org.eclipse.microprofile.auth.LoginConfig;
-import jakarta.enterprise.context.ApplicationScoped;
-import jakarta.ws.rs.core.Application;
+import io.helidon.common.configurable.Resource;
+import io.helidon.config.Config;
+import io.helidon.security.Security;
+import io.helidon.security.providers.jwt.JwtProvider;
+import io.helidon.webserver.WebServer;
+import io.helidon.webserver.context.ContextFeature;
+import io.helidon.webserver.http.HttpRouting;
+import io.helidon.webserver.security.SecurityFeature;
+
+public class HelloApplication {
+
+ public static void main(String[] args) {
-import java.util.Set;
+ var config = Config.global();
+ var oauth =
+ JwtProvider.builder()
+ .issuer(config.get("se.jwt.verify.issuer").asString().get())
+ .verifyJwk(
+ Resource.create(
+ config
+ .get("se.jwt.verify.publickey.location")
+ .asString()
+ .map(URI::create)
+ .orElseThrow()))
+ .build();
-@LoginConfig(authMethod = "MP-JWT")
-@ApplicationScoped
-public class HelloApplication extends Application {
+ Security security = Security.builder().addProvider(oauth).build();
+ var securityFeature =
+ SecurityFeature.create(
+ sfb ->
+ sfb.security(security)
+ .addPath(p -> p.path("/hello").handler(h -> h.authenticate(true))));
+
+ WebServer.builder()
+ .config(config.get("server"))
+ .routing(HelloApplication::routing)
+ .addFeature(ContextFeature.create())
+ .addFeature(securityFeature)
+ .build()
+ .start();
+ }
- @Override
- public Set> getClasses() {
- return Set.of(HelloResource.class);
+ /**
+ * Updates HTTP Routing.
+ */
+ static void routing(HttpRouting.Builder routing) {
+ routing.addFeature(new HelloResource());
}
}
diff --git a/helidon/src/main/java/com/okta/rest/controller/HelloResource.java b/helidon/src/main/java/com/okta/rest/controller/HelloResource.java
index abfe348..a5078d9 100644
--- a/helidon/src/main/java/com/okta/rest/controller/HelloResource.java
+++ b/helidon/src/main/java/com/okta/rest/controller/HelloResource.java
@@ -1,18 +1,25 @@
package com.okta.rest.controller;
+import static io.helidon.http.Status.OK_200;
+
+import io.helidon.common.media.type.MediaTypes;
import io.helidon.security.SecurityContext;
-import io.helidon.security.annotations.Authenticated;
+import io.helidon.webserver.http.HttpFeature;
+import io.helidon.webserver.http.HttpRouting;
+import io.helidon.webserver.http.ServerRequest;
+import io.helidon.webserver.http.ServerResponse;
-import jakarta.ws.rs.GET;
-import jakarta.ws.rs.Path;
-import jakarta.ws.rs.core.Context;
+public class HelloResource implements HttpFeature {
-@Path("/hello")
-public class HelloResource {
+ @Override
+ public void setup(HttpRouting.Builder routing) {
+ routing.get("/hello", this::hello);
+ }
- @Authenticated
- @GET
- public String hello(@Context SecurityContext context) {
- return "Hello, " + context.userName() + "!";
+ public void hello(ServerRequest req, ServerResponse res) {
+ SecurityContext context = req.context().get(SecurityContext.class).orElseThrow();
+ res.status(OK_200);
+ res.headers().contentType(MediaTypes.TEXT_PLAIN);
+ res.send("Hello, " + context.userName() + "!");
}
}
diff --git a/helidon/src/main/resources/META-INF/beans.xml b/helidon/src/main/resources/META-INF/beans.xml
deleted file mode 100644
index 7605752..0000000
--- a/helidon/src/main/resources/META-INF/beans.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
diff --git a/helidon/src/main/resources/META-INF/microprofile-config.properties b/helidon/src/main/resources/META-INF/microprofile-config.properties
deleted file mode 100644
index dc1abb6..0000000
--- a/helidon/src/main/resources/META-INF/microprofile-config.properties
+++ /dev/null
@@ -1,9 +0,0 @@
-# Microprofile server properties
-server.port=8080
-server.host=0.0.0.0
-
-# Change the following to true to enable the optional MicroProfile Metrics REST.request metrics
-metrics.rest-request.enabled=false
-
-mp.jwt.verify.issuer=https://dev-06bzs1cu.us.auth0.com/
-mp.jwt.verify.publickey.location=${mp.jwt.verify.issuer}.well-known/jwks.json
diff --git a/helidon/src/main/resources/META-INF/native-image/com.okta.rest/helidon/native-image.properties b/helidon/src/main/resources/META-INF/native-image/com.okta.rest/helidon/native-image.properties
new file mode 100644
index 0000000..e677c0a
--- /dev/null
+++ b/helidon/src/main/resources/META-INF/native-image/com.okta.rest/helidon/native-image.properties
@@ -0,0 +1,3 @@
+Args=--initialize-at-build-time=com.okta.rest \
+ --enable-url-protocols=https \
+ --report-unsupported-elements-at-runtime
diff --git a/helidon/src/main/resources/META-INF/native-image/com/okta/rest/helidon/native-image.properties b/helidon/src/main/resources/META-INF/native-image/com/okta/rest/helidon/native-image.properties
deleted file mode 100644
index e60e680..0000000
--- a/helidon/src/main/resources/META-INF/native-image/com/okta/rest/helidon/native-image.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-Args=--initialize-at-build-time=com.okta.rest \
- --initialize-at-run-time=io.helidon.openapi.ExpandedTypeDescription \
- --report-unsupported-elements-at-runtime \
- -H:+AddAllCharsets
diff --git a/helidon/src/main/resources/application.properties b/helidon/src/main/resources/application.properties
new file mode 100644
index 0000000..fd5a53f
--- /dev/null
+++ b/helidon/src/main/resources/application.properties
@@ -0,0 +1,6 @@
+# Microprofile server properties
+server.port=8080
+server.host=0.0.0.0
+
+se.jwt.verify.issuer=https://dev-06bzs1cu.us.auth0.com/
+se.jwt.verify.publickey.location=${se.jwt.verify.issuer}.well-known/jwks.json
diff --git a/helidon/src/main/resources/logging.properties b/helidon/src/main/resources/logging.properties
index 65835a3..5157244 100644
--- a/helidon/src/main/resources/logging.properties
+++ b/helidon/src/main/resources/logging.properties
@@ -3,7 +3,7 @@
# For more information see $JAVA_HOME/jre/lib/logging.properties
# Send messages to the console
-handlers=io.helidon.logging.jul.HelidonConsoleHandler
+handlers=io.helidon.common.HelidonConsoleHandler
# HelidonConsoleHandler uses a SimpleFormatter subclass that replaces "!thread!" with the current thread
java.util.logging.SimpleFormatter.format=%1$tY.%1$tm.%1$td %1$tH:%1$tM:%1$tS %4$s %3$s !thread!: %5$s%6$s%n
@@ -15,6 +15,7 @@ java.util.logging.SimpleFormatter.format=%1$tY.%1$tm.%1$td %1$tH:%1$tM:%1$tS %4$
org.jboss.level=WARNING
# Component specific log levels
+#io.helidon.webserver.level=INFO
#io.helidon.config.level=INFO
#io.helidon.security.level=INFO
#io.helidon.common.level=INFO
diff --git a/helidon/src/test/resources/application-test.yaml b/helidon/src/test/resources/application.yaml
similarity index 100%
rename from helidon/src/test/resources/application-test.yaml
rename to helidon/src/test/resources/application.yaml