Skip to content

Feat/add external task example #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 0 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,6 @@ cmake-build-*/
# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

Expand Down
1 change: 1 addition & 0 deletions .java-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
21.0
7 changes: 4 additions & 3 deletions bpmn-to-code.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#Mon Apr 14 09:49:47 CEST 2025
deliveryprocess=1
orderprocess=1
#Wed Apr 16 08:04:08 CEST 2025
deliveryprocess=1
external-orderprocess=1
orderprocess=1
36 changes: 30 additions & 6 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<version>3.3.10</version>
<relativePath/>
</parent>

<properties>
<java.version>21</java.version>
</properties>

<groupId>io.flowsquad.camunda.test</groupId>
<groupId>io.miragon.camunda.order</groupId>
<artifactId>camunda-order-test</artifactId>
<version>1.0.0-SNAPSHOT</version>

Expand All @@ -36,6 +36,12 @@
<version>7.23.0</version>
</dependency>

<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-external-task-client</artifactId>
<version>7.23.0</version>
</dependency>

<dependency>
<groupId>org.camunda.bpm.springboot</groupId>
<artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
Expand Down Expand Up @@ -65,7 +71,6 @@
<dependency>
<groupId>org.camunda.community.process_test_coverage</groupId>
<artifactId>camunda-process-test-coverage-junit5-platform-7</artifactId>
<!-- <artifactId>camunda-process-test-coverage-junit5-platform-8</artifactId> -->
<version>2.8.1</version>
<scope>test</scope>
</dependency>
Expand Down Expand Up @@ -102,9 +107,28 @@
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.8.22</version>
<scope>test</scope>
</dependency>

<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.38</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>3.0.23</version>
<type>pom</type>
<scope>test</scope>
</dependency>

</dependencies>


<build>
<plugins>
<plugin>
Expand All @@ -126,7 +150,7 @@
<baseDir>${project.basedir}</baseDir>
<filePattern>src/main/resources/*.bpmn</filePattern>
<outputFolderPath>${project.basedir}/src/main/java</outputFolderPath>
<packagePath>io.flowsquad.camunda.test</packagePath>
<packagePath>io.miragon.camunda.order.adapter.camunda</packagePath>
<outputLanguage>JAVA</outputLanguage>
<processEngine>CAMUNDA_7</processEngine>
</configuration>
Expand Down
12 changes: 0 additions & 12 deletions src/main/java/io/flowsquad/camunda/test/MailingService.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package io.flowsquad.camunda.test;
package io.miragon.camunda.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Generated by bpmn-to-code
package io.flowsquad.camunda.test;
package io.miragon.camunda.order.adapter.camunda;

import java.lang.String;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Generated by bpmn-to-code
package io.miragon.camunda.order.adapter.camunda;

import java.lang.String;

public final class ExternalOrderprocessProcessApiV1 {
public static final String PROCESS_ID = "external-orderprocess";

public static final class Elements {
public static final String Gateway_12tl2hf = "Gateway_12tl2hf";

public static final String EndEvent_OrderFullfilled = "EndEvent_OrderFullfilled";

public static final String EndEvent_CancellationSent = "EndEvent_CancellationSent";

public static final String Task_SendCancellation = "Task_SendCancellation";

public static final String Task_SendConfirmation = "Task_SendConfirmation";

public static final String Task_CheckAvailability = "Task_CheckAvailability";

public static final String Task_PrepareOrder = "Task_PrepareOrder";

public static final String StartEvent_1 = "StartEvent_1";
}

public static final class Messages {
public static final String Problem_Received = "Problem_Received";
}

public static final class TaskTypes {
public static final String Task_SendCancellation = "sendCancellation";

public static final String Task_SendConfirmation = "sendConfirmation";
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Generated by bpmn-to-code
package io.flowsquad.camunda.test;
package io.miragon.camunda.order.adapter.camunda;

import java.lang.String;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.flowsquad.camunda.test;
package io.miragon.camunda.order.adapter.camunda.delegate;

import io.miragon.camunda.order.application.ports.in.SendMailUseCase;
import org.camunda.bpm.engine.delegate.DelegateExecution;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -10,11 +11,11 @@
@Component
public class SendCancellationDelegate implements JavaDelegate {

private final MailingService mailingService;
private final SendMailUseCase sendMailUseCase;

@Autowired
public SendCancellationDelegate(MailingService mailingService) {
this.mailingService = mailingService;
public SendCancellationDelegate(SendMailUseCase sendMailUseCase) {
this.sendMailUseCase = sendMailUseCase;
}

@Override
Expand All @@ -23,7 +24,7 @@ public void execute(DelegateExecution delegateExecution) throws Exception {
final String customer = (String) delegateExecution.getVariable("customer");

//processing
mailingService.sendMail(customer);
sendMailUseCase.sendMail(customer);

//output
delegateExecution.setVariable("cancellationTimeStamp", Instant.now().getEpochSecond());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.miragon.camunda.order.adapter.camunda.worker;

import io.miragon.camunda.order.application.ports.in.SendMailUseCase;
import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.client.spring.annotation.ExternalTaskSubscription;
import org.camunda.bpm.client.task.ExternalTask;
import org.camunda.bpm.client.task.ExternalTaskHandler;
import org.camunda.bpm.client.task.ExternalTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import java.time.Instant;
import java.util.Map;

@Configuration
@Slf4j
@ExternalTaskSubscription("sendCancellation")
public class SendCancellationWorker implements ExternalTaskHandler {

private final SendMailUseCase sendMailUseCase;

@Autowired
public SendCancellationWorker(SendMailUseCase sendMailUseCase) {
this.sendMailUseCase = sendMailUseCase;
}

public void execute(
final ExternalTask externalTask,
final ExternalTaskService externalTaskService) {
//input
final String customer = externalTask.getVariable("customer");

//processing
sendMailUseCase.sendMail(customer);

//output
externalTaskService.complete(externalTask, Map.of("cancellationTimeStamp", Instant.now().getEpochSecond()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.miragon.camunda.order.adapter.camunda.worker;

import io.miragon.camunda.order.application.ports.in.SendMailUseCase;
import lombok.extern.slf4j.Slf4j;
import org.camunda.bpm.client.spring.annotation.ExternalTaskSubscription;
import org.camunda.bpm.client.task.ExternalTask;
import org.camunda.bpm.client.task.ExternalTaskHandler;
import org.camunda.bpm.client.task.ExternalTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;

import java.time.Instant;
import java.util.Map;

@Configuration
@Slf4j
@ExternalTaskSubscription("sendConfirmation")
public class SendConfirmationWorker implements ExternalTaskHandler {

private final SendMailUseCase sendMailUseCase;

@Autowired
public SendConfirmationWorker(SendMailUseCase sendMailUseCase) {
this.sendMailUseCase = sendMailUseCase;
}

public void execute(
final ExternalTask externalTask,
final ExternalTaskService externalTaskService) {
//input
final String customer = externalTask.getVariable("customer");

//processing
sendMailUseCase.sendMail(customer);

//output
externalTaskService.complete(externalTask, Map.of("confirmationTimeStamp", Instant.now().getEpochSecond()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.miragon.camunda.order.adapter.mail;

import io.miragon.camunda.order.application.ports.out.DeliverMailOutPort;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class MailServerAdapter implements DeliverMailOutPort {

@Override
public void deliverMail(String customer) {
log.info("deliverMail customer = " + customer);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.miragon.camunda.order.application.ports.in;

public interface SendMailUseCase {
void sendMail(String customer);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package io.miragon.camunda.order.application.ports.out;

public interface DeliverMailOutPort {
void deliverMail(String customer);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package io.miragon.camunda.order.application.service;

import io.miragon.camunda.order.application.ports.in.SendMailUseCase;
import io.miragon.camunda.order.application.ports.out.DeliverMailOutPort;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class SendMailService implements SendMailUseCase {

private final DeliverMailOutPort deliverMailOutPort;

@Override
public void sendMail(String customer) {
deliverMailOutPort.deliverMail(customer);
}

}
9 changes: 6 additions & 3 deletions src/main/resources/application.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
spring.datasource.url: jdbc:h2:file:./camunda-h2-database

camunda.bpm.admin-user:
id: demo
password: demo
camunda.bpm:
admin-user:
id: demo
password: demo
client:
base-url: http://localhost:8080/engine-rest
Loading