From 0793c5eb2284a0c98772c3f5fa1670f1a232f44a Mon Sep 17 00:00:00 2001 From: Giselle van Dongen Date: Mon, 3 Jun 2024 06:41:47 +0200 Subject: [PATCH] Update Java code snippets to SDK v1.0 (#385) * Update Java code snippets * Update Java concept code snippets * Fix serving docs virtual threads * Update kotlin docs to new version --- code_snippets/java/build.gradle.kts | 3 ++- .../buildingblocks/part0/OrderWorkflow.java | 7 +++--- .../part1_functions/OrderWorkflow.java | 7 +++--- .../part2_rpc/OrderWorkflow.java | 7 +++--- .../part3_promises/OrderWorkflow.java | 7 +++--- .../part4_state/OrderWorkflow.java | 7 +++--- .../part5_sideeffects/OrderWorkflow.java | 7 +++--- .../buildingblocks/types/OrderRequest.java | 11 ++++---- .../buildingblocks/types/Product.java | 6 ++--- .../invocations/GreetCounterObject.java | 4 +-- .../main/java/concepts/services/Greeter.java | 4 +-- .../concepts/services/RoleUpdateService.java | 9 ++++--- .../services/{ => types}/SystemA.java | 2 +- .../services/{ => types}/SystemB.java | 2 +- .../services/{ => types}/UpdateRequest.java | 2 +- .../src/main/java/develop/Awakeables.java | 6 ++--- .../java/src/main/java/develop/Greeter.java | 2 +- .../java/src/main/java/develop/MyService.java | 4 --- .../java/develop/SerializationExample.java | 25 ++++++++++--------- .../java/develop/ServingVirtualThreads.java | 8 +++--- .../src/main/java/develop/SideEffects.java | 14 +++++------ .../java/src/main/java/develop/State.java | 10 ++++---- .../java/src/main/java/get_started/Tour.java | 4 +-- .../invocations/GreetCounterObject.java | 4 +-- code_snippets/kotlin/build.gradle.kts | 3 ++- .../kotlin/develop/ServingVirtualThreads.kt | 10 +++----- docs/develop/java/serving.mdx | 3 +-- 27 files changed, 90 insertions(+), 88 deletions(-) rename code_snippets/java/src/main/java/concepts/services/{ => types}/SystemA.java (78%) rename code_snippets/java/src/main/java/concepts/services/{ => types}/SystemB.java (79%) rename code_snippets/java/src/main/java/concepts/services/{ => types}/UpdateRequest.java (93%) diff --git a/code_snippets/java/build.gradle.kts b/code_snippets/java/build.gradle.kts index 171da643..76e06921 100644 --- a/code_snippets/java/build.gradle.kts +++ b/code_snippets/java/build.gradle.kts @@ -7,9 +7,10 @@ plugins { repositories { mavenCentral() + mavenLocal() } -val restateVersion = "0.9.0" +val restateVersion = "0.10.0-SNAPSHOT" dependencies { // Restate SDK diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/part0/OrderWorkflow.java b/code_snippets/java/src/main/java/concepts/buildingblocks/part0/OrderWorkflow.java index eb001ec7..7e1fc979 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/part0/OrderWorkflow.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/part0/OrderWorkflow.java @@ -5,10 +5,11 @@ import concepts.buildingblocks.types.StatusEnum; import concepts.buildingblocks.utils.PaymentClient; import concepts.buildingblocks.utils.RestaurantClient; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -27,7 +28,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 2. Handle payment String token = ctx.random().nextUUID().toString(); - boolean paid = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean paid = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.charge(id, token, order.getTotalCost())); if (!paid) { @@ -40,7 +41,7 @@ public void process(ObjectContext ctx, OrderRequest order) { ctx.sleep(Duration.ofMillis(order.getDeliveryDelay())); // 4. Trigger preparation - var awakeable = ctx.awakeable(CoreSerdes.VOID); + var awakeable = ctx.awakeable(Serde.VOID); ctx.run(() -> RestaurantClient.prepare(id, awakeable.id())); ctx.set(STATUS, StatusEnum.IN_PREPARATION); diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/part1_functions/OrderWorkflow.java b/code_snippets/java/src/main/java/concepts/buildingblocks/part1_functions/OrderWorkflow.java index a5006bff..f7a28845 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/part1_functions/OrderWorkflow.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/part1_functions/OrderWorkflow.java @@ -5,10 +5,11 @@ import concepts.buildingblocks.types.StatusEnum; import concepts.buildingblocks.utils.PaymentClient; import concepts.buildingblocks.utils.RestaurantClient; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -28,7 +29,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 2. Handle payment String token = ctx.random().nextUUID().toString(); - boolean paid = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean paid = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.charge(id, token, order.getTotalCost())); if (!paid) { @@ -41,7 +42,7 @@ public void process(ObjectContext ctx, OrderRequest order) { ctx.sleep(Duration.ofMillis(order.getDeliveryDelay())); // 4. Trigger preparation - var awakeable = ctx.awakeable(CoreSerdes.VOID); + var awakeable = ctx.awakeable(Serde.VOID); ctx.run(() -> RestaurantClient.prepare(id, awakeable.id())); ctx.set(STATUS, StatusEnum.IN_PREPARATION); diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/part2_rpc/OrderWorkflow.java b/code_snippets/java/src/main/java/concepts/buildingblocks/part2_rpc/OrderWorkflow.java index 09b4c254..8ac10dde 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/part2_rpc/OrderWorkflow.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/part2_rpc/OrderWorkflow.java @@ -5,10 +5,11 @@ import concepts.buildingblocks.types.StatusEnum; import concepts.buildingblocks.utils.PaymentClient; import concepts.buildingblocks.utils.RestaurantClient; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -27,7 +28,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 2. Handle payment String token = ctx.random().nextUUID().toString(); - boolean paid = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean paid = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.charge(id, token, order.getTotalCost())); if (!paid) { @@ -40,7 +41,7 @@ public void process(ObjectContext ctx, OrderRequest order) { ctx.sleep(Duration.ofMillis(order.getDeliveryDelay())); // 4. Trigger preparation - var awakeable = ctx.awakeable(CoreSerdes.VOID); + var awakeable = ctx.awakeable(Serde.VOID); ctx.run(() -> RestaurantClient.prepare(id, awakeable.id())); ctx.set(STATUS, StatusEnum.IN_PREPARATION); diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/part3_promises/OrderWorkflow.java b/code_snippets/java/src/main/java/concepts/buildingblocks/part3_promises/OrderWorkflow.java index 4a67086c..45a2ebda 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/part3_promises/OrderWorkflow.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/part3_promises/OrderWorkflow.java @@ -5,10 +5,11 @@ import concepts.buildingblocks.types.StatusEnum; import concepts.buildingblocks.utils.PaymentClient; import concepts.buildingblocks.utils.RestaurantClient; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -27,7 +28,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 2. Handle payment String token = ctx.random().nextUUID().toString(); - boolean paid = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean paid = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.charge(id, token, order.getTotalCost())); if (!paid) { @@ -41,7 +42,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 4. Trigger preparation // focus - var awakeable = ctx.awakeable(CoreSerdes.VOID); + var awakeable = ctx.awakeable(Serde.VOID); ctx.run(() -> // focus RestaurantClient.prepare(id, awakeable.id())); diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/part4_state/OrderWorkflow.java b/code_snippets/java/src/main/java/concepts/buildingblocks/part4_state/OrderWorkflow.java index f224d1e2..5d3a0c9d 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/part4_state/OrderWorkflow.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/part4_state/OrderWorkflow.java @@ -5,10 +5,11 @@ import concepts.buildingblocks.types.StatusEnum; import concepts.buildingblocks.utils.PaymentClient; import concepts.buildingblocks.utils.RestaurantClient; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -30,7 +31,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 2. Handle payment String token = ctx.random().nextUUID().toString(); - boolean paid = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean paid = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.charge(id, token, order.getTotalCost())); if (!paid) { @@ -45,7 +46,7 @@ public void process(ObjectContext ctx, OrderRequest order) { ctx.sleep(Duration.ofMillis(order.getDeliveryDelay())); // 4. Trigger preparation - var awakeable = ctx.awakeable(CoreSerdes.VOID); + var awakeable = ctx.awakeable(Serde.VOID); ctx.run(() -> RestaurantClient.prepare(id, awakeable.id())); // focus diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/part5_sideeffects/OrderWorkflow.java b/code_snippets/java/src/main/java/concepts/buildingblocks/part5_sideeffects/OrderWorkflow.java index 7f8a9164..0d356c22 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/part5_sideeffects/OrderWorkflow.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/part5_sideeffects/OrderWorkflow.java @@ -5,10 +5,11 @@ import concepts.buildingblocks.types.StatusEnum; import concepts.buildingblocks.utils.PaymentClient; import concepts.buildingblocks.utils.RestaurantClient; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -28,7 +29,7 @@ public void process(ObjectContext ctx, OrderRequest order) { // 2. Handle payment String token = ctx.random().nextUUID().toString(); // focus(1:2) - boolean paid = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean paid = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.charge(id, token, order.getTotalCost())); if (!paid) { @@ -41,7 +42,7 @@ public void process(ObjectContext ctx, OrderRequest order) { ctx.sleep(Duration.ofMillis(order.getDeliveryDelay())); // 4. Trigger preparation - var awakeable = ctx.awakeable(CoreSerdes.VOID); + var awakeable = ctx.awakeable(Serde.VOID); // focus(1:2) ctx.run(() -> RestaurantClient.prepare(id, awakeable.id())); diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/types/OrderRequest.java b/code_snippets/java/src/main/java/concepts/buildingblocks/types/OrderRequest.java index b34a6bce..357506ec 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/types/OrderRequest.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/types/OrderRequest.java @@ -13,13 +13,12 @@ public class OrderRequest { private final double totalCost; private final int deliveryDelay; - @JsonCreator public OrderRequest( - @JsonProperty("orderId") String orderId, - @JsonProperty("restaurantId") String restaurantId, - @JsonProperty("products") Product[] products, - @JsonProperty("totalCost") double totalCost, - @JsonProperty("deliveryDelay") int deliveryDelay) { + String orderId, + String restaurantId, + Product[] products, + double totalCost, + int deliveryDelay) { this.orderId = orderId; this.restaurantId = restaurantId; this.products = products; diff --git a/code_snippets/java/src/main/java/concepts/buildingblocks/types/Product.java b/code_snippets/java/src/main/java/concepts/buildingblocks/types/Product.java index ca0ec0f6..f6ab395e 100644 --- a/code_snippets/java/src/main/java/concepts/buildingblocks/types/Product.java +++ b/code_snippets/java/src/main/java/concepts/buildingblocks/types/Product.java @@ -9,9 +9,9 @@ class Product { private final int quantity; public Product( - @JsonProperty("productId") String productId, - @JsonProperty("description") String description, - @JsonProperty("quantity") int quantity) { + String productId, + String description, + int quantity) { this.productId = productId; this.description = description; this.quantity = quantity; diff --git a/code_snippets/java/src/main/java/concepts/invocations/GreetCounterObject.java b/code_snippets/java/src/main/java/concepts/invocations/GreetCounterObject.java index d8bb8736..e6c91997 100644 --- a/code_snippets/java/src/main/java/concepts/invocations/GreetCounterObject.java +++ b/code_snippets/java/src/main/java/concepts/invocations/GreetCounterObject.java @@ -1,16 +1,16 @@ package concepts.invocations; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; import dev.restate.sdk.common.StateKey; @VirtualObject public class GreetCounterObject { public final static StateKey COUNT = - StateKey.of("count", CoreSerdes.JSON_INT); + StateKey.of("count", JsonSerdes.INT); @Handler public int greet(ObjectContext ctx, String greeting){ diff --git a/code_snippets/java/src/main/java/concepts/services/Greeter.java b/code_snippets/java/src/main/java/concepts/services/Greeter.java index bdedb65a..fac3b38e 100644 --- a/code_snippets/java/src/main/java/concepts/services/Greeter.java +++ b/code_snippets/java/src/main/java/concepts/services/Greeter.java @@ -1,9 +1,9 @@ package concepts.services; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder; @@ -18,7 +18,7 @@ public class Greeter { public final static StateKey COUNT = - StateKey.of("count", CoreSerdes.JSON_INT); + StateKey.of("count", JsonSerdes.INT); @Handler public String greet(ObjectContext ctx, String greeting) { diff --git a/code_snippets/java/src/main/java/concepts/services/RoleUpdateService.java b/code_snippets/java/src/main/java/concepts/services/RoleUpdateService.java index 870338bc..53fe1861 100644 --- a/code_snippets/java/src/main/java/concepts/services/RoleUpdateService.java +++ b/code_snippets/java/src/main/java/concepts/services/RoleUpdateService.java @@ -1,9 +1,12 @@ package concepts.services; +import concepts.services.types.SystemA; +import concepts.services.types.SystemB; +import concepts.services.types.UpdateRequest; import dev.restate.sdk.Context; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.Service; -import dev.restate.sdk.common.CoreSerdes; import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder; /** @@ -18,14 +21,14 @@ public class RoleUpdateService { @Handler public void applyRoleUpdate(Context ctx, UpdateRequest req) { - boolean success = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean success = ctx.run(JsonSerdes.BOOLEAN, () -> SystemA.applyUserRole(req.getUserId(), req.getRole())); if (!success) { return; } for(String permission: req.getPermissions()) { - ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + ctx.run(JsonSerdes.BOOLEAN, () -> SystemB.applyPermission(req.getUserId(), permission)); } } diff --git a/code_snippets/java/src/main/java/concepts/services/SystemA.java b/code_snippets/java/src/main/java/concepts/services/types/SystemA.java similarity index 78% rename from code_snippets/java/src/main/java/concepts/services/SystemA.java rename to code_snippets/java/src/main/java/concepts/services/types/SystemA.java index 5b2c3c63..5abdc748 100644 --- a/code_snippets/java/src/main/java/concepts/services/SystemA.java +++ b/code_snippets/java/src/main/java/concepts/services/types/SystemA.java @@ -1,4 +1,4 @@ -package concepts.services; +package concepts.services.types; public class SystemA { public static boolean applyUserRole(String userId, String role) { diff --git a/code_snippets/java/src/main/java/concepts/services/SystemB.java b/code_snippets/java/src/main/java/concepts/services/types/SystemB.java similarity index 79% rename from code_snippets/java/src/main/java/concepts/services/SystemB.java rename to code_snippets/java/src/main/java/concepts/services/types/SystemB.java index ca1a8536..c15a23e0 100644 --- a/code_snippets/java/src/main/java/concepts/services/SystemB.java +++ b/code_snippets/java/src/main/java/concepts/services/types/SystemB.java @@ -1,4 +1,4 @@ -package concepts.services; +package concepts.services.types; public class SystemB { public static boolean applyPermission(String userId, String permission) { diff --git a/code_snippets/java/src/main/java/concepts/services/UpdateRequest.java b/code_snippets/java/src/main/java/concepts/services/types/UpdateRequest.java similarity index 93% rename from code_snippets/java/src/main/java/concepts/services/UpdateRequest.java rename to code_snippets/java/src/main/java/concepts/services/types/UpdateRequest.java index 62237813..142f9178 100644 --- a/code_snippets/java/src/main/java/concepts/services/UpdateRequest.java +++ b/code_snippets/java/src/main/java/concepts/services/types/UpdateRequest.java @@ -1,4 +1,4 @@ -package concepts.services; +package concepts.services.types; public class UpdateRequest { private String userId; diff --git a/code_snippets/java/src/main/java/develop/Awakeables.java b/code_snippets/java/src/main/java/develop/Awakeables.java index 1cf8e7f7..d7074381 100644 --- a/code_snippets/java/src/main/java/develop/Awakeables.java +++ b/code_snippets/java/src/main/java/develop/Awakeables.java @@ -1,14 +1,14 @@ package develop; import dev.restate.sdk.Awakeable; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; -import dev.restate.sdk.common.CoreSerdes; public class Awakeables { public void awakeables(ObjectContext ctx) { // - Awakeable awakeable = ctx.awakeable(CoreSerdes.JSON_STRING); + Awakeable awakeable = ctx.awakeable(JsonSerdes.STRING); String awakeableId = awakeable.id(); ctx.run(() -> triggerTaskAndDeliverId(awakeableId)); @@ -18,7 +18,7 @@ public void awakeables(ObjectContext ctx) { // ctx.awakeableHandle(awakeableId) - .resolve(CoreSerdes.JSON_STRING, "hello"); + .resolve(JsonSerdes.STRING, "hello"); // // diff --git a/code_snippets/java/src/main/java/develop/Greeter.java b/code_snippets/java/src/main/java/develop/Greeter.java index 44ea7c75..f63bde0a 100644 --- a/code_snippets/java/src/main/java/develop/Greeter.java +++ b/code_snippets/java/src/main/java/develop/Greeter.java @@ -8,7 +8,7 @@ @VirtualObject public class Greeter { - private static final StateKey COUNT = StateKey.of("count", CoreSerdes.JSON_INT); + private static final StateKey COUNT = StateKey.of("count", JsonSerdes.INT); @Handler public String greet(ObjectContext ctx, String greeting) { diff --git a/code_snippets/java/src/main/java/develop/MyService.java b/code_snippets/java/src/main/java/develop/MyService.java index 8ea15623..4caba1bb 100644 --- a/code_snippets/java/src/main/java/develop/MyService.java +++ b/code_snippets/java/src/main/java/develop/MyService.java @@ -1,12 +1,8 @@ package develop; import dev.restate.sdk.Context; -import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.Service; -import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; -import dev.restate.sdk.common.StateKey; import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder; import java.util.UUID; diff --git a/code_snippets/java/src/main/java/develop/SerializationExample.java b/code_snippets/java/src/main/java/develop/SerializationExample.java index 7f79936e..23390088 100644 --- a/code_snippets/java/src/main/java/develop/SerializationExample.java +++ b/code_snippets/java/src/main/java/develop/SerializationExample.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.google.protobuf.Duration; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.common.Serde; import dev.restate.sdk.common.StateKey; import dev.restate.sdk.serde.jackson.JacksonSerdes; @@ -14,21 +14,22 @@ public class SerializationExample { List serializers = Arrays.asList( // - CoreSerdes.VOID, - CoreSerdes.JSON_BYTE, - CoreSerdes.JSON_STRING, - CoreSerdes.JSON_BOOLEAN, - CoreSerdes.JSON_BYTE, - CoreSerdes.JSON_SHORT, - CoreSerdes.JSON_INT, - CoreSerdes.JSON_LONG, - CoreSerdes.JSON_FLOAT, - CoreSerdes.JSON_DOUBLE + Serde.VOID, + Serde.RAW, + Serde.BYTE_BUFFER, + JsonSerdes.STRING, + JsonSerdes.BOOLEAN, + JsonSerdes.BYTE, + JsonSerdes.SHORT, + JsonSerdes.INT, + JsonSerdes.LONG, + JsonSerdes.FLOAT, + JsonSerdes.DOUBLE // ); // - StateKey STATE_KEY = StateKey.of("my-key", CoreSerdes.JSON_LONG); + StateKey STATE_KEY = StateKey.of("my-key", JsonSerdes.LONG); // private void someFn(){ diff --git a/code_snippets/java/src/main/java/develop/ServingVirtualThreads.java b/code_snippets/java/src/main/java/develop/ServingVirtualThreads.java index b819b48c..42666971 100644 --- a/code_snippets/java/src/main/java/develop/ServingVirtualThreads.java +++ b/code_snippets/java/src/main/java/develop/ServingVirtualThreads.java @@ -1,6 +1,6 @@ package develop; -import dev.restate.sdk.Service; +import dev.restate.sdk.HandlerRunner; import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder; import java.util.concurrent.Executors; @@ -10,10 +10,8 @@ public void virtualThreads(RestateHttpEndpointBuilder builder) { // builder.bind( // This is the class generated by the annotation processor - new GreeterBindableService( - new Greeter(), - new Service.Options(Executors.newVirtualThreadPerTaskExecutor()) - ) + new GreeterServiceDefinitionFactory().create(new Greeter()), + new HandlerRunner.Options(Executors.newVirtualThreadPerTaskExecutor()) ); // } diff --git a/code_snippets/java/src/main/java/develop/SideEffects.java b/code_snippets/java/src/main/java/develop/SideEffects.java index 1125e13c..977ff9fd 100644 --- a/code_snippets/java/src/main/java/develop/SideEffects.java +++ b/code_snippets/java/src/main/java/develop/SideEffects.java @@ -3,7 +3,7 @@ import dev.restate.sdk.Awaitable; import dev.restate.sdk.Awakeable; import dev.restate.sdk.Context; -import dev.restate.sdk.common.CoreSerdes; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.common.TerminalException; import java.util.UUID; @@ -13,7 +13,7 @@ class SideEffects { void sideEffect(Context ctx) { // - String output = ctx.run(CoreSerdes.JSON_STRING, () -> doDbRequest()); + String output = ctx.run(JsonSerdes.STRING, () -> doDbRequest()); // @@ -22,7 +22,7 @@ void sideEffect(Context ctx) { int amount = 1; // - ctx.run(CoreSerdes.JSON_BOOLEAN, () -> { + ctx.run(JsonSerdes.BOOLEAN, () -> { boolean result = paymentClient.call(txId, amount); if(result){ // withClass highlight-line @@ -36,7 +36,7 @@ void sideEffect(Context ctx) { // try { - ctx.run(CoreSerdes.JSON_BOOLEAN, () -> { + ctx.run(JsonSerdes.BOOLEAN, () -> { boolean result = paymentClient.call(txId, amount); if(result){ // withClass highlight-line @@ -51,9 +51,9 @@ void sideEffect(Context ctx) { // - Awakeable a1 = ctx.awakeable(CoreSerdes.JSON_BOOLEAN); - Awakeable a2 = ctx.awakeable(CoreSerdes.JSON_BOOLEAN); - Awakeable a3 = ctx.awakeable(CoreSerdes.JSON_BOOLEAN); + Awakeable a1 = ctx.awakeable(JsonSerdes.BOOLEAN); + Awakeable a2 = ctx.awakeable(JsonSerdes.BOOLEAN); + Awakeable a3 = ctx.awakeable(JsonSerdes.BOOLEAN); // Awaitable.all(a1, a2, a3).await(); diff --git a/code_snippets/java/src/main/java/develop/State.java b/code_snippets/java/src/main/java/develop/State.java index 724b9f76..e801151c 100644 --- a/code_snippets/java/src/main/java/develop/State.java +++ b/code_snippets/java/src/main/java/develop/State.java @@ -1,7 +1,7 @@ package develop; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; -import dev.restate.sdk.common.CoreSerdes; import dev.restate.sdk.common.StateKey; import java.util.Collection; @@ -15,24 +15,24 @@ public void getState(ObjectContext ctx) { // // Getting String value - StateKey STRING_STATE_KEY = StateKey.of("my-key", CoreSerdes.JSON_STRING); + StateKey STRING_STATE_KEY = StateKey.of("my-key", JsonSerdes.STRING); String stringState = ctx.get(STRING_STATE_KEY).orElse("my-default"); // Getting integer value - StateKey INT_STATE_KEY = StateKey.of("my-key", CoreSerdes.JSON_INT); + StateKey INT_STATE_KEY = StateKey.of("my-key", JsonSerdes.INT); int intState = ctx.get(INT_STATE_KEY).orElse(0); // } public void setState(ObjectContext ctx) { // - StateKey STRING_STATE_KEY = StateKey.of("my-key", CoreSerdes.JSON_STRING); + StateKey STRING_STATE_KEY = StateKey.of("my-key", JsonSerdes.STRING); ctx.set(STRING_STATE_KEY, "my-new-value"); // } public void clearState(ObjectContext ctx) { // - StateKey STRING_STATE_KEY = StateKey.of("my-key", CoreSerdes.JSON_STRING); + StateKey STRING_STATE_KEY = StateKey.of("my-key", JsonSerdes.STRING); ctx.clear(STRING_STATE_KEY); // diff --git a/code_snippets/java/src/main/java/get_started/Tour.java b/code_snippets/java/src/main/java/get_started/Tour.java index e15743c5..7d27b2f9 100644 --- a/code_snippets/java/src/main/java/get_started/Tour.java +++ b/code_snippets/java/src/main/java/get_started/Tour.java @@ -1,9 +1,9 @@ package get_started; import dev.restate.sdk.Context; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.Service; -import dev.restate.sdk.common.CoreSerdes; import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder; import java.time.Duration; @@ -52,7 +52,7 @@ public boolean handle(Context ctx, CheckoutRequest request) { String idempotencyKey = ctx.random().nextUUID().toString(); // withClass highlight-line - boolean success = ctx.run(CoreSerdes.JSON_BOOLEAN, () -> + boolean success = ctx.run(JsonSerdes.BOOLEAN, () -> PaymentClient.get().call(idempotencyKey, totalPrice)); return success; diff --git a/code_snippets/java/src/main/java/operate/invocations/GreetCounterObject.java b/code_snippets/java/src/main/java/operate/invocations/GreetCounterObject.java index 9f6bf445..98fbe759 100644 --- a/code_snippets/java/src/main/java/operate/invocations/GreetCounterObject.java +++ b/code_snippets/java/src/main/java/operate/invocations/GreetCounterObject.java @@ -1,16 +1,16 @@ package operate.invocations; +import dev.restate.sdk.JsonSerdes; import dev.restate.sdk.ObjectContext; import dev.restate.sdk.annotation.Handler; import dev.restate.sdk.annotation.VirtualObject; -import dev.restate.sdk.common.CoreSerdes; import dev.restate.sdk.common.StateKey; @VirtualObject public class GreetCounterObject { public final static StateKey COUNT = - StateKey.of("count", CoreSerdes.JSON_INT); + StateKey.of("count", JsonSerdes.INT); @Handler public int greet(ObjectContext ctx, String greeting){ diff --git a/code_snippets/kotlin/build.gradle.kts b/code_snippets/kotlin/build.gradle.kts index dad40137..53a812db 100644 --- a/code_snippets/kotlin/build.gradle.kts +++ b/code_snippets/kotlin/build.gradle.kts @@ -11,9 +11,10 @@ plugins { repositories { mavenCentral() + mavenLocal() } -val restateVersion = "0.9.0" +val restateVersion = "0.10.0-SNAPSHOT" dependencies { // Annotation processor diff --git a/code_snippets/kotlin/src/main/kotlin/develop/ServingVirtualThreads.kt b/code_snippets/kotlin/src/main/kotlin/develop/ServingVirtualThreads.kt index 5c1ff6c3..291cd891 100644 --- a/code_snippets/kotlin/src/main/kotlin/develop/ServingVirtualThreads.kt +++ b/code_snippets/kotlin/src/main/kotlin/develop/ServingVirtualThreads.kt @@ -1,7 +1,7 @@ package develop import dev.restate.sdk.http.vertx.RestateHttpEndpointBuilder -import dev.restate.sdk.kotlin.Service +import dev.restate.sdk.kotlin.HandlerRunner import java.util.concurrent.Executors import kotlinx.coroutines.asCoroutineDispatcher @@ -10,11 +10,9 @@ class ServingVirtualThreads { // builder.bind( // This is the class generated by the annotation processor - GreeterBindableService( - Greeter(), - Service.Options( - coroutineContext = Executors.newVirtualThreadPerTaskExecutor().asCoroutineDispatcher() - ) + GreeterServiceDefinitionFactory().create(Greeter()), + HandlerRunner.Options( + coroutineContext = Executors.newVirtualThreadPerTaskExecutor().asCoroutineDispatcher() ) ) // diff --git a/docs/develop/java/serving.mdx b/docs/develop/java/serving.mdx index 2edc2dce..382fadaf 100644 --- a/docs/develop/java/serving.mdx +++ b/docs/develop/java/serving.mdx @@ -13,7 +13,6 @@ Restate services can run in two ways: as an HTTP endpoint or as AWS Lambda funct - @@ -93,7 +92,7 @@ The implementation of your services and handlers remains the same for both deplo Using Java 21 Virtual Threads -If you use a JVM >= 21, you can easily use virtual threads to run your services: +If you use a JVM >= 21, you can use virtual threads to run your services: