From 3d41d54c73c40133fce327ac7f3a99fcc6df5529 Mon Sep 17 00:00:00 2001 From: Bruno Borges Date: Sat, 30 Nov 2019 02:01:10 -0800 Subject: [PATCH] new example --- client/pom.xml | 13 +- .../src/main/java/io/dapr/DaprClientGrpc.java | 6 +- client/src/main/java/io/dapr/DaprGrpc.java | 4 +- examples/pom.xml | 5 + .../java/io/dapr/examples/OrderManager.java | 112 ++++++++++++++++++ 5 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 examples/src/main/java/io/dapr/examples/OrderManager.java diff --git a/client/pom.xml b/client/pom.xml index 63472ee28..b778e192e 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -82,8 +82,17 @@ ${protobuf.input.directory}/dapr ${protobuf.input.directory}/daprclient - ${project.build.sourceDirectory} - io.grpc:protoc-gen-grpc-java:${grpc.version} + + + java + ${project.build.sourceDirectory} + + + grpc-java + ${project.build.sourceDirectory} + io.grpc:protoc-gen-grpc-java:${grpc.version} + + diff --git a/client/src/main/java/io/dapr/DaprClientGrpc.java b/client/src/main/java/io/dapr/DaprClientGrpc.java index 5cea623c5..147e13eae 100644 --- a/client/src/main/java/io/dapr/DaprClientGrpc.java +++ b/client/src/main/java/io/dapr/DaprClientGrpc.java @@ -17,12 +17,12 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; /** *
- * User Code definitions by BRUNO
+ * User Code definitions
  * 
*/ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.24.0)", - comments = "Source: daprclient/daprclient.proto") + value = "by gRPC proto compiler (version 1.25.0)", + comments = "Source: daprclient.proto") public final class DaprClientGrpc { private DaprClientGrpc() {} diff --git a/client/src/main/java/io/dapr/DaprGrpc.java b/client/src/main/java/io/dapr/DaprGrpc.java index cab4028f5..78c3cc2fd 100644 --- a/client/src/main/java/io/dapr/DaprGrpc.java +++ b/client/src/main/java/io/dapr/DaprGrpc.java @@ -21,8 +21,8 @@ import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; * */ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.24.0)", - comments = "Source: dapr/dapr.proto") + value = "by gRPC proto compiler (version 1.25.0)", + comments = "Source: dapr.proto") public final class DaprGrpc { private DaprGrpc() {} diff --git a/examples/pom.xml b/examples/pom.xml index 7e12ba45b..f5cdeb91e 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -16,6 +16,11 @@ dapr-client-examples + + org.json + json + 20190722 + io.dapr client diff --git a/examples/src/main/java/io/dapr/examples/OrderManager.java b/examples/src/main/java/io/dapr/examples/OrderManager.java new file mode 100644 index 000000000..5397e82ea --- /dev/null +++ b/examples/src/main/java/io/dapr/examples/OrderManager.java @@ -0,0 +1,112 @@ +package io.dapr.examples; + +import java.net.InetSocketAddress; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpClient.Redirect; +import java.net.http.HttpClient.Version; +import java.net.http.HttpRequest.BodyPublishers; +import java.net.http.HttpResponse.BodyHandlers; +import java.nio.charset.Charset; +import java.time.Duration; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import static java.lang.System.out; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import org.json.JSONObject; + +import com.sun.net.httpserver.HttpServer; +import com.sun.net.httpserver.HttpExchange; + +/** + * OrderManager + */ +public class OrderManager { + + static HttpClient httpClient; + + public static void main(String[] args) throws IOException { + var httpPort = 8080; + var daprPort = Optional.ofNullable(System.getenv("DAPR_HTTP_PORT")).orElse("3500"); + var stateUrl = String.format("http://localhost:%s/v1.0/state", daprPort); + var httpServer = HttpServer.create(new InetSocketAddress(httpPort), 0); + + httpClient = HttpClient.newBuilder().version(Version.HTTP_1_1).followRedirects(Redirect.NORMAL) + .connectTimeout(Duration.ofSeconds(2)).build(); + + httpServer.createContext("/order").setHandler(e -> { + fetch(stateUrl + "/order").thenAccept(response -> { + var resCode = response.statusCode() == 200 ? 200 : 500; + var body = response.statusCode() == 200 ? response.body() : "Could not get state."; + + try { + e.sendResponseHeaders(resCode, body.getBytes().length); + try (var os = e.getResponseBody()) { + os.write(body.getBytes()); + } + } catch (IOException ioerror) { + out.println(ioerror); + } + }); + }); + + httpServer.createContext("/neworder").setHandler(e -> { + var json = readBody(e); + var jsonObject = new JSONObject(json); + var orderId = jsonObject.getString("orderId"); + out.printf("Got a new order! Order ID: %s", orderId); + + var state = new JSONObject(); + state.put("key", "order"); + state.put("value", jsonObject); + + post(stateUrl + "/neworder", state.toString()).thenAccept(response -> { + var resCode = response.statusCode() == 200 ? 200 : 500; + var body = response.statusCode() == 200 ? "" : "Failed to persist state."; + try { + e.sendResponseHeaders(resCode, body.getBytes().length); + try (var os = e.getResponseBody()) { + os.write(body.getBytes()); + } + } catch (IOException ioerror) { + out.println(ioerror); + } + }); + }); + + httpServer.start(); + out.printf("Java App listening on port %s.", httpPort); + } + + private static CompletableFuture> fetch(String url) { + var request = HttpRequest.newBuilder().uri(URI.create(url)).build(); + return httpClient.sendAsync(request, BodyHandlers.ofString()); + } + + private static CompletableFuture> post(String url, String body) { + var request = HttpRequest.newBuilder().uri(URI.create(url)) + .header("Content-Type", "application/json; charset=UTF-8").POST(BodyPublishers.ofString(body)).build(); + + return httpClient.sendAsync(request, BodyHandlers.ofString()); + } + + private static String readBody(HttpExchange t) { + // retrieve the request json data + var is = t.getRequestBody(); + var bos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len; + try (bos) { + while ((len = is.read(buffer)) > 0) + bos.write(buffer, 0, len); + } catch (IOException e) { + e.printStackTrace(); + } + return new String(bos.toByteArray(), Charset.forName("UTF-8")); + } +}