这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1f8fa58
[BAEL-8844] Article code
psevestre Jan 14, 2025
159eae1
[BAEL-8844] Refactoring & Simplification
psevestre Jan 15, 2025
e37e06c
[BAEL-8844] Code cleanup
psevestre Jan 16, 2025
2657fbb
Merge remote-tracking branch 'origin/master'
psevestre Feb 2, 2025
4083fe7
[BAEL-9015] Initial Code
psevestre Feb 2, 2025
73ded3f
[BAEL-9015] Article code
psevestre Feb 13, 2025
a166a6f
Merge remote-tracking branch 'origin/master'
psevestre Feb 13, 2025
717a586
Merge remote-tracking branch 'origin/master'
psevestre Feb 18, 2025
59c972b
Persistence
psevestre Feb 20, 2025
9c01de3
[BAEL-9015] Peristence code cleanup
psevestre Feb 22, 2025
a9a3843
[BAEL-9015] LiveTest
psevestre Feb 23, 2025
2e9010e
Merge remote-tracking branch 'origin/master'
psevestre Feb 23, 2025
b735042
Merge remote-tracking branch 'origin/master'
psevestre Feb 25, 2025
d82ff69
Merge remote-tracking branch 'origin/master'
psevestre Sep 13, 2025
22837bb
[BAEL-9430] Initial commit
psevestre Sep 15, 2025
9e217da
[BAEL-9430] Initial commit
psevestre Sep 15, 2025
5bdd6a4
Merge remote-tracking branch 'origin/master'
psevestre Sep 16, 2025
f8ca09a
Move temporal module to the end
psevestre Sep 16, 2025
ed95c20
Moving project to saas-modules
psevestre Sep 16, 2025
15dd933
Revert main pom
psevestre Sep 16, 2025
5bcd5ee
Revert pom
psevestre Sep 16, 2025
67c3ada
Merge upstream
psevestre Sep 17, 2025
57e7c5f
Merge remote-tracking branch 'origin/master'
psevestre Sep 17, 2025
909994d
UnitTest failing
psevestre Sep 20, 2025
89197ef
Merge remote-tracking branch 'origin/master'
psevestre Sep 22, 2025
dea60f3
Code formatting
psevestre Sep 22, 2025
c0f326c
More code formatting
psevestre Sep 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions saas-modules/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<module>twilio</module>
<module>twilio-whatsapp</module>
<module>twitter4j</module>
<module>temporal</module>
</modules>

<build>
Expand Down
52 changes: 52 additions & 0 deletions saas-modules/temporal/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>temporal</artifactId>
<version>1.0</version>
<name>temporal</name>
<description>Temporal Workflow Engine Tutorial</description>

<parent>
<groupId>com.baeldung</groupId>
<artifactId>saas-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<dependencies>
<dependency>
<groupId>io.temporal</groupId>
<artifactId>temporal-sdk</artifactId>
<version>${temporal.version}</version>
</dependency>

<dependency>
<groupId>io.temporal</groupId>
<artifactId>temporal-testing</artifactId>
<version>${temporal.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<argLine>
--add-opens java.base/java.lang=ALL-UNNAMED
</argLine>
</configuration>
</plugin>
</plugins>
</build>

<properties>
<temporal.version>1.31.0</temporal.version>
</properties>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.baeldung.temporal.worker;

import io.temporal.worker.Worker;

/**
* Interface for registering Workflows and Activities to a Temporal Worker.
*/
public interface TemporalWorkerRegistrar {
void register(Worker worker);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.baeldung.temporal.workflows.hello;

import io.temporal.workflow.WorkflowInterface;
import io.temporal.workflow.WorkflowMethod;

@WorkflowInterface
public interface HelloWorkflow {
@WorkflowMethod
String hello(String person);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.baeldung.temporal.workflows.hello;

import io.temporal.client.WorkflowClient;
import io.temporal.serviceclient.WorkflowServiceStubs;
import io.temporal.worker.Worker;
import io.temporal.worker.WorkerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorkflowApplication {

private static final String QUEUE_NAME = "say-hello-queue";
private static final Logger log = LoggerFactory.getLogger(HelloWorkflowApplication.class);

public static void main(String[] args) {

log.info("Creating worker...");
var service = WorkflowServiceStubs.newLocalServiceStubs();
var client = WorkflowClient.newInstance(service);
var factory = WorkerFactory.newInstance(client);
var worker = factory.newWorker(QUEUE_NAME);

log.info("Registering workflows and activities...");
HelloWorkflowRegistrar.newInstance().register(worker);

log.info("Starting worker...");
factory.start();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.baeldung.temporal.workflows.hello;

import com.baeldung.temporal.workflows.hello.activities.SayHelloActivity;
import io.temporal.activity.ActivityOptions;
import io.temporal.workflow.Workflow;

import java.time.Duration;

public class HelloWorkflowImpl implements HelloWorkflow {

private final SayHelloActivity activity = Workflow.newActivityStub(
SayHelloActivity.class,
ActivityOptions.newBuilder()
.setStartToCloseTimeout(Duration.ofSeconds(10))
.build()
);

@Override
public String hello(String person) {
return activity.sayHello(person);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.baeldung.temporal.workflows.hello;

import com.baeldung.temporal.worker.TemporalWorkerRegistrar;
import com.baeldung.temporal.workflows.hello.activities.SayHelloActivityImpl;
import io.temporal.worker.Worker;

public class HelloWorkflowRegistrar implements TemporalWorkerRegistrar {

private HelloWorkflowRegistrar() {}

@Override
public void register(Worker worker) {
worker.registerWorkflowImplementationTypes(HelloWorkflowImpl.class);
worker.registerActivitiesImplementations(new SayHelloActivityImpl());
}

public static HelloWorkflowRegistrar newInstance() {
return new HelloWorkflowRegistrar();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.baeldung.temporal.workflows.hello.activities;

import io.temporal.activity.ActivityInterface;
import io.temporal.activity.ActivityMethod;

@ActivityInterface
public interface SayHelloActivity {
@ActivityMethod
String sayHello(String person);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.baeldung.temporal.workflows.hello.activities;

import io.temporal.activity.Activity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SayHelloActivityImpl implements SayHelloActivity {
private static final Logger log = LoggerFactory.getLogger(SayHelloActivityImpl.class);

public String sayHello(String person) {
log.info("Saying hello to {}", person);
return "Hello, " + person;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.baeldung.temporal.workflows.hellov2;

import com.baeldung.temporal.worker.TemporalWorkerRegistrar;
import com.baeldung.temporal.workflows.hellov2.activities.HelloV2ActivitiesImpl;
import io.temporal.worker.Worker;

public class HelloV2WorkerRegistrar implements TemporalWorkerRegistrar {


private HelloV2WorkerRegistrar() {
}

@Override
public void register(Worker worker) {
worker.registerWorkflowImplementationTypes(HelloWorkflowV2Impl.class);
worker.registerActivitiesImplementations(new HelloV2ActivitiesImpl());
}

public static HelloV2WorkerRegistrar newInstance() {
return new HelloV2WorkerRegistrar();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.baeldung.temporal.workflows.hellov2;

import io.temporal.workflow.WorkflowInterface;
import io.temporal.workflow.WorkflowMethod;

@WorkflowInterface
public interface HelloWorkflowV2 {
@WorkflowMethod
String hello(String person);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.baeldung.temporal.workflows.hellov2;

import com.baeldung.temporal.workflows.hellov2.activities.HelloV2Activities;
import io.temporal.activity.ActivityOptions;
import io.temporal.common.RetryOptions;
import io.temporal.workflow.Workflow;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.time.Duration;

public class HelloWorkflowV2Impl implements HelloWorkflowV2 {

private static final Logger log = LoggerFactory.getLogger(HelloWorkflowV2Impl.class);


private final HelloV2Activities activity = Workflow.newActivityStub(
HelloV2Activities.class,
ActivityOptions.newBuilder()
.setStartToCloseTimeout(Duration.ofSeconds(10))
.setRetryOptions(RetryOptions.newBuilder()
.setMaximumAttempts(3)
.setInitialInterval(Duration.ofSeconds(1))
.build())
.build()
);


@Override
public String hello(String person) {

var info = Workflow.getInfo();

log.info("Running workflow for person {}: id={}, attempt={}",
person,
info.getWorkflowId(),
info.getAttempt());

var step1result = activity.sayHello(person);
var step2result = activity.sayGoodbye(person);

return "Workflow OK";
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.baeldung.temporal.workflows.hellov2.activities;

import io.temporal.activity.ActivityInterface;
import io.temporal.activity.ActivityMethod;

@ActivityInterface
public interface HelloV2Activities {
@ActivityMethod
String sayHello(String person);
String sayGoodbye(String person);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.baeldung.temporal.workflows.hellov2.activities;

import io.temporal.activity.Activity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.atomic.AtomicLong;

public class HelloV2ActivitiesImpl implements HelloV2Activities {
private static final Logger log = LoggerFactory.getLogger(HelloV2ActivitiesImpl.class);

@Override
public String sayHello(String person) {
var info = Activity.getExecutionContext().getInfo();

log.info("Saying hello to {}, workflowId={}, attempt={}", person,
info.getWorkflowId(),
info.getAttempt());
return "Step1 - OK";
}

@Override
public String sayGoodbye(String person) {

var info = Activity.getExecutionContext().getInfo();

log.info("Saying goodbye to {}, workflowId={}, attempt={}", person,
info.getWorkflowId(),
info.getAttempt());

if ( info.getAttempt() == 1 ) {
throw new IllegalStateException("Simulating task failure");
}
else {
return "Step2 - OK";
}
}
}
16 changes: 16 additions & 0 deletions saas-modules/temporal/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<!-- Console appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>

<!-- Root logger -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>

</configuration>
Loading