Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5.x: Helidon Services #8400

Draft
wants to merge 81 commits into
base: main
Choose a base branch
from
Draft

Conversation

tomas-langer
Copy link
Member

@tomas-langer tomas-langer commented Feb 20, 2024

Resolves #7957
Resolves #6647
Resolves #5697
Resolves #8222
Resolves #7083
Resolves #7052
Resolves #6768
Resolves #6646
Resolves #6620

Description

Helidon services provides a replacement for service loader with some additional features - module helidon-service-registry
In addition we have a module with full injection, config driven, and interception support - helidon-service-inject-api and helidon-service-inject (API and implementation)

Best place to check the features and generated code is in the service/tests and service/tests/inject modules.

The PR contains also initial code for Helidon declarative, though that is not yet fully done.

This PR is ready for review of the concepts, generated code, module structure (service module and its children).

Removed the requirement to modify module-info.java by the user, as we use our own way of discovering and loading services.

Request scope is now an optional feature even when using HTTP. This is achieved by compile time extension to support parameters through source code + additional set of services that support the same using request scope

Known Todos

  • create a declarative startup class (so we can use io.helidon.Main)
  • services in HTTP, webserver, security, and config module are experimental, and cause some issues, will revisit
  • add support for native image to make our service loader work without any user configuration
  • renaming within service-codegen, as it still uses the old inject based naming

New stuff unrelated to services

  • service module uses dependency checking maven plugin
  • service module is configured to fail on javadoc warning

@tomas-langer tomas-langer self-assigned this Feb 20, 2024
@oracle-contributor-agreement oracle-contributor-agreement bot added the OCA Verified All contributors have signed the Oracle Contributor Agreement. label Feb 20, 2024
@tomas-langer
Copy link
Member Author

Rebased
Added support for interception based on annotated interface methods

tomas-langer and others added 22 commits March 12, 2024 14:28
Switch to Builder codegen
Use Builder API for all Blueprints
Use new builder codegen in all of Helidon
Fixes needed after upgrading checkstyle.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
* Introduction of Helidon Inject Service module.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Co-authored-by: Jeff Trent <jeff.trent@oracle.com>
…elidon-io#8149)

* Introduction of codegen modules to all injection related areas.
* Inercepted type and constructor should be package private

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
* Introduction of helidon-inject, helidon-inject-configdriven, and helidon-inject-configdriven-services
* Aligned method names on `Services` with other containers, such as `Parameters` and `Headers`

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
* Refactored inject maven-plugin
* Fixed most of build issues.
* Flag to control whether to generate META-INF/services
* Added support for InjectionServices that are not singleton
* Handle generation of module component after last type is generated, rather than in processingOver, to avoid a warning
* Introduced ServiceProviderRegistry.java
* Validating helidon prefixed options
* Config bean registry is no longer a singleton, to support parallel build

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
* Using new modules in all of Helidon
* Removed modules no longer in use.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
…idon-inject (and use only user's dependencies).

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
2
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
External jar maven plugin
Tests for registry and injection
All tests passing

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
…ect equals and hash code.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Support for service discovery of Java ServiceLoader services.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
- DrivenBy is now CreateFor
- DrivenByName is now CreateForName
- A few text fixes

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Added suppress warnings for unchecked casts to instantiate and inject methods when needed

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Shutdown handler logic moved to a single place - io.helidon.Main
Refactored all usages

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Fixed all discovered issues with fallbacks and injection.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
…ice discovery.

Signed-off-by: Tomas Langer <tomas.langer@oracle.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
OCA Verified All contributors have signed the Oracle Contributor Agreement.
Projects
None yet
2 participants