{"id":28533744,"url":"https://github.com/epam/edp-ddm-bpms","last_synced_at":"2025-07-07T20:31:22.179Z","repository":{"id":59325043,"uuid":"422257191","full_name":"epam/edp-ddm-bpms","owner":"epam","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-04T14:33:28.000Z","size":4382,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-06-09T17:09:04.607Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/epam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-28T15:27:41.000Z","updated_at":"2025-03-04T14:33:32.000Z","dependencies_parsed_at":"2025-02-19T13:32:25.468Z","dependency_job_id":null,"html_url":"https://github.com/epam/edp-ddm-bpms","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/epam/edp-ddm-bpms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fedp-ddm-bpms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fedp-ddm-bpms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fedp-ddm-bpms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fedp-ddm-bpms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/epam","download_url":"https://codeload.github.com/epam/edp-ddm-bpms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/epam%2Fedp-ddm-bpms/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264142572,"owners_count":23563522,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-09T17:08:28.504Z","updated_at":"2025-07-07T20:31:22.161Z","avatar_url":"https://github.com/epam.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Business-process-management-service\n\nThis service is used for business-process management. It's a Spring Boot application\nover [Camunda Platform 7](https://github.com/camunda/camunda-bpm-platform).\n\n## Components\n\nBusiness-process-management-service provides a set of components that extend Camunda API:\n\n* [ddm-bpm](ddm-bpm) - central module with application configuration and main class\n* [ddm-bpm-api](ddm-bpm-api) - main data-transfer objects that are used in ddm-bpm-client and\n  ddm-bpm-rest.\n* [ddm-bpm-client](ddm-bpm-client) - Feign clients for http cross-service integration.\n* [ddm-bpm-data-accessor](ddm-bpm-data-accessor) - business-process variables management.\n* [ddm-bpm-engine](ddm-bpm-engine) - extending business-processes parsing and processing.\n* [ddm-bpm-extension](ddm-bpm-extension) - custom business-process extensions that implemented as\n  ExecutionDelegates.\n* [ddm-bpm-history-event-handler](ddm-bpm-history-event-handler) - sending Camunda history events to\n  external database.\n* [ddm-bpm-integration-tests](ddm-bpm-integration-tests) - integration testing of whole application.\n* [ddm-bpm-metrics-plugin](ddm-bpm-metrics-plugin) - plugin that adds business-process execution\n  metrics in Prometheus.\n* [ddm-bpm-rest](ddm-bpm-rest) - extending Camunda REST API.\n* [ddm-bpm-security](ddm-bpm-security) - managing camunda authentication and authorization for user.\n* [ddm-bpm-storage](ddm-bpm-storage) - managing form and file data in the storage during process\n  execution.\n\n## Service Usage\n\nAs this service is designed to be used in Kubernetes in scope of a platform there described\ninstruction only for usage for local development.\n\n### Installation\n\n#### Prerequisites\n\n1. Installed [Java OpenJDK 11](https://openjdk.org/install/), [Maven](https://maven.apache.org/)\n   and [Docker](https://www.docker.com/).\n2. Maven is configured to use Nexus repository with all needed dependencies.\n   \u003e **_NOTE:_** Using Java JDK with version higher than 11 may cause some runtime problems.\n   \u003e\n   \u003e E.g.\n   test [TokenCacheServiceTest.java](ddm-bpm-extension%2Fsrc%2Ftest%2Fjava%2Fcom%2Fepam%2Fdigital%2Fdata%2Fplatform%2Fbpms%2Fextension%2Fservice%2FTokenCacheServiceTest.java)\n   may fail on higher versions because of _secp256k1 elliptic curve_ that is no longer supported.\n\n#### Configuring\n\n* Configuration can be changed\n  here [application-local.yml](ddm-bpm/src/main/resources/application-local.yml).\n* Any jvm attributes can be added to JAVA_OPTS environment variable in\n  business-process-management-service in [docker-compose.yml](docker-compose.yml).\n* In case if you don't need any service-mock or redis just delete it\n  from [docker-compose.yml](docker-compose.yml).\n\n#### Quick installation\n\n1. Build the service\n    ```shell\n    mvn package\n    ```\n2. Copy the application jar file to root project directory\n    ```shell\n    mkdir -p target \u0026\u0026 cp ddm-bpm/target/ddm-bpm-1.9.0.jar target/\n    ```\n3. Run Docker-compose\n    ```shell\n    docker-compose up -d --scale redis-sentinel=3\n    ```\n   \u003e **_NOTE:_**  If one of the **redis-sentinel** was failed because of already bound port, then\n   likely this port was bound by other redis-sentinel service. In that case just execute the\n   docker-compose again. It may require up to 3 attempts.\n4. Go to http://localhost:8080/openapi to open services Swagger, or connect to localhost:5005 with\n   remote debug.\n5. In case if you need to rebuild the service you also need to remove service docker image:\n   ```shell\n   docker rmi bpms-business-process-management-service -f\n   ```\n\n#### Installation with Kafka\n\nTo install the service with Kafka, it's needed to perform next steps **before** building the jar\nfile:\n\n1. Enable Kubernetes on your docker: [instruction](https://docs.docker.com/desktop/kubernetes/).\n2. Deploy Strimzi by [instruction](https://strimzi.io/quickstarts/) on ```Docker Desktop```\n   tab.\n3. DO NOT create an Apache Kafka cluster from Strimzi instructions, instead perform\n   next:\n    ```shell\n    kubectl apply -f docker-local/kafka/kafka-cluster.yml -n kafka \n    ```\n4. Install Kafka-ui (Optional):\n    1. Install [Helm](https://helm.sh/docs/intro/install/)\n    2. Add helm repo:\n        ```shell\n       helm repo add kafka-ui https://provectus.github.io/kafka-ui-charts\n       ```\n    3. Install kafka-ui to ```kafka``` namespace:\n       ```shell\n       helm install kafka-ui kafka-ui/kafka-ui \\\n          --set envs.config.KAFKA_CLUSTERS_0_NAME=local \\\n          --set envs.config.KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-cluster-kafka-bootstrap:9092 \\\n          --namespace kafka\n       ```\n    4. Port forward to Kafka-UI pod:\n       ```shell\n       kubectl -n kafka port-forward svc/kafka-ui 8083:80\n       ```\n    5. Go to [Kafka-UI](http://localhost:8083)\n5. Define what node port is used by kafka:\n   ```shell\n   kubectl -n kafka get service kafka-cluster-kafka-external-bootstrap -o=jsonpath='{.spec.ports[0].nodePort}{\"\\n\"}'\n   ```\n6. In [application-local.yml](ddm-bpm%2Fsrc%2Fmain%2Fresources%2Fapplication-local.yml) change:\n    1. ```data-platform.kafka.enabled: true```\n    2. ```data-platform.kafka.bootstrap: docker-desktop:${NODE_PORT}``` where ${NODE_PORT} is port\n       defined in previous step\n    3. ```data-platform.kafka.consumer.enabled: true```\n7. Perform steps from [Quick installation](#quick-installation)\n\n#### Usage\n\n1. Generate JWT token for the service (e.g. [here](https://jwt.io/)). The token **must** have\n   _preferred_username_ claim. And use it in ```Authorize```\n   in [Swagger](http://localhost:8080/openapi).\n   \u003e **_NOTE:_** by default service have no authorization in local profile. This is needed if\n   business-process accesses user info or uses the token in integrations.\n2. Deploy executable business-process using _POST /deployment_\n   \u003e **_NOTE:_** _tenant_id_ **must** be ```null``` so disable the checkbox ```Send empty value```\n   if you're using Swagger. Also, file extension **must** be ```.bpmn```. In other case you won't\n   see your process in the list of processes.\n3. Start business-process using _POST /process-definition/key/{key}/start_ where ```key``` is\n   business-process-definition key defined in bpmn file. If your business-process requires\n   start-form then it's needed to add required document to Redis first:\n    1. Go to http://localhost:8081/ and login username - root, password qwerty.\n    2. Select local(redis-master:6379:0) and press ```Add New Key...```\n    3. Set any ```Key```, choose type ```Hash```. In field ```Field``` set ```data```. And\n       in ```Value``` set needed json object.\n    4. Used ```Key``` is needed to pass as variable with name ```start_form_ceph_key``` in starting\n       business-process request body.\n4. Mock every request that will be needed for business-process using Wiremock UI:\n    1. [digital-document-service-mock](http://localhost:8082/__admin/webapp/mappings)\n    2. [excerpt-service-api-mock](http://localhost:9999/__admin/webapp/mappings)\n    3. [digital-signature-ops-mock](http://localhost:8100/__admin/webapp/mappings)\n    4. [registry-rest-api-mock](http://localhost:8877/__admin/webapp/mappings)\n    5. [keycloak-mock](http://localhost:8200/__admin/webapp/mappings)\n5. Complete business-process tasks using _POST /extended/task/{id}/complete_ where ```id``` is a\n   task id which can be retrieved by selecting task list (_/extended/task_ or\n   _/extended/task/lightweight_).\n   Every task will require to add corresponding document to Redis first:\n    1. Go to http://localhost:8081/ and login username - root, password qwerty.\n    2. Select local(redis-master:6379:0) and press ```Add New Key...```\n    3. In ```Key``` field set\n       value ```bpm-form-submissions:process/{processInstanceId}/task/{taskDefinitionKey}```\n       where ```processInstanceId``` is an id of current process-instance\n       and ```taskDefinitionKey``` is key of the task defined in bpmn file.\n    4. Choose type ```Hash```. In field ```Field``` set ```data```. And\n       in ```Value``` set needed json object.\n\n### Testing\n\n1. Stop the docker-compose if it's running:\n    ```shell\n    docker-compose stop\n    ```\n2. Run verify on maven:\n    ```shell\n    mvn verify\n    ```\n3. On Mac it can asc for accepting incoming network connections to _redis-server_ app.\n   Click ```Accept```.\n\n## License\n\nThe ddm-bpm-parent is Open Source software released under\nthe [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fedp-ddm-bpms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fepam%2Fedp-ddm-bpms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fepam%2Fedp-ddm-bpms/lists"}