Giter Club home page Giter Club logo

camunda / camunda-bpm-platform Goto Github PK

View Code? Open in Web Editor NEW
4.0K 173.0 1.5K 158.3 MB

Flexible framework for workflow and decision automation with BPMN and DMN. Integration with Quarkus, Spring, Spring Boot, CDI.

Home Page: https://camunda.com/

License: Apache License 2.0

HTML 1.87% Shell 0.02% Java 88.96% Groovy 0.05% Python 0.04% Ruby 0.04% JavaScript 5.79% Batchfile 0.02% CSS 0.01% FreeMarker 2.80% SQLPL 0.09% Less 0.31% Fluent 0.01% XSLT 0.01%
camunda-bpm-platform bpm process-engine java camunda-engine dmn cmmn workflow bpmn

camunda-bpm-platform's Introduction

Camunda Platform 7 - The open source BPMN platform

Maven Central camunda manual latest License Forum

Camunda Platform 7 is a flexible framework for workflow and process automation. Its core is a native BPMN 2.0 process engine that runs inside the Java Virtual Machine. It can be embedded inside any Java application and any Runtime Container. It integrates with Java EE 6 and is a perfect match for the Spring Framework. On top of the process engine, you can choose from a stack of tools for human workflow management, operations and monitoring.

Components

Camunda Platform 7 provides a rich set of components centered around the BPM lifecycle.

Process Implementation and Execution

  • Camunda Engine - The core component responsible for executing BPMN 2.0 processes.
  • REST API - The REST API provides remote access to running processes.
  • Spring, CDI Integration - Programming model integration that allows developers to write Java Applications that interact with running processes.

Process Design

Process Operations

  • Camunda Engine - JMX and advanced Runtime Container Integration for process engine monitoring.
  • Camunda Cockpit - Web application tool for process operations.
  • Camunda Admin - Web application for managing users, groups, and their access permissions.

Human Task Management

  • Camunda Tasklist - Web application for managing and completing user tasks in the context of processes.

And there's more...

  • bpmn.io - Toolkits for BPMN, CMMN, and DMN in JavaScript (rendering, modeling)
  • Community Extensions - Extensions on top of Camunda Platform 7 provided and maintained by our great open source community

A Framework

In contrast to other vendor BPM platforms, Camunda Platform 7 strives to be highly integrable and embeddable. We seek to deliver a great experience to developers that want to use BPM technology in their projects.

Highly Integrable

Out of the box, Camunda Platform 7 provides infrastructure-level integration with Java EE Application Servers and Servlet Containers.

Embeddable

Most of the components that make up the platform can even be completely embedded inside an application. For instance, you can add the process engine and the REST API as a library to your application and assemble your custom BPM platform configuration.

Contributing

Please see our contribution guidelines for how to raise issues and how to contribute code to our project.

Tests

To run the tests in this repository, please see our testing tips and tricks.

License

The source files in this repository are made available under the Apache License Version 2.0.

Camunda Platform 7 uses and includes third-party dependencies published under various licenses. By downloading and using Camunda Platform 7 artifacts, you agree to their terms and conditions. Refer to https://docs.camunda.org/manual/latest/introduction/third-party-libraries/ for an overview of third-party libraries and particularly important third-party licenses we want to make you aware of.

camunda-bpm-platform's People

Contributors

berndruecker avatar danielkelemen avatar deivarayanazhagappan avatar hawky-4s- avatar ingorichtsmeier avatar jangalinski avatar koevskinikola avatar marstamm avatar mboskamp avatar menski avatar meyerdan avatar mschoe avatar nikku avatar osteinhauer avatar pazolka avatar polenz avatar psavidis avatar rbraeunlich avatar romansmirnov avatar saig0 avatar sdorokhova avatar sebastianstamm avatar siffogh avatar tasso94 avatar thorbenlindhauer avatar tmetzke avatar venetrius avatar yanavasileva avatar zelldon avatar zeropaper avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

camunda-bpm-platform's Issues

EL resolution does not consider method arguments

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4063
Reporter @ThorbenLindhauer
Has restricted visibility comments false

EL resolver isn't able to match methods by parameters.

Example:
Have a bean name "bean" with two methods #doSomething(String string) and #doSomething(Integer integer).
Resolution then depends on the order the methods are declared in the class and not on the type of the argument.

Links:

Using the API I can activate/suspend process instances including their child instances

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3337
Reporter @romansmirnov
Has restricted visibility comments false

User Story (Required on creation):

When having a hierarchy of process instances, it is convenient to suspend all instances at once to prevent any further progress in the overall process

Functional Requirements (Required before implementation):

  • The suspend/activate APIs have flag to cascade to any sub process instances (including grand-children etc.)
  • It also works for the corresponding batches

Technical Requirements (Required before implementation):

Limitations of Scope (Optional):

Hints (Optional):

Links:

Filter variable values using HistoricTaskInstanceQuery

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4317
Reporter 4Ewaa61
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments true

I would like to filter for variable values using the HistoricTaskInstanceQuery with the same operators as provided by the TaskQuery.

  • taskVariableValueEquals
  • taskVariableValueGreaterThan
  • taskVariableValueGreaterThanOrEquals
  • taskVariableValueLessThan
  • taskVariableValueLessThanOrEquals
  • taskVariableValueLike
  • taskVariableValueNotEquals

Links:

Global ruby variables are shared between all scripts

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2487
Reporter jOwzX7v
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • if one process creates a variable and contains a ruby script task after that the variable should not be available in another process instance with a ruby script task

Compare Spin commit:
camunda/camunda-spin@4a02388

Links:

I can compensate subprocess with compensation boundary event and inner compensation handler

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4314
Reporter JpBx7vb
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Given:

  • a subprocess with
    • an inner activity with compensation handler (e.g. compensation boundary event)
    • a compensation boundary event on subprocess
  • a throwing compensation event for subprocess (activityRef = subprocess)

Then:

  • execute the subprocess and
  • throw compensation event

When:

  • the compensation handler attached to subprocess and
  • the compensation handler of inner activity should be triggered

---

Note:

  • current behavior: only compensation handler attached to subprocess is triggered

Links:

Model API cannot set values to null

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4178
Reporter rP62zaw
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

See the test case below. It fails with this exception:

org.camunda.bpm.engine.ProcessEngineException: Delegate expression  did neither resolve to an implementation of interface org.camunda.bpm.engine.impl.pvm.delegate.ActivityBehavior nor interface org.camunda.bpm.engine.delegate.JavaDelegate
	at org.camunda.bpm.engine.impl.bpmn.behavior.ServiceTaskDelegateExpressionActivityBehavi

As you can see a "ServiceTaskDelegateExpressionActivityBehavior" was choosen - even if I set

    serviceTask.setCamundaDelegateExpression(null);

I digged a bit into it and found that this results in havind the

   delegateExpression=""

Hence an empty string instead of null.

Not sure if this is a bug in the ModelAPI or if it should better be checked for emptry string in
https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/java/org/camunda/bpm/engine/impl/bpmn/parser/BpmnParse.java#L1697
as done with expressions as well. https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/java/org/camunda/bpm/engine/impl/bpmn/parser/BpmnParse.java#L1703

 @Test
  public void testModelApiBug() {
    BpmnModelInstance modelInstance = Bpmn.createEmptyModel();
    Definitions definitions = modelInstance.newInstance(Definitions.class);
    definitions.setTargetNamespace("http://camunda.org/examples");
    modelInstance.setDefinitions(definitions);
    org.camunda.bpm.model.bpmn.instance.Process process = modelInstance.newInstance(org.camunda.bpm.model.bpmn.instance.Process.class);
    process.setId("test");
    definitions.addChildElement(process);

    StartEvent startEvent = modelInstance.newInstance(StartEvent.class);
    startEvent.setAttributeValue("id", "startEvent1", true);   
    process.addChildElement(startEvent);

    ServiceTask serviceTask = modelInstance.newInstance(ServiceTask.class);
    serviceTask.setAttributeValue("id", "serviceTask1", true);   
    serviceTask.setCamundaClass(null);
    serviceTask.setCamundaDelegateExpression(null);
    serviceTask.setCamundaExpression("#{true}"); // Noop
    process.addChildElement(serviceTask);
    
    createSequenceFlow(process, startEvent, serviceTask);
    
    repositoryService().createDeployment().addModelInstance("test.bpmn", modelInstance).deploy();
    runtimeService().startProcessInstanceByKey("test");
  }
  
  public SequenceFlow createSequenceFlow(org.camunda.bpm.model.bpmn.instance.Process process, FlowNode from, FlowNode to) {
    String identifier = from.getId() <ins> "-" </ins> to.getId();
    SequenceFlow sequenceFlow = createElement(process, identifier, SequenceFlow.class);
    process.addChildElement(sequenceFlow);
    sequenceFlow.setSource(from);
    from.getOutgoing().add(sequenceFlow);
    sequenceFlow.setTarget(to);
    to.getIncoming().add(sequenceFlow);
    return sequenceFlow;
  }
  protected <T extends BpmnModelElementInstance> T createElement(BpmnModelElementInstance parentElement, String id, Class<T> elementClass) {
    T element = parentElement.getModelInstance().newInstance(elementClass);
    element.setAttributeValue("id", id, true);
    parentElement.addChildElement(element);
    return element;
  }

Links:

I can parse throwing compensation event with activityRef independent from order in bpmn

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4315
Reporter JpBx7vb
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Given:

  • process definition with throwing compensation event for specific activity (e.q. with attribute activityRef)
  • the position of the activity referenced by throwing compensation event is after the throwing event in bpmn file

When I parse the process definition, then the deployment failed caused by referenced activity not found.

Links:

Parallel and inclusive Gateway not executing according to BPMN spec

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3472
Reporter wyV3oL0
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments true

The execution of the Parallel Gateway is not according to the BPMN 2.0 specification.

The operational semantics in the spec document formal/2011-01-03 on page 434 are defined like this:

"The Parallel Gateway is activated if there is at least one token on each incoming Sequence Flow.
The Parallel Gateway consumes exactly one token from each incoming Sequence Flow and produces exactly one token at each outgoing Sequence Flow.
If there are excess tokens at an incoming Sequence Flow, these tokens
remain at this Sequence Flow after execution of the Gateway."

To my understanding this means that in order to process a token needs to arrive from each of the incoming Sequence Flows. However, if you have a look at the attached BPMN model. And execute the tasks in the following way:
Complete "Task 1"
Complete "Task 1"
Parallel Gateway is activated, but there are tokens only on Sequence Flow "S1" and not on Sequence Flow "S2".

I could not find in the specification what should happen if there are 2 tokens on each Sequence Flow. Perhaps another "Final Task" should be created.

I have also created a test that can reproduce the steps.

Links:

I can set the result of camunda:expression as local variable

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2951
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • I is possible to set the result of camunda:expression as local variable in "servicetask-like" tasks

Links:

Save search queries in Cockpit

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4171
Reporter 3vpg3w7
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

User Problem

Cockpit: ย the save button in e.g. "Search process instances" does not save the search filter and gets erased when the browser's local storage is erased.

Use Case

  • As a business user, I want to be able to store my search so that I can build complex search queries and reuse them.
  • As a business user, I can save my search queries in Cockpit and use them at any time (something like a query repository)
  • As a system admin, I can give other users and groups access to my saved search queries

Links:

Race-Condition on server start

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3220
Reporter @romansmirnov
Has restricted visibility comments false

Situation:

The engine is configured with the property "jobExecutorDeploymentAware = true".

A process is deployed to a process engine and the process looks like this:

StartEvent --> ServiceTask(async=true; delegateExpression="${anExpression}" --> EndEvent

There exists a Job for the ServiceTask.

On AS start:
The job will be acquired and executed but a context switch into the process application does not happen, so that the expression cannot be resolved.

Problem:

  • It seems that the "JobAcquisition-Thread" is able to acquire the job because the "Deployer-Thread" put the deployment id into the list of "registered deployments" after a successful (re-)deployment.
  • But the "JobExecutor-Thread" cannot retrieve the correspoding ProcessApplicationReference by deployment id, because the "JobExecutor-Thread" does not see the actual mapping of deploymentId <-> ProcessApplicationReference

Links:

MySQL primary key index deadlock on parallel updates

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3318
Reporter @ThorbenLindhauer
Has restricted visibility comments false

With MySQL and InnoDB, it can happen that when updating a table (such as ACTRUEXECUTION) in parallel (e.g. in a process with a parallel gateway and non-exclusive jobs) a deadlock on the primary key index is detected. In this case one of the involved transactions rolls back and a job retry is performed.

Notes:

  • appears only on MySQL
  • quite unlikely to occur
  • it is not sure if we can fix this in the engine other than by making a job retry since this does not seem to be a problem of SQL statement execution order (or the correct execution order is much less obvious here)

See: https://groups.google.com/forum/#!topic/camunda-bpm-users/8fUx40_PhAs
Code reproducing the issue: https://github.com/druid77/camunda_unittests

The exception message:

    1. Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
    1. The error may involve org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity.updateExecution-Inline
    1. The error occurred while setting parameters
    1. SQL: update ACT*RU_EXECUTION set       REV_ = ?,       PROC_DEF_ID_ = ?,       ACT_ID_ = ?,       ACT_INST_ID_ = ?,       IS_ACTIVE_ = ?,       IS_CONCURRENT_ = ?,       IS_SCOPE_ = ?,       IS_EVENT_SCOPE_ = ?,       PARENT_ID_ = ?,       SUPER_EXEC_ = ?,       SUSPENSION_STATE_ = ?,       CACHED_ENT_STATE* = ?     where ID(String), 1(Integer), locking:1:1203(String), 1208(String), 1201(String), 1222(String), 3(Integer)  

The exception is thrown when the statements are flushed.

Links:

taskform values get lost after tab-change

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4000
Reporter wmpZ2ng
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Reproduce:

  • select a task in tasklist (with an embedded form)
  • enter some value in a field of the embedded form
  • change the tab (i.e. to diagram)
  • change back to embedded form

Problem

  • values are lost and fields are blank again

Expected

  • values are still in the fields

Links:

In JBoss AS, I can enhance the classpath of the process-engine module in standalone.xml

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1665
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

When enhancing the process engine through plugins, the plugins need to added as system modules to the JBoss AS modules directory and the module dependencies of the process engine module need to be adjusted in order to create a module dependency from the process engine module to the plugin module.

This is inconvenient since the process engine module's module.xml file needs to be updated manually by the user/ customer with each new release of camunda BPM.

An alternative would be to provide the possibility to enhance the process engine classpath with additional modules which are added through configuration. Example:

<subsystem xmlns="urn:org.camunda.bpm.jboss:1.1">
    <process-engines>
        <process-engine name="default" default="true">
            <datasource>java:jboss/datasources/ProcessEngine</datasource>
            <history-level>full</history-level>
            <properties>
                ...
            </properties>
            <plugins>
                <plugin>
                    <class>de.drx.bpm.processengineplugin.JaxbVariableTypePlugin</class>
===>                <module>
                         <name>de.drx.bpm.processengineplugin</name>
                         <slot>1.0</slot> <!-- optional -->
                    </module>
                </plugin>
            </plugins>
        </process-engine>
    </process-engines>

AT:

  • provide a possibility to enhance the process-engine classpath through custom modules configured through the management model

Links:

I can query for tasks by execution variable

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2425
Reporter 3vpg3w7
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • I can query for tasks by execution variable:

taskService.createTaskQuery()
.executionVariableEquals()

Links:

Failed deployment are still added to the deployment cache

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4250
Reporter jOwzX7v
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

If a deployment fails the process definition is still added to the deployment cache.

Test case which is failing without workaround:
org.camunda.bpm.engine.test.bpmn.event.message.MessageStartEventTest#testSameMessageNameFails

Links:

Process definitions in Start process menu in Tasklist are not consistently sorted over multiple pages

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4073
Reporter 3vpg3w7
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Steps to Reproduce:

Precondition: >15 Process Definitions deployed

  • Open "Start Process" menu in Tasklist
  • Open second page

Problem:

  • Process definitions are sorted alphabetically per page, however not cumulatively over multiple pages.
  • Displayed definitions are sorted per default by ID, but since we display the name (if exists), this sorting is not obvious to the user

Expected behavior:

  • Process definitions are consistently sorted over multiple pages

Links:

As Tasklist User, I can see the business key in the list of tasks

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3030
Reporter o0Xa6X6
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • upon filter configuration, user hat option to show business key in list of tasks (similar to process variables)

Hi guys,

In our usage it would be useful to see the business key associated with the task in the tasklist. Hence if a user is working on a particular process instance - eg customer order with a business key reference, they can go into tasklist and select the task relevant to the reference. I assume that the new filters would help support this, but just a suggestion that displaying business key in the task list view could be a useful feature - hence I can select the task directly rather than having to refine my filter.

Links:

Sorting assertions does not work properly in Rest Api testsuite

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3605
Reporter @romansmirnov
Has restricted visibility comments false

Problem:
For example AbstractHistoricActivityInstanceRestServiceQueryTest#testSortingParameters():

InOrder inOrder = Mockito.inOrder(mockedQuery);
executeAndVerifySorting("activityInstanceId", "asc", Status.OK);
inOrder.verify(mockedQuery).orderByHistoricActivityInstanceId();
inOrder.verify(mockedQuery).asc();

inOrder = Mockito.inOrder(mockedQuery);
executeAndVerifySorting("activityInstanceId", "desc", Status.OK);
inOrder.verify(mockedQuery).orderByHistoricActivityInstanceId();
inOrder.verify(mockedQuery).desc();
  1. execute the corresponding test: the test case has been executed successful
  2. adjust for example the following line
inOrder.verify(mockedQuery).desc();

into

inOrder.verify(mockedQuery).asc();

(change ....desc() into ....asc())

  1. execute the corresponding test case once again: the test case has been executed successful.

-> The case should fail in such a case.

Hint:
The mockedQuery must be re-initiated.

Links:

Provide proper error messages for user create/edit and group create/edit if unique constraints are violated

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1147
Reporter 8Br96zk
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Currently the engine does not throw a concise error message when unique ids are violated, e.g. a new user or group with an already existing user or group name should be added.

Nor does the engine check whether the names are already occupied prior to a create / update.

Fix this behavior and provide a better error message.

Links:

User should be logged out when successfully deleting own account

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3601
Reporter BOqXk3o
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Environment (Required on creation)

  • All webapp setups

Description (Required on creation; please attach any relevant screenshots, stacktraces, log files, etc. to the ticket)

  • When a user is deleted, their related sessions should be destroyed.

Steps to reproduce (Required on creation)

  • log in with jonny1
  • go to admin -> user -> delete jonny1 account

Observed Behavior (Required on creation)

  • After that jonny1 is still able to perform manipulations and keeps logged in.

Expected behavior (Required on creation)

  • as soon as the user account is deleted, it should be logged out

Root Cause (Required on prioritization)

  • Deleting users and session management are currently decoupled.
  • Once a session is active, it is not validated again if the user still exists.

Solution Ideas

  • It is not possible to build this in a call-back like fashion, i.e. when the user is deleted, also destroy the session. Reasons:
    • The engine that implements the user deletion API is decoupled from the webapps (e.g. a user can also be deleted on a different cluster node)
    • Identity providers are pluggable, out of the box we support the engine database and LDAP. It's impossible to have a generic callback mechanisms from these providers into Camunda.
  • Instead, we can validate if the user still exists whenever they make a request
    • To avoid overload on the identity provider, it should be configurable in the webapps in which intervals the validation is performed
    • If the interval is set to 0, then every request validates the existence of the user. This will provide the maximum safety that the user is logged out as soon as possible after the user is deleted.
    • The solution needs to work concurrently, i.e. if multiple requests are made in parallel for the same user, it should only validate once
    • The default value should be set so that we do not expect a massive performance impact for users
    • The security guide informs how to configure the behavior and what the tradeoffs are when choosing a value

Hints

Links

Breakdown

Tasks

  1. scope:webapp type:subtask version:7.16.18 version:7.17.11 version:7.18.6 version:7.19.0 version:7.19.0-alpha4
    tasso94
  2. scope:webapp type:subtask version:7.16.18 version:7.17.11 version:7.18.6 version:7.19.0 version:7.19.0-alpha4
    tasso94
  3. scope:documentation scope:webapp type:subtask version:7.16.18 version:7.17.11 version:7.18.6 version:7.19.0 version:7.19.0-alpha4
    tasso94

Dev2QA handover

  • Does this ticket need a QA test and the testing goals are not clear from the description? Add a Dev2QA handover comment

A comment's full text content is serialized with the default platform encoding

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3035
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

CommentEntity#getFullMessageBytes and CommentEntity#setFullMessageBytes (see https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/java/org/camunda/bpm/engine/impl/persistence/entity/CommentEntity.java#L54-L60) use the default platform encoding to serialize a String as a byte array. Should use the engine's default encoding instead.

Links:

As cockpit user, I can see at which date a Process Instance will be suspended/activated

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1560
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • If there exists a Job which will cause a Process Instance to be suspended/activated at a given date, I can see an information box in the process instance view

Links:

Compensation of multi instance subprocess can not access element variable

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4268
Reporter JpBx7vb
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Given:

  • a process definition with an embedded subprocess that is marked as multi instance and has a element variable
  • the subprocess contains tasks with compensation handlers (on boundary event or compensation event subprocess)
  • the tasks and the compensation handlers access the element variable

When:

  • the subprocess is executed and a compensation event is thrown

Then:

  • the compensation handler can not access the element variable

AT:

  • fix the test case org.camunda.bpm.engine.test.bpmn.event.compensate.CompensateEventTest.testCompensateMiSubprocessVariableSnapshots() -> should actual fail but still run
  • enable test case org.camunda.bpm.engine.test.bpmn.event.compensate.CompensateEventTest.FAILING_testCompensateMiSubprocessVariableSnapshotOfElementVariable()

Links:

Multiline Task name not found with Task Name Filter

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2784
Reporter @mschoe
Has restricted visibility comments false

Preconditions:
Invoice process running --> Prepare Bank Transfer Task selected
Distro with H2 DB

Reproduce:

  • create filter criteria in tasklist 'Task NAME' = 'Prepare Bank Transfer'
    --> Task cannot be found

In H2 DB the task name is saved like this
Prepare
Bank
Transfer

Maybe special characters cause the problem

Links:

Use root element prefix instead of add local namespace uri

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3191
Reporter jOwzX7v
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

If the root element of the XML uses a prefixed namespace for example
<bpmn2:definitions /> newly created elements by modelINstance.newInstance() doesn't reuse the namespace prefix and
add a local namespace uri to the element like

AT:

  • prefixes of root elements are correctly recognized and handled
  • there should be tests for different namespace/prefix scenarios

Note:

  • fix will probably involve org.camunda.bpm.model.xml.impl.util.XmlQName#determinePrefixAndNamespaceUri

Links:

Getting ProcessEngineException when using currentUserGroups() expression

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3841
Reporter Qy4xrJB
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

As also described in this forum post: https://groups.google.com/forum/#!topic/camunda-bpm-users/xk3utUlZvew

A ProcessEngineException occurs when I try to get all tasks assigned by candidateGroups to the current authenticated user.
Please note: The current authenticated user has no (zero) groups.

Expected behavior is a normal (http 200) response with an empty result list.

Here is the rest-call: /engine-rest/task?candidateGroupsExpression=%24{currentUserGroups()}

The JSON error response:
{"type":"ProcessEngineException","message":"Unable to invoke method 'taskCandidateGroupIn' on class 'org.camunda.bpm.engine.impl.TaskQueryImpl'"}

This is the stack trace from the engine:
Caused by: org.camunda.bpm.engine.ProcessEngineException: Candidate group list is empty
at sun.reflect.GeneratedConstructorAccessor109.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.camunda.bpm.engine.impl.util.EnsureUtil.generateException(EnsureUtil.java:283)
at org.camunda.bpm.engine.impl.util.EnsureUtil.ensureNotEmpty(EnsureUtil.java:115)
at org.camunda.bpm.engine.impl.util.EnsureUtil.ensureNotEmpty(EnsureUtil.java:108)
at org.camunda.bpm.engine.impl.util.EnsureUtil.ensureNotEmpty(EnsureUtil.java:98)
at org.camunda.bpm.engine.impl.TaskQueryImpl.taskCandidateGroupIn(TaskQueryImpl.java:288)

Links:

Execution variable scope shared between delegate executions

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2869
Reporter ZPa2o4N
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

When invoking a delegate multiple times in different tasks of a process, the delegateExecution will return values from preceding calls, despite that the field has not been set.

In example:

public class DemoDelegate implements JavaDelegate {

    // set in first task
    Expression firstField;
    // set in a different task
    Expression secondField;

    public void execute(DelegateExecution execution) {

        String firstString = (String) firstField.getValue(execution);
        String secondString = (String) secondField.getValue(execution);
        
        if (secondString != null) {
            assert(firstString == null);
        }
    }
}

The first task sets the firstField, while second task does not have a camunda:field tag for it. Still, during any following tasks of the same process, the field will return the value from the first invocation.

Links:

Example for how to use Camunda Mapping files in custom Mybatis Session Factory

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3256
Reporter @mschoe
Has restricted visibility comments true

AT:

  • there is an example showing how to re-use and extend Camunda Mappings in a Custom Mybatis session factory

Links:

"Catch All" Task- and ExecutionListener

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1164
Reporter Q2R5dDB
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

To avoid adding the same Listener 3 times to the bpmn model, it would be nice to register one Listener to event "*" or "all". It is then an easy exercise to dispatch in the notify() method according to the eventName.

Links:

As cockpit user, I can see at which date a Process Definition will be suspended/activated

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1559
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • If there exists a Job which will cause a Process Definition to be suspended/activated at a given date, I can see an information box in the process definition view

Links:

BpmnError in Script IOMapping isn't handled

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3864
Reporter jOwzX7v
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

If a BpmnError is thrown in a script which is used as input/output mapping the error isn't handled correctly.

See failing test cases:
aed920a

Links:

Cockpit - View required to add custom instance history plugins

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2956
Reporter o0Xa6X6
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

I have a custom plugin which displays historical details about a process instance. It is desirable to add this to the process instance view, however if the instance is complete or cancelled, the process instance view is 'unreachable' as there seems to be code which ensures the process instance is still current.

Hence could you either:

  • Enable the process instance view under all circumstances (current, complete, not found) so I can add my own plugins into this view or
  • Enable a historical instance view again where I can install my own plugins for showing historic instance detail.

Links:

ACT_HI_VARINST.VAR_TYPE_ length not consistent with ACT_RU_VARIABLE.TYPE_

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4295
Reporter @ThorbenLindhauer
Has restricted visibility comments false

ACTRU_VARIABLE.TYPE_ is declared as a 255 varchar on all databases, while ACT_HI_VARINST.VAR_TYPE has a limit of 100.

This is not an urgent issue since variable types are an internal construct and the issue is easy for users to work around when they build their own types. Yet it is an inconsistency that effectively reduces the maximum type name length to 100 characters.

Links:

execution.setVariable() : Pre-validate size of variable before DB exception occurs

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2601
Reporter kr7yKXR
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

If setVariable is called with a value that's too large to fit in the database, Camunda throws an exception (DB exception) when it gets around to flushing state to the database (at a commit point).

This flush may occur very far (in time and tasks) from the time setVariable was called.

Perhaps the execution.setVariable() method should do an upfront check of the size of the variable, to validate that it doesn't exceed the size the database can hold. This way an exception can be thrown/caught before the final DB transaction that tries to write the state to the database.

Not sure if this is a good solution, but something to think about.

Also, looks like there's a workaround to setting large variables (e.g. ByteArray), but it would be cool if large values could be transparently stored in ByteArray (or another implementation of large storage). That way the explicit conversion by the client wouldn't have to be done when getting value:

see:
https://groups.google.com/forum/#!topic/camunda-bpm-users/B8I47n28cns

Links:

Calling subsequent message catch events fails

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2892
Reporter OJgkWq1
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Sending messages to two subsequent message catch events (see situation in attachment) does not work.

In my implementation, I query the waiting execution in the upper hand process using the process instance id and the message name and then call org.camunda.bpm.engine.RuntimeService.messageEventReceived(String, String)

I the situation of the second throw event, the query does not find a waiting execution.

Links:

Expose CdiArtifactFactory in ProcessApplication API

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2531
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • I can use camunda:class="org.my.app.Customer" to resolve a CDI bean from a process application

Links:

FormService.submitStartForm sets process variables too late (influences Tasklist Generic Forms)

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2101
Reporter rP62zaw
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Given:

  • a process definition with a listener on process-start (see below)
  • Starting the process instance via FormService.submitStartForm now somehow sets the "FormProperties" too late - so the listener on the process-start event does not yet have it.

Hint: Starting the process instance via RuntimeService.startProcessInstance works as expected.

If you add the listener to the first transition the variables are set in both cases.

--------------
<bpmn2:process id="camunda-demo" name="demoprocess" isExecutable="true">
bpmn2:extensionElements
<camunda:executionListener class="com.camunda.demo.LoggerListener" event="start"/>
</bpmn2:extensionElements>
---------------
public class LoggerListener implements ExecutionListener {

private final Logger LOGGER = Logger.getLogger(LoggerDelegate.class.getName());

@OverRide
public void notify(DelegateExecution execution) throws Exception {
LOGGER.info("\n\nVariables:");

Map<String, Object> variables = execution.getVariables();
for (String key : variables.keySet()) {
  System.out.println("  " <ins> key </ins> " = " + variables.get(key));
}

}

}

---
@deployment(resources = "process.bpmn")
public void testParsingAndDeployment() {
// nothing is done here, as we just want to check for exceptions during deployment

// processEngine.getRuntimeService().startProcessInstanceByKey("camunda-demo", Collections.<String, Object>singletonMap("test", "hallo"));
String id = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionKey("camunda-demo").singleResult().getId();
processEngine.getFormService().submitStartForm(id, Collections.<String, Object>singletonMap("test", "hallo"));
}
-----
Console: Variable is only available in second listener:

14:06:25,561 INF |

Variables: <com.camunda.demo.LoggerDelegate>
14:06:25,564 INF |

Variables: <com.camunda.demo.LoggerDelegate>
test = hallo

Links:

collectionExpression in MultiInstance is evaluated multiple times

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1650
Reporter rP62zaw
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

If you use a collectionExpression in Multiple instance the expression is resolved mutliple times (n+1 times to be precise).

This is

  • unnecessary
  • a problem if the expression resolves to a non constrant list (e.g. because some entries in this list are already removed by the MultipleInstance activity).

IMHO this should be changed:

  • evaluate the expression once and use this list to create all instances.

Links:

Allow for bean method to be called from script task

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4222
Reporter kr7yKXR
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

As a User, I would like to be able to execute bean (i.e. Spring beans) methods from a script task (for example JavaScript or Groovy).

For example:
${ myBean.myMethod() }

Other objects such as "execution" are available, so it would be nice if beans could be accessible in the same way. Having beans available would be really useful to me.

Reference:
https://groups.google.com/forum/#![](topic/camunda-bpm-users/g-T07G9f7KEhttps://groups.google.com/forum/#)topic/camunda-bpm-users/g-T07G9f7KE

Links:

CDI Request Scope does not work in Job Executor Threads on WLS

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1687
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Problem Description

@RequestScoped CDI Beans cannot be used from Job Executor Threads. This affects

  • @RequestScoped CDI Beans invoked from service tasks or Listeners after Timers
  • @RequestScoped CDI Beans invoked from service tasks or Listeners after asynchronous continuations

The following engine-integration tests are affected and excluded form CI at the moment:

  • JobExecutorRequestContextTest
  • JobExecutorRequestContextLocalInvocationTest
  • JobExecutorRequestContextSFSBDelegateTest

The testcase JobExecutorRequestContextRemoteInvocationTest works since in that case we invoke a Remote Business interface of an EJB in which case the weblogic seems to correctly open and scope the Request Context.

Suspected Reason

The reason is that Weblogic does not associate a RequestScope with the current thread upon the invocation of an MDB. The Java EE 6 Spec mandates this but Weblogic does not seem to implement this correctly

Proposed Workaround(s)

  • Wait / push for bugfix in Weblogic :)
  • use JBoss Weld API directly to control the request scope oursselves

Links:

I can provide a scope reference when setting a variable

This issue was imported from JIRA:

Field Value
JIRA Link CAM-2946
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

Problem:

Wen setting a variable, I can either set it in a local scope or in the global (usually process instance) scope.
There are many usecases where the global scope is not appropiate (multi instance, ...)
There are also many usecases where the local scope is not appropriate (for instance if a task is a scope, local variables will destroyed at the end of the scope).

Solution:

What we are looking for is a solution which allows users to specify the target scope for a variable with greater flexibility.

One possibility would be to add a "targetScope" attribute to output mappings which allow users to provide the id of a parent activity.
Users could then set variables "local" and map them to the correct scope using the mapping.
Note that not all operations currently allow users to pass local variables:
Known suspects:

  • Message correlation
  • resultVariable attribute for service tasks

There may be other solutions, input is welcome.

Links:

I can measure the delay between job creation and job execution

This issue was imported from JIRA:

Field Value
JIRA Link CAM-3162
Reporter 3vpg3w7
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • I can measure the time between job creation and execution
  • In case the time exceeds X, a warning should be logged
  • Goal is to notice when a job is stuck in the queue for longer than X

Links:

As DEV, I can make sure that a process stops if an error occurs (async on exception)

This issue was imported from JIRA:

Field Value
JIRA Link CAM-425
Reporter wmpZ2ng
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • when flag is set, engine behaviour switches to async if error occurs

Hint:

  • async is the current workaround to achieve this - is doesn't have to be handled by a job (but it comes with the advantage of being able to use the retry stuff)
  • modeler ticket needed: --> flag is available in modeler

Links:

As cockpit user, I can see at which date a Job Definition will be suspended / activated

This issue was imported from JIRA:

Field Value
JIRA Link CAM-1561
Reporter zZ6Eda
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

AT:

  • If there exists a Job which will cause a Job Definition to be suspended/activated at a given date, I can see this in the Job definition Tab in the Process definition view

Links:

Misleading exception message for wrong connector configuration

This issue was imported from JIRA:

Field Value
JIRA Link CAM-4292
Reporter rP62zaw
What is this name? This pseudonym name was generated based on the user name in JIRA to protect the personal data of our JIRA users. You can use this identifier to search for issues by the same reporter.
Has restricted visibility comments false

When:

  • Having ServiceTask
  • Configuring a Connector (e.g. soap)
  • Having the connector not configured in the engine

The exception is:

org.camunda.bpm.engine.ProcessEngineException: One of the attributes 'class', 'delegateExpression', 'type', or 'expression' is mandatory on serviceTask. | AAuftragsannahmeWorkshop.bpmn | line 80 | column 87

The exception message does not give any hint that the connector is not available.

Message should be improved (e.g. and connector 'xyz' is not available in current engine' or the like)

Links:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.