Release 2.6.0
We’re excited to announce Restate Java SDK 2.6.0!Virtual Threads by default (Java 21+)
The default executor for Java services now uses virtual threads on Java 21+, falling back toExecutors.newCachedThreadPool() for older Java versions.You can still customize the executor providing HandlerRunner.Options.withExecutor() to Endpoint#bind, or for Spring users, use the new Spring properties (restate.executor or restate.components.<name>.executor).Note: This change only applies to Java services. Kotlin services continue to Dispatchers.Default as default coroutine dispatcher.[Spring Boot] Configure services using Spring’s Properties
You can now configure Restate services directly from Spring’sapplication.properties or application.yml files. This provides a centralized way to configure service behavior without modifying code.Example Configuration
Annotation based configuration
Theconfiguration attribute on @RestateService, @RestateVirtualObject, and @RestateWorkflow annotations now accepts a bean name of type RestateComponentProperties (previously RestateServiceConfigurator):[Kotlin] New experimental API
Following the introduction of the new experimental API for Java in v2.5.0, we’re now bringing the same experience to Kotlin!The new API removes the need for the KSP code generator, making it significantly simpler to use the Restate SDK:- No KSP code generator required: The SDK now uses reflection to discover and bind your services, eliminating the need for build-time code generation and making your build simpler and faster.
- No more Context parameters: Handler methods no longer need to accept a
Contextparameter. Instead, use top-level functions fromdev.restate.sdk.kotlinto access state, promises, and other Restate functionality. - Cleaner method signatures: Your handler methods now have cleaner signatures that focus on your business logic rather than Restate infrastructure.
How to use it
-
Remove the KSP code generator dependency
sdk-api-kotlin-gen -
Remove the
Context,ObjectContext,SharedObjectContext,WorkflowContext,SharedWorkflowContextparameters from your@Handlerannotated methods. For example:Becomes:The same applies for interfaces using Restate annotations. -
Replace all the usages of
ctx.with the top-level functions. For example:Becomes: -
Replace all the usages of code-generated clients. There are two ways to invoke services:
Simple proxy (for direct calls):
The top-level functions let you create proxies to call services directly using
service<T>(),virtualObject<T>(key)andworkflow<T>(key):Handle-based (for advanced patterns): For asynchronous handling, request composition, or invocation options (such as idempotency keys), usetoService<T>(),toVirtualObject<T>(key)andtoWorkflow<T>(key):
Reference sheet
Context API (2.5.x) | New reflection API (2.6.0) |
|---|---|
ctx.runBlock { ... }/ctx.runAsync { ... } | runBlock { ... }/runAsync { ... } |
ctx.random() | random() |
ctx.timer() | timer() |
ctx.awakeable() | awakeable<T>() |
ctx.get(key) / ctx.set(key, value) | state().get(key) / state().set(key, value) |
ctx.promise(key) | promise(key) |
| Code generated clients (Services) | service<T>() / toService<T>() |
| Code generated clients (Virtual Objects) | virtualObject<T>(key) / toVirtualObject<T>(key) |
| Code generated clients (Workflows) | workflow<T>(key) / toWorkflow<T>(key) |
Using concrete classes with proxy clients
By default, Kotlin classes arefinal, preventing libraries like Restate to generate runtime client proxies.We generally suggest one of the following three options:- Define an interface with all Restate annotations and have your class implement it. Use the interface type for proxy calls, e.g.
service<MyServiceInterface>(). - Use
openin all Restate annotated classes/methods. - Setup the Kotlin allopen compiler plugin with the following configuration:
Gradual migration
You can gradually migrate to the new API by disabling the KSP code generator for specific classes. For example, if you have a project with amy.example.Greeter and a my.example.Counter, you can decide to migrate only my.example.Counter to use the new API.To do so, keep the KSP code generator dependency and pass the KSP option dev.restate.codegen.disabledClasses as follows:Gradle (Kotlin DSL)New API for Deterministic Time
We’ve added a new API to get the current time deterministically that’s consistent across replays.Java
Kotlin
Other changes
- Fix detection of
@Rawannotation in Java Reflection API Serde.RAW.contentType()now correctly returnsapplication/octet-stream- Dependency updates:
- Jackson 2.19.4
- Spring Boot 3.4.13
- Vert.x 4.5.24
- OpenTelemetry 1.58.0
- JUnit 5.14.1
Release 2.5.0
We’re excited to announce Restate Java SDK 2.5.0, featuring a major improvement to the developer experience with a new reflection-based API.Experimental Reflection-Based API
The new reflection-based API removes the need for the annotation processor, making it significantly simpler to use the Restate SDK:- No annotation processor required: The SDK now uses reflection to discover and bind your services, eliminating the need for build-time annotation processing and making your build simpler and faster.
- No more Context parameters: Handler methods no longer need to accept a
Contextparameter. Instead, use static methods from theRestateclass to access state, promises, and other Restate functionality. - Cleaner method signatures: Your handler methods now have cleaner signatures that focus on your business logic rather than Restate infrastructure.
How to use it
-
Remove the annotation processor dependency
sdk-api-gen -
Remove the
Context,ObjectContext,SharedObjectContext,WorkflowContext,SharedWorkflowContextparameters from your@Handlerannotated methods. For example:Becomes:The same applies for interfaces using Restate annotations. -
Replace all the usages of
ctx.withRestate.. For example:Becomes: -
Replace all the usages of code-generated clients. There are two ways to invoke services:
Simple proxy (for direct calls):
The
Restateclass lets you create proxies to call services directly usingservice(Class),virtualObject(Class, key)andworkflow(Class, key):Handle-based (for advanced patterns): For asynchronous handling, request composition, or invocation options (such as idempotency keys), useserviceHandle(Class),virtualObjectHandle(Class, key)andworkflowHandle(Class, key):
Reference sheet
Context API (2.4.x) | New Restate API (2.5.0) |
|---|---|
ctx.run(...) | Restate.run(...) |
ctx.random() | Restate.random() |
ctx.timer() | Restate.timer() |
ctx.awakeable() | Restate.awakeable() |
ctx.get(key) / ctx.set(key, value) | Restate.state().get(key) / Restate.state().set(key, value) |
ctx.promise(key) | Restate.promise(key) |
| Code generated clients (Services) | Restate.service(Class) / Restate.serviceHandle(Class) |
| Code generated clients (Virtual Objects) | Restate.virtualObject(Class, key) / Restate.virtualObjectHandle(Class, key) |
| Code generated clients (Workflows) | Restate.workflow(Class, key) / Restate.workflowHandle(Class, key) |
Gradual migration
You can gradually migrate to the new API by disabling the annotation processor for specific classes. For example, if you have a project with amy.example.Greeter and a my.example.Counter, you can decide to migrate only my.example.Counter to use the new API.To do so, keep the annotation processor dependency and pass the compiler option dev.restate.codegen.disabledClasses as follows:GradleWhat’s Changed
- Various improvements to the code generator
New Contributors
- @muhamadazmy made their first contribution in https://github.com/restatedev/sdk-java/pull/562
- @squarepegg made their first contribution in https://github.com/restatedev/sdk-java/pull/563
Notable changes
- Fix bug in the state machine that caused, in some cases, the invocation to hang when inactivity timeout kicked in. https://github.com/restatedev/sdk-java/pull/556
- bump handlebars dependency from 4.3.1 to 4.5.0 by @djarnis73 in https://github.com/restatedev/sdk-java/pull/557
New Contributors
- @djarnis73 made their first contribution in https://github.com/restatedev/sdk-java/pull/557
Invocation retry policy
When used with Restate 1.5, you can now configure the invocation retry policy from the SDK directly. See https://github.com/restatedev/restate/releases/tag/v1.5.0 for more details on the new invocation retry policy configuration.[Spring integration] Configure service options
A new API was introduced to configure services using the Spring integration:What’s Changed
- [Release] Bump to 2.4.0-SNAPSHOT by @github-actions[bot] in https://github.com/restatedev/sdk-java/pull/531
- Bump org.assertj:assertj-core from 3.26.0 to 3.27.4 by @dependabot[bot] in https://github.com/restatedev/sdk-java/pull/536
- Retry policy by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/540
- Protocol V6 + random_seed support by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/542
- Test Suite v3.1 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/545
- Clarify max attempts meaning by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/546
- Add workflow retention setting at service level by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/547
- Add entrypoint to setup a configurator for Spring Restate services. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/548
- Dependency bumps by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/549
- [Release] Bump to 2.4.0 by @github-actions[bot] in https://github.com/restatedev/sdk-java/pull/550
IMPORTANT For Spring Users: Due to MadeYourReset CVE, we bumped Vert.x and Netty to latest releases. This results in misaligned Netty dependency when used in combination with Spring Parent POM/Gradle dependency management plugin. To fix it, force the correct Netty version:To disable it when using the spring boot integration, add
- If you use Maven with spring parent POM add
<netty.version>4.1.124.Final</netty.version>to your POM - If you use Gradle Spring dependency management plugin add
netty.version = 4.1.124.Finalto thegradle.propertiesfile
Improvements
- Added ability to disable bidirectional streaming. This can be useful in some environments where HTTP/2 streaming doesn’t work properly. To disable it using
RestateHttpServer:
restate.sdk.http.disableBidirectionalStreaming=true to your application.properties- Add
delayto generated workflow clientssubmitmethod - Added few extension methods to Kotlin ingress client
Bug fixes
- Removed double logging of
TerminalException - Removed noisy logging of coroutine cancellation when irrelevant
- Dependency bumps
- Vert.x 4.5.18
- Kotlin 2.2.10
What’s Changed
- [Release] Bump to 2.3.0-SNAPSHOT by @github-actions[bot] in https://github.com/restatedev/sdk-java/pull/512
- Few improvements to errors from sdk-shared-core by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/513
- Improve formatting of journal mismatch by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/514
- Fix usage of filer/classloader for resources. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/517
- Add commandIndex to mismatch exceptions by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/518
- [Release] Bump to 2.2.1 by @github-actions[bot] in https://github.com/restatedev/sdk-java/pull/519
- You can now configure the service/handler options when binding the services, e.g. in Kotlin:
- The following new configuration options are available for services and handlers:
inactivityTimeout,abortTimeout,idempotencyRetention,journalRetention,ingressPrivate,enableLazyState. Please note, these will only work with Restate 1.4 onward.
What’s Changed
- [Release] Bump to 2.2.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/506
- Endpoint manifest V3 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/508
- Dep updates for security by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/509
- Update coordinates for the new publishing portal by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/510
- [Release] Bump to 2.2.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/511
What’s Changed
- [Release] Bump to 2.2.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/500
- Make KtTypeTag public by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/504
- [Release] Bump to 2.1.1 by @github-actions in https://github.com/restatedev/sdk-java/pull/505
What’s Changed
Kotlin now supports JSON Schema
The Kotlin API now supports OOTB generating Json Schemas, using https://github.com/SMILEY4/schema-kenerator. The schemas will be automatically propagated torestate-server, and they will be available in the generated OpenAPI and in the Restate Playground.Changelog
- [Release] Bump to 2.1.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/493
- Fix ktdocs for select and awaitAll by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/494
- Generate Json Schemas for Kotlin by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/495
- Fix #497 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/498
- [Release] Bump to 2.1.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/499
Java/Kotlin SDK 2.0
We’re pleased to announce the release of Java/Kotlin SDK 2.0, in combination with Restate 1.3. Check out the announcement blog post for more details about Restate 1.3 and the new SDK features: https://restate.dev/blog/announcing-restate-1.3/Below are the changes specific to the Java/Kotlin SDK.What’s new and what changed
New meta packages
From now on you don’t need to pick individual packages of the SDK to get started, but you can use the new meta packages:dev.restate:sdk-java-httpfor Java API + HTTP endpoint (examplebuild.gradle.kts/pom.xml)dev.restate:sdk-java-lambdafor Java API + Lambda endpointdev.restate:sdk-kotlin-httpfor Kotlin API + HTTP endpoint (examplebuild.gradle.kts)dev.restate:sdk-kotlin-lambdafor Kotlin API + Lambda endpoint
Code generation and sharing code-generated artifacts
We made few changes to the generated code, with the goal of simplifying sharing code generated artifacts with 3rd party consumers of your Restate services.Among the notable breaking changes:- All methods in generated clients, both for normal client and
Contextclient, have an overload/optional parameter that allows to set additional options, including headers andidempotencyKeyto use. Removed the old overloads acceptingCallRequestOptions. For example this code:
- Annotations
@Service/@VirtualObject/@Workflownameargument is deprecated, you can now override the name used by Restate for both services and handlers using the@Nameannotation. This name won’t affect anymore the name prefix of the generated classes. - The clients method
.send(Duration)has been removed in favor of overloads/optional parameter to perform one way calls withdelay. - The new class
[your service name]Handlerscontains inside the old class[your service name]Metadata. - All send methods in context clients now return
InvocationHandle.
[your service name]Handlers, that lets you easily call your service as follows:Client simply importing the module dev.restate:client for Java or dev.restate:client-kotlin for Kotlin.On top of that, this class works both for Kotlin API users and with Java API users, letting you call from Java to Kotlin and vice versa.If you don’t use the [...]Client class, but you use only the [...]Handlers, we suggest disabling its code generation as follows. For Java (gradle):Client changes
We overhauled the client to interact with Restate. Now it lives in a new maven module ad hoc called dev.restate:client, which you can import separately from the rest of the SDK when you need to interact only with Restate from another Java/Kotlin application.Notable changes:- Renamed package
dev.restate.sdk.clienttodev.restate.client - Renamed
dev.restate.sdk.client.CallRequestOptionstodev.restate.client.RequestOptions - Now all client methods returns headers and status code, see interface
dev.restate.client.ResponseHead. - It is possible to bootstrap your own
Clientimplementation using the HTTP client of your choice extendingdev.restate.client.base.BaseClient
Endpoint and RestateHttpServer
We now expose a uniform API across Http and Lambda support to build your service endpoint. In Java:HttpEndpointRequestHandler.fromEndpoint(Endpoint) it is also possible to get a Vert.x request handler for your endpoint, that can be used to build the HTTP server manually.Notable changes:RestateHttpEndpointBuilderwas deprecated, useRestateHttpServerinstead.RestateLambdaEndpointBuilderwas removed, nowBaseRestateLambdaHandler.registertakesEndpoint.Builderas argument.
The DurableFuture interface
We renamed the Awaitable to DurableFuture and reworked few of its methods, to make it easier to interact with asynchronous events and compose them:- Added
DurableFuture.withTimeout(Duration)to return a future composed with the timeout. This has the same behavior asDurableFuture.await(Duration)but it returns a future that can be later awaited, instead of awaiting the future immediately. DurableFuture.await(Duration)now throwsdev.restate.sdk.common.TimeoutExceptioninstead ofjava.util.concurrent.TimeoutException.- Added
DurableFuture.map(successMapper),DurableFuture.map(successMapper, failureMapper)andDurableFuture.mapFailure(failureMapper), to map futures result once completed.
DurableFuture Javadocs/DurableFuture KotlinDocs for more details.Deterministic resilient concurrency
As described in the blog post, Restate 1.3 improves support over deterministic concurrency.In Java we expose the new APISelect to await on multiple futures at the same time:select function, which now returns a DurableFuture itself and can be composed too:ctx.runAsync to compose asynchronous side effects
Both in Java and Kotlin you can now use the ctx.runAsync API in order to execute a side effect, and return a DurableFuture instead than the result immediately. You can then compose this future with other DurableFutures, for example to implement fan-in/fan-out operations.InvocationHandle for finer control over service-to-service communication
As described in the blog post, Restate 1.3 features new APIs to interact with running invocations.All these features are encapsulated in the new InvocationHandle(Javadocs/Kotlin docs) API:New Serde stack
We overhauled the Serde stack completely. Now you don’t need to pass around, neither figure out Serdes anymore, but you just need to focus on what types you need. For example:- Renamed
dev.restate.sdk.common.Serdetodev.restate.serde.Serde JsonSerdesis deprecated, use theClassandTypeTagoverloads ofContextmethods instead. Check above how the newSerdestack works.KtSerdes/KtDurablePromiseKey/KtStateKeyare deprecated. To create a state key in Kotlin usestateKey<T>(name), for a durable promise keydurablePromiseKey<T>(name). Check above how the newSerdestack works.Serdeinterface now usesdev.restate.common.Sliceinstead of directly byte arrays/NIOByteBuffer.
Kotlin Spring Boot integration
In the SDK release 1.2 we introduced an integration with Spring Boot, specifically designed for the Java API. We now introduced a similar integration in Kotlin too, to let you easily build Restate applications using Kotlin and Spring boot. Check out the quickstart: https://docs.restate.dev/get_started/quickstart?sdk=kotlinOther changes
- SDK Java 2.0 works only with Restate 1.3 onward.
- There is a new API to call/send requests between services, without using the client. Check out the
dev.restate.common.Requestjavadocs for more details. protobufis now distributed shaded, in order to avoid dependency conflicts.- Package
sdk-serde-protobufwas removed. - Removed deprecations.
We’re pleased to announce the release of the Java SDK 1.2.0
New features
- We now have a new Spring Boot to easily use the Restate SDK within your Spring Boot application. For more details, check out the example: https://github.com/restatedev/examples/tree/main/templates/java-maven-spring-boot
- The
sdk-testingpackage has been revamped to a more friendly and easier to use API, you can check it out here https://github.com/restatedev/examples/blob/9a9c7cf85c830f33a5f257db3ec986a09a1878b0/templates/java-gradle/src/test/java/my/example/GreeterTest.java. The old API is still available but it’s now deprecated, and will be removed in subsequent releases.
Notable changes
- The
ctx.runwithRetryPolicyhas been promoted to stable feature, check the Javadocs for more details. - You can now use checked exceptions within your
@Handlerannotated methods.
Breaking changes
- Bumped minimum JDK version to 17
- Because of a breaking change within log4j, you MUST either bump
log4j-coreto >= 2.24, or exclude thelog4j-apidependency when depending on the SDK. For example, in gradle:
- This release is not bytecode compatible with previous releases, meaning you can’t mix the annotation processor generated code from SDK <= 1.2.0 with this release.
- This release is compatible with Restate >= 1.1
Changelog
- [Release] Bump to 1.2.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/383
- Enable RawHandler test by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/385
- New test tool with new action by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/387
- Improve testing tools Javadocs by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/388
- Fix builds by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/389
- Introduce Spring Boot starter by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/393
- Spring boot improvements by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/394
- Add Json Schema for Req/Res types by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/395
- Add documentation and metadata fields to EndpointManifest by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/397
- Add title for classes by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/398
- Bump minimum JDK to 17 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/400
- Bump minimum protocol version to 2 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/401
- Fix case where we pass ServiceDefinition to the builder already by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/402
- Simple Json Schemas for Kotlin by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/403
- Allow checked exceptions in annotated services by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/407
- Fix code generation warning by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/408
- More dependency bumping by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/409
- Fix bad source version in ServiceProcessor by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/410
- Be lenient with ServiceLoader not able to load classes by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/411
- Few little improvements to testing by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/413
- [Release] Bump to 1.2.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/412
What’s Changed
- Add interpreter test code by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/379
- Bump to 1.2.0-SNAPSHOT by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/380
- Make sure we don’t check the invoke time for one way calls by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/381
- [Release] Bump to 1.1.1 by @github-actions in https://github.com/restatedev/sdk-java/pull/382
New features
- [Preview] Add retry policies for
runoperations, to limit the amount of retries/the duration of the retries - The ingress client now supports the ability to retrieve invocations/attach to existing invocations using idempotency id
What’s Changed
- [Release] Bump to 1.1.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/350
- Javadocs by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/347
- Add javadocs test by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/352
- buildAndListen now fails on port not available by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/353
- Add support to retrieve invocations from idempotency key by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/359
- Better error message when missing context parameter by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/360
- Fix Serde nullability annotations by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/361
- Sdk test tool by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/362
- Bump sdk-test-suite to 1.4 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/363
- E2E actions for running in runtime by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/364
- More info on ingress logs by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/365
- Update sdk-test-suite to 1.5 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/366
- Fix usage of new ingress exception constructor by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/367
- Add env vars by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/368
- A couple of changes to allow override the test artifact output (which would otherwise conflict) by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/369
- Remove the old e2e job by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/370
- New upgrade test by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/371
- Update test tool to 1.8, with new delayed calls test by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/372
- Make sure private methods cannot be annotated by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/377
- Don’t try to handle
Errorby @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/376 - Implement run retry policy by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/375
- [Release] Bump to 1.1.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/378
We’re happy to announce that Restate has reached the 1.0 milestone!Check the Restate 1.0 release for more details.
Workflow API
We have introduced a new API to simplify building workflows, check out the documentation: https://docs.restate.dev/develop/java/workflowsBreaking changes from 0.9
- Split CoreSerdes in JsonSerdes for the json primitive types and move RAW, BYTE_BUFFER AND VOID into the
Serdeinterface by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/330 - Remove protobuf from the public api of sdk-common by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/321
- Rename the ingress client and the connect method by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/336
Other changes
- [Release] Bump to 0.10.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/308
- Update admin api by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/313
- Update Openapi generator to newest version by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/314
- Integrate Java SDK with new service protocol negotiation mechanism by @tillrohrmann in https://github.com/restatedev/sdk-java/pull/318
- Fix double logging the end message by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/319
- Remove protobuf from the public api of sdk-common by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/321
- Fix submit disambiguation by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/320
- Verify that there can’t be two handlers with same name by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/326
- Add WorkflowHandle by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/329
- Fix nullability problem wrt return type of kotlin services by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/331
- Add SendStatus by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/332
- Java/Kotlin docs for the new workflow api by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/333
- Now send acks on combinators by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/334
- Consecutive GetState with empty by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/335
- Max concurrent streams by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/337
- Rename the ingress client and the connect method by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/336
- [kotlin] Fix nested types input/output code generation by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/273
- General dependency bump by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/339
- Allow more than one key in request signing by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/340
- Add Awaitable#all(List) and Awaitable#any(List) by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/338
- A lot of small linter fixes by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/341
- Fix getOutput return type by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/342
- Fix GetOutput status code error handling -_-” by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/343
- Move all the encoding/decoding of messages within sdk-core by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/344
- Remove stream when initializing user state storage by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/345
- minor doc fix by @AhmedSoliman in https://github.com/restatedev/sdk-java/pull/346
- Adjust the README for 1.0 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/348
- [Release] Bump to 1.0.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/349
What’s Changed
- [Release] Bump to 0.10.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/306
- Raw handlers by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/303
- [Release] Bump to 0.9.2 by @github-actions in https://github.com/restatedev/sdk-java/pull/307
What’s Changed
- [Release] Bump to 0.10.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/301
- Update README by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/271
- Update workflow deps by @tillrohrmann in https://github.com/restatedev/sdk-java/pull/302
- Implement request identity by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/297
- VOID should return null content type by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/304
- [Release] Bump to 0.9.1 by @github-actions in https://github.com/restatedev/sdk-java/pull/305
This release features a completely overhauled development experience. We suggest checking out the new documentation https://docs.restate.dev/develop/java/overview for more details and the new examples https://github.com/restatedev/examples.
What’s Changed
- [Release] Bump to 0.9.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/233
- New interface refactor by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/236
- New interface refactor (sdk-api-kotlin) by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/238
- sdk-api-kotlin-gen by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/240
- Use simple class name as default name by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/241
- Request headers and Executor injection changes. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/242
- Remove TerminalException.Code enum and replace it with just an integer. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/248
- Add RequestOptions to ingress requests by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/250
- Move Protobuf serde to separate module by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/253
- Make the ingress client async by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/252
- Add resolve/reject awakeables from ingress by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/254
- Fix bad request error code by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/255
- Fix ingress awakeable resolve/reject by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/256
- Fix broken links to the docs by @gvdongen in https://github.com/restatedev/sdk-java/pull/257
- Adapt latest protocol changes by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/258
- Correct content-type by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/261
- Merge send methods and rename with in bind by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/263
- Fix usage of IngressClient in code generated by kotlin gen by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/264
- Fix logging context propagation by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/270
- Rename ctx.sideEffect in ctx.run by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/267
- Fix options injection in kt codegen by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/274
- Remove idempotency retain period from ingress client options by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/268
- Add support for Send delay in ingress client by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/275
- More implicitness in kotlin by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/277
- More logging on jackson ser/de by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/279
- Fix corner cases around code generation and “reserved” keywords by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/280
- Named side effects by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/282
- Side effects changes by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/284
- Add x-restate-server header in responses by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/285
- Renaming components -> services by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/287
- Implement Shared handlers annotation for virtual objects by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/288
- Renamings 2 by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/289
- Add “Start invocation” in InvocationStateMachine, symmetric with “End invocation” log line by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/290
- Add checkEntryHeader to output entry by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/291
- Propagate
otelContextinRequestand in thread-local/coroutine context by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/296 - Remove Serde#schema by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/298
- Add metadata by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/299
- [Release] Bump to 0.9.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/300
What’s Changed
- [Release] Bump to 0.7.1-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/203
- Upgrade gradle and add .ignore by @AhmedSoliman in https://github.com/restatedev/sdk-java/pull/205
- Awakeable IDs following the new ID scheme by @AhmedSoliman in https://github.com/restatedev/sdk-java/pull/204
- Isolate gRPC code by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/195
- Support Kotlin target in the protoc plugin by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/196
- Bumped testcontainers and vertx by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/209
- Serialize state as JSON. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/208
Awaitable#mapby @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/210- Split RestateContext interface in KeyedContext/UnkeyedContext by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/213
- Workflow API by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/215
- Stop assuming input and output of invocations implement MessageLite by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/214
KeyedContext#clearAllby @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/217- Add
ctx.stateKeys()by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/219 - A bunch of fixes for the Workflow API by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/222
- Add API to sdk-testing to mount workflows. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/223
- Rename
UnkeyedContexttoContextby @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/220 - Fix suffix problem with workflow api. by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/225
- Add support for kotlin serialization by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/224
- Bump protocol version by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/226
- Handler API by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/227
- [Release] Bump to 0.8.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/232
New Contributors
- @AhmedSoliman made their first contribution in https://github.com/restatedev/sdk-java/pull/205
What’s Changed
- [Release] Bump to 0.7.0-SNAPSHOT by @github-actions in https://github.com/restatedev/sdk-java/pull/182
- Update meta API by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/186
- Fix logging context propagation by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/185
- Update SDK to use restatedev/service-protocol#58 by @tillrohrmann in https://github.com/restatedev/sdk-java/pull/189
- Log improvements by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/194
- Introduce deterministic random by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/178
- Use target/source compatibility rather than selecting a specific toolchain by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/197
- Check protocol version is supported by @slinkydeveloper in https://github.com/restatedev/sdk-java/pull/199
- [Release] Bump to 0.7.0 by @github-actions in https://github.com/restatedev/sdk-java/pull/200
See https://docs.restate.dev/quickstart/ for more detailsView on GitHub