Skip to content

Instantly share code, notes, and snippets.

View paulparkinson's full-sized avatar

Paul Parkinson paulparkinson

View GitHub Profile
@paulparkinson
paulparkinson / ExampleOracleDatabaseSagaParticipant.java
Created March 23, 2024 22:47
Airline implementation of Oracle Database SagaParticipant
@Participant(name = "Airline")
/* @Participant declares the participant’s name to the saga framework */
public class Airline extends SagaParticipant {
/* Airline extends the SagaParticipant class */
@Request(sender = "TravelAgency")
/* The @Request annotates the method that handles incoming request from a given
sender, in this example the TravelAgency */
public String handleTravelAgencyRequest(SagaMessageContext
info) {
@paulparkinson
paulparkinson / ExampleOracleDatabaseSagaInitiator.java
Last active March 23, 2024 22:46
TravelAgencyController implementation of Oracle Database SagaInitiator
@Participant(name = "TravelAgency")
/* @Participant declares the participant’s name to the saga framework */
public class TravelAgencyController extends SagaInitiator {
/* TravelAgencyController extends the SagaInitiator class */
@LRA(end = false)
/* @LRA annotates the method that begins a saga and invites participants */
@POST("booking")
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public jakarta.ws.rs.core.Response booking(
@paulparkinson
paulparkinson / StartLRAExampleAppServices
Created September 14, 2019 02:54
LRA: start example application services
java -jar lra-coordinator-helidon/target/lra-coordinator-helidon-0.0.1-SNAPSHOT.jar
java -jar order/target/order-0.0.1-SNAPSHOT.jar
java -jar inventory/target/inventory-0.0.1-SNAPSHOT.jar
@paulparkinson
paulparkinson / lra-compensationrun-steps.sh
Last active September 14, 2019 02:24
LRA: steps to run compensation case
curl http://localhost:8091/inventory/removeInventory
curl http://localhost:8090/order/placeOrder
@paulparkinson
paulparkinson / lra-successrun-steps.sh
Last active September 14, 2019 02:23
LRA: steps to run success case
curl http://localhost:8091/inventory/addInventory
curl http://localhost:8090/order/placeOrder
@paulparkinson
paulparkinson / InventoryResource.java
Last active September 14, 2019 02:21
LRA participant: inventory service
@Path("/reserveInventoryForOrder")
@GET
@Produces(MediaType.APPLICATION_JSON)
@LRA(value = LRA.Type.MANDATORY, end = false)
public Response reserveInventoryForOrder(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) String lraId) {
//...
if(inventoryExists) return Response.ok().entity("inventorysuccess").build();
else return Response.ok().entity("inventoryfailure").build();
}
@paulparkinson
paulparkinson / lra-coordinator.pom
Last active September 14, 2019 02:16
LRA: coordinator pom
<dependency>
<groupId>org.jboss.narayana.rts</groupId>
<artifactId>lra-coordinator</artifactId>
<version>${narayana.lra.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jboss.narayana.rts</groupId>
<artifactId>lra-service-base</artifactId>
@paulparkinson
paulparkinson / OrderResource.java
Last active September 14, 2019 02:14
LRA participant: order service
@Path("/placeOrder")
@GET
@Produces(MediaType.APPLICATION_JSON)
@LRA(value = LRA.Type.REQUIRES_NEW)
public Response placeOrder(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) String lraId) {
//...
}
@Path("/cancelOrder")
@paulparkinson
paulparkinson / lraparticipantdependencies.pom
Last active September 13, 2019 20:24
LRA participant: pom dependencies
<dependency>
<groupId>org.eclipse.microprofile.lra</groupId>
<artifactId>microprofile-lra-api</artifactId>
<version>1.0-RC1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jboss.narayana.rts</groupId>
<artifactId>lra-client</artifactId>
<version>${narayana.lra.version}</version>
@paulparkinson
paulparkinson / lraparticipantannotationchecker.pom
Last active September 13, 2019 20:21
LRA participant annotation checker: pom
<plugin>
<groupId>org.jboss.narayana.rts</groupId>
<artifactId>lra-annotation-checker-maven-plugin</artifactId>
<version>${narayana.lra.version}</version>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>