
driven-adapter.async-event-bus.reactive-direct-async-gateway.mustache Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of scaffold-clean-architecture Show documentation
Show all versions of scaffold-clean-architecture Show documentation
Gradle plugin to create a clean application in Java that already works, It follows our best practices!
package {{package}}.events;
{{#lombok}}
import lombok.AllArgsConstructor;
import lombok.extern.java.Log;
{{/lombok}}
{{#eda}}
import org.reactivecommons.api.domain.Command;
import org.reactivecommons.async.api.AsyncQuery;
import org.reactivecommons.async.api.DirectAsyncGateway;
import org.reactivecommons.async.impl.config.annotations.EnableDirectAsyncGateway;
import reactor.core.publisher.Mono;
import io.cloudevents.CloudEvent;
import io.cloudevents.core.builder.CloudEventBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.util.UUID;
import java.net.URI;
import java.time.OffsetDateTime;
{{/eda}}
{{^eda}}
import org.reactivecommons.api.domain.Command;
import org.reactivecommons.async.api.AsyncQuery;
import org.reactivecommons.async.api.DirectAsyncGateway;
import org.reactivecommons.async.impl.config.annotations.EnableDirectAsyncGateway;
import reactor.core.publisher.Mono;
import java.util.UUID;
{{/eda}}
{{#lombok}}
import java.util.logging.Level;
{{/lombok}}
{{#lombok}}
@Log
@AllArgsConstructor
{{/lombok}}
@EnableDirectAsyncGateway
public class ReactiveDirectAsyncGateway /* implements Gateway from domain */ {
public static final String TARGET_NAME = "cleanArchitecture";// refers to remote spring.application.name property
public static final String SOME_COMMAND_NAME = "some.command.name";
public static final String SOME_QUERY_NAME = "some.query.name";
private final DirectAsyncGateway gateway;
{{#eda}}
private ObjectMapper om = new ObjectMapper();
{{/eda}}
{{^lombok}}
public ReactiveDirectAsyncGateway(DirectAsyncGateway gateway) {
this.gateway = gateway;
}
{{/lombok}}
public Mono runRemoteJob(Object command/*change for proper model*/) {{#eda}}throws JsonProcessingException{{/eda}} {
{{#lombok}}
log.log(Level.INFO, "Sending command: {0}: {1}", new String[]{SOME_COMMAND_NAME, command.toString()});
{{/lombok}}
{{#eda}}
CloudEvent commandCloudEvent = CloudEventBuilder.v1() //
.withId(UUID.randomUUID().toString()) //
.withSource(URI.create("https://spring.io/foos"))//
.withType(SOME_COMMAND_NAME) //
.withTime(OffsetDateTime.now())
.withData("application/json", om.writeValueAsBytes(command))
.build();
return gateway.sendCommand(new Command(SOME_COMMAND_NAME, UUID.randomUUID().toString(), commandCloudEvent),
TARGET_NAME);
{{/eda}}
{{^eda}}
return gateway.sendCommand(new Command<>(SOME_COMMAND_NAME, UUID.randomUUID().toString(), command),
TARGET_NAME);
{{/eda}}
}
public Mono
© 2015 - 2025 Weber Informatics LLC | Privacy Policy