diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..196afdd --- /dev/null +++ b/pom.xml @@ -0,0 +1,36 @@ + + 4.0.0 + org.flowable + flowable-cockroachdb-demo + 0.0.1-SNAPSHOT + + + 1.8 + 1.8 + + + + + org.flowable + flowable-engine + 6.0.0.RC1-SNAPSHOT + + + org.postgresql + postgresql + 9.4.1211.jre7 + + + org.slf4j + slf4j-api + 1.7.6 + + + org.slf4j + slf4j-log4j12 + 1.7.6 + + + + \ No newline at end of file diff --git a/src/main/java/org/flowable/Demo.java b/src/main/java/org/flowable/Demo.java new file mode 100644 index 0000000..489363c --- /dev/null +++ b/src/main/java/org/flowable/Demo.java @@ -0,0 +1,63 @@ +package org.flowable; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; +import java.util.Random; + +import org.activiti.engine.HistoryService; +import org.activiti.engine.ProcessEngine; +import org.activiti.engine.ProcessEngineConfiguration; +import org.activiti.engine.RepositoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.task.Task; + +/** + * @author Joram Barrez + */ +public class Demo { + + public static void main(String[] args) { + + ProcessEngine processEngine = ProcessEngineConfiguration + .createProcessEngineConfigurationFromResource("flowable.cfg.xml").buildProcessEngine(); + + RepositoryService repositoryService = processEngine.getRepositoryService(); + RuntimeService runtimeService = processEngine.getRuntimeService(); + TaskService taskService = processEngine.getTaskService(); + HistoryService historyService = processEngine.getHistoryService(); + + repositoryService.createDeployment().addClasspathResource("demo-process.bpmn").deploy(); + System.out.println("Process definitions deployed = " + repositoryService.createProcessDefinitionQuery().count()); + + Random random = new Random(); + for (int i=0; i<100; i++) { + Map vars = new HashMap<>(); + vars.put("var", random.nextInt(100)); + runtimeService.startProcessInstanceByKey("myProcess", vars); + } + + System.out.println("Process instances running = " + runtimeService.createProcessInstanceQuery().count()); + LinkedList tasks = new LinkedList<>(taskService.createTaskQuery().list()); + int taskCounter = 0; + while (!tasks.isEmpty()) { + Task task = taskService.createTaskQuery().taskId(tasks.pop().getId()).singleResult(); + if (task != null) { + taskService.complete(task.getId()); + + taskCounter++; + if (taskCounter % 10 == 0) { + System.out.println("Completed " + taskCounter + " tasks"); + } + } + tasks.addAll(taskService.createTaskQuery().list()); + } + + System.out.println("Finished all tasks. Finished process instances = " + + historyService.createHistoricProcessInstanceQuery().finished().count()); + + processEngine.close(); + } + +} diff --git a/src/main/java/org/flowable/delegate/MyJavaDelegate.java b/src/main/java/org/flowable/delegate/MyJavaDelegate.java new file mode 100644 index 0000000..5f8522f --- /dev/null +++ b/src/main/java/org/flowable/delegate/MyJavaDelegate.java @@ -0,0 +1,14 @@ +package org.flowable.delegate; + +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.delegate.JavaDelegate; + +public class MyJavaDelegate implements JavaDelegate { + + @Override + public void execute(DelegateExecution execution) { + Integer var = (Integer) execution.getVariable("var"); + execution.setVariable("var", var * 10); + } + +} diff --git a/src/main/resources/README.txt b/src/main/resources/README.txt new file mode 100644 index 0000000..e79a0a7 --- /dev/null +++ b/src/main/resources/README.txt @@ -0,0 +1,25 @@ +* Download latest CockroachDB tarball +* Untar and run: ./cockroachdb start +* ./cockroach start --store=node2 --port=26258 --http-port=8081 --join=localhost:26257 +* +* Admin UI is running on http://localhost:8080/ +* Create a database and a user: ./cockroachdb sql +* Execute following statements: + * CREATE DATABASE flowable; + * GRANT ALL ON DATABASE flowable TO maxroach; +* CockroachDB hasn't implemented the 'jdbc metadata' yet, which means the Flowable auto-schema creation won't work. +* Manually create the schema (simplified engine sql script, without foreign keys): + +sql=$(wget https://raw.githubusercontent.com/jbarrez/flowable-cockroachdb-demo/master/engine-schema.sql -q -O -) +./cockroach sql --database=flowable --user=maxroach -e "$sql" + + +--------------------------------------------------------------------------------------------------------- + Tested on CockroachDB with following version (./cockroachdb version): + +Build Tag: beta-20161027 +Build Time: 2016/10/27 13:34:56 +Platform: linux amd64 +Go Version: go1.7.3 +C Compiler: gcc 4.9.2 + \ No newline at end of file diff --git a/src/main/resources/demo-process.bpmn b/src/main/resources/demo-process.bpmn new file mode 100644 index 0000000..4b45cf5 --- /dev/null +++ b/src/main/resources/demo-process.bpmn @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PT5H + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/flowable.cfg.xml b/src/main/resources/flowable.cfg.xml new file mode 100644 index 0000000..d43455e --- /dev/null +++ b/src/main/resources/flowable.cfg.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100644 index 0000000..7a95dfb --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,11 @@ +log4j.rootLogger=INFO, CA + +# ConsoleAppender +log4j.appender.CA=org.apache.log4j.ConsoleAppender +log4j.appender.CA.layout=org.apache.log4j.PatternLayout +log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n + + +log4j.logger.org.apache.ibatis.level=INFO +log4j.logger.javax.activation.level=INFO +log4j.logger.org.activiti.engine.impl.agenda=INFO \ No newline at end of file