From e1f64b5523d3e53393fe8905b775c57cba84b63c Mon Sep 17 00:00:00 2001 From: Santiago Pericas-Geertsen Date: Fri, 16 Aug 2024 11:31:57 -0400 Subject: [PATCH] Updates documentation with a new section. Signed-off-by: Santiago Pericas-Geertsen --- docs/src/main/asciidoc/mp/grpc/client.adoc | 26 ++++++++++++++++--- .../io/helidon/docs/mp/grpc/GrpcSnippets.java | 9 +++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/docs/src/main/asciidoc/mp/grpc/client.adoc b/docs/src/main/asciidoc/mp/grpc/client.adoc index 2ce1e87b7e2..f8250b7b9df 100644 --- a/docs/src/main/asciidoc/mp/grpc/client.adoc +++ b/docs/src/main/asciidoc/mp/grpc/client.adoc @@ -35,6 +35,7 @@ include::{rootdir}/includes/mp.adoc[] - <> ** <> ** <> +** <> - <> == Overview @@ -133,7 +134,7 @@ include::{sourcedir}/mp/grpc/GrpcSnippets.java[tag=snippet_5, indent=0] service when it differs from the interface name, as it is the case in this example. <2> The `@Grpc.GrpcChannel` annotation is the qualifier that supplies the channel name. This is the same name as used in the channel configuration in the examples provided in -the <>. +the <>. There is no need to write any code to implement the client. The Helidon MP gRPC API will create a dynamic proxy for the interface using the information from the annotations and @@ -162,14 +163,33 @@ include::{sourcedir}/mp/grpc/GrpcSnippets.java[tag=snippet_7, indent=0] <1> The `@Inject` annotation tells CDI to inject the client implementation. <2> The `@Grpc.GrpcProxy` annotation is used by the CDI container to match the injection point to -the gRPC MP APIs provider. +the gRPC MP API provider. When the CDI container instantiates `MyAppBean`, it will inject a dynamic proxy into the `stringServiceClient` field, and then provide the necessary logic for the proxy methods to convert a method call into a gRPC call. In the example above, there is no need to use a channel directly. The correct channel is added to -the dynamic client proxy internally by the Helidon MP gRPC APIs. +the dynamic client proxy internally by the Helidon MP gRPC API. + +=== Injecting Channels + +Channels can also be in directly injected into application bean instances. +The Helidon gRPC client API has CDI producers to inject `io.grpc.Channel` instances. + +For example, a class might have an injectable `io.grpc.Channel` field as follows: + +[source,java] +---- +include::{sourcedir}/mp/grpc/GrpcSnippets.java[tag=snippet_8, indent=4] +---- + +<1> The `@Inject` annotation tells CDI to inject the channel. +<2> The `@Grpc.GrpcChannel` annotation supplies the channel name. +This is the same name as used in the channel configuration in the examples provided in +the <>. + +An injected channel can be used, for example, when directly instantiating `protoc` generated stubs. == Examples diff --git a/docs/src/main/java/io/helidon/docs/mp/grpc/GrpcSnippets.java b/docs/src/main/java/io/helidon/docs/mp/grpc/GrpcSnippets.java index 54f15767343..6e83cb4fa25 100644 --- a/docs/src/main/java/io/helidon/docs/mp/grpc/GrpcSnippets.java +++ b/docs/src/main/java/io/helidon/docs/mp/grpc/GrpcSnippets.java @@ -136,4 +136,13 @@ public class MyAppBean { } // end::snippet_7[] } + + class Snippet8 { + + // tag::snippet_8[] + @Inject // <1> + @Grpc.GrpcChannel("string-channel") // <2> + private Channel channel; + // end::snippet_8[] + } }