Giter Site home page Giter Site logo

java-sdk's Introduction

Dapr SDK for Java

Build Status Gitter codecov License: MIT Maven Central

This is the Dapr SDK for Java, including the following features:

  • PubSub
  • Service Invocation
  • Binding
  • State Store
  • Actors

Getting Started

Pre-Requisites

Importing Dapr's Java SDK

For a Maven project, add the following to your pom.xml file:

<project>
  ...
  <repositories>
    ...
    <!-- BEGIN: Dapr's repositories -->
    <repository>
      <id>oss-snapshots</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
    <repository>
      <id>oss-release</id>
      <url>https://oss.sonatype.org/content/repositories/releases/</url>
    </repository>
    <!-- END: Dapr's repositories -->
    ...
  </repositories>
  ...
  <dependencyManagement>
      <dependencies>
        ...
         <!-- Dapr's core SDK with all features, except Actors. -->
        <dependency>
          <groupId>io.dapr</groupId>
          <artifactId>dapr-sdk</artifactId>
          <version>0.10.0</version>
        </dependency>
        <!-- Dapr's SDK for Actors (optional). -->
        <dependency>
          <groupId>io.dapr</groupId>
          <artifactId>dapr-sdk-actors</artifactId>
          <version>0.10.0</version>
        </dependency>
        <!-- Dapr's SDK integration with SpringBoot (optional). -->
        <dependency>
          <groupId>io.dapr</groupId>
          <artifactId>dapr-sdk-springboot</artifactId>
          <version>0.10.0</version>
        </dependency>
        <!-- If needed, resolve version conflict of okhttp3. -->
        <dependency>
          <groupId>com.squareup.okhttp3</groupId>
          <artifactId>okhttp</artifactId>
          <version>4.2.2</version> <!-- version required by Dapr's sdk -->
        </dependency>
        ...
      </dependencies>
  </dependencyManagement>
</project>

For a Gradle project, add the following to your build.gradle file:

repositories {
    ...
    // Dapr repositories
    maven {
      url "https://oss.sonatype.org/content/repositories/snapshots"
	  mavenContent {
	    snapshotsOnly()
	  }
    }
    maven {
	  url "https://oss.sonatype.org/content/repositories/releases/"
    }
}
...
dependencies {
...
    // Dapr's core SDK with all features, except Actors.
    compile('io.dapr:dapr-sdk:0.10.0')
    // Dapr's SDK for Actors (optional).
    compile('io.dapr:dapr-sdk-actors:0.10.0')
    // Dapr's SDK integration with SpringBoot (optional).
    compile('io.dapr:dapr-sdk-springboot:0.10.0')

    // If needed, force conflict resolution for okhttp3.
    configurations.all {
        resolutionStrategy.force 'com.squareup.okhttp3:okhttp:4.2.2'
    }
}

Running the examples

Clone this repository including the submodules:

git clone https://github.com/dapr/java-sdk.git

Then head over to build the Maven (Apache Maven version 3.x) project:

# make sure you are in the `java-sdk` directory.
mvn clean install

Try the following examples to learn more about Dapr's Java SDK:

API Documentation

Please, refer to our Javadoc website.

Reactor API

The Java SDK for Dapr is built using Project Reactor. It provides an asynchronous API for Java. When consuming a result is consumed synchronously, as in the examples referenced above, the block() method is used.

The code below does not make any API call, it simply returns the Mono publisher object. Nothing happens until the application subscribes or blocks on the result:

Mono<Void> result = daprClient.publishEvent("mytopic", "my message");

To start execution and receive the result object synchronously(void or Void becomes an empty result), use block(). The code below shows how to execute the call and consume an empty response:

Mono<Void> result = daprClient.publishEvent("mytopic", "my message");
result.block();

How to use a custom serializer

This SDK provides a basic serialization for request/response objects but also for state objects. Applications should provide their own serialization for production scenarios.

  1. Implement the DaprObjectSerializer interface. See this class as example.
  2. Use your serializer class in the following scenarios:
    DaprClient client = (new DaprClientBuilder())
        .withObjectSerializer(new MyObjectSerializer()) // for request/response objects.
        .withStateSerializer(new MyStateSerializer()) // for state objects.
        .build();
    • When registering an Actor Type:
    ActorRuntime.getInstance().registerActor(
      DemoActorImpl.class,
      new MyObjectSerializer(), // for request/response objects.
      new MyStateSerializer()); // for state objects.
    • When building a new instance of ActorProxy to invoke an Actor instance, use the same serializer as when registering the Actor Type:
    ActorProxy actor = (new ActorProxyBuilder("DemoActor"))
        .withObjectSerializer(new MyObjectSerializer()) // for request/response objects.
        .build();

Debug Java application or Dapr's Java SDK

In IntelliJ Community Edition, consider debugging in IntelliJ.

In Visual Studio Code, consider debugging in Visual Studio Code.

If you have a Java application or an issue on this SDK that needs to be debugged, run Dapr using a dummy command and start the application from your IDE (IntelliJ, for example). For Linux and MacOS:

dapr run --app-id testapp --app-port 3000 --dapr-http-port 3500 --dapr-grpc-port 5001 -- cat

For Windows:

dapr run --app-id testapp --app-port 3000 --dapr-http-port 3500 --dapr-grpc-port 5001 -- waitfor FOREVER

When running your Java application from IDE, make sure the following environment variables are set, so the Java SDK knows how to connect to Dapr's sidecar:

DAPR_HTTP_PORT=3500
DAPR_GRPC_PORT=5001

Now you can go to your IDE (like Eclipse, for example) and debug your Java application, using port 3500 to call Dapr while also listening to port 3000 to expose Dapr's callback endpoint.

Calls to Dapr's APIs on http://127.0.0.1:3500/* should work now and trigger breakpoints in your code.

Exception handling

All exceptions thrown from the SDK are instances of DaprException. DaprException extends from RuntimeException, making it compatible with Project Reactor. See example for more details.

Development

Update proto files

Change the properties below in pom.xml to point to the desired reference URL in Git. Avoid pointing to master branch since it can change over time and create unpredictable behavior in the build.

<project>
  ...
  <properties>
    ...
    <dapr.proto.url>https://raw.githubusercontent.com/dapr/dapr/v0.4.0/pkg/proto/dapr/dapr.proto</dapr.proto.url>
    <dapr.client.proto.url>https://raw.githubusercontent.com/dapr/dapr/v0.4.0/pkg/proto/daprclient/daprclient.proto</dapr.client.proto.url>
    ...
  </properties>
  ...
</project>

java-sdk's People

Contributors

aaroncrawfis avatar amanbha avatar andresroblesmx avatar arghya88 avatar artursouza avatar brendandburns avatar brunoborges avatar dependabot[bot] avatar haishi2016 avatar he-pin avatar juanjose-herrera avatar kachawla avatar lmwf avatar marcosreyes05 avatar mkash32 avatar moderakh avatar mukundansundar avatar pkedy avatar pruthvidhodda avatar ricardoniepel avatar rinita-de avatar shalabhms avatar skyao avatar tcnghia avatar wcs1only avatar wwulfric avatar xiazuojie avatar yaron2 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.