ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ื”ื™ื™ ื”ื‘ืจ! ืื ื™ ืžืฆื™ื’ ืœืชืฉื•ืžืช ืœื‘ืš ืืช ื”ืชืจื’ื•ื ืฉืœ ื”ืžืืžืจ "ื”ืฉืชืžืฉ ื‘ืงืžื•ื ื“ื” ื›ืžื ื•ืข ืชื–ืžื•ืจ ื•ื–ืจื™ืžืช ืขื‘ื•ื“ื” ืงืœ ืœืฉื™ืžื•ืฉ ืžื‘ื•ืกืก REST (ืžื‘ืœื™ ืœื’ืขืช ื‘-Java)" ืžืืช ื‘ืจื ื“ ืจื•ืงืจ.

07.07.2020/XNUMX/XNUMX, ืชืจื’ื•ื ืžืืžืจื™ื ื‘ืจื ื“ ืจืืงืจ

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืื ื™ ื“ืŸ ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื ืขื ืื ืฉื™ื ืฉืื™ื ื ื‘-Java: ืžืคืชื—ื™ C#, ืžืคืชื—ื™ Node.JS/JavaScript ืื• ื—ื•ื‘ื‘ื™ Golang. ื›ื•ืœื ืžืชืžื•ื“ื“ื™ื ืขื ื”ืขื•ื‘ื“ื” ืฉื”ื ืฆืจื™ื›ื™ื ืžื ื’ื ื•ืŸ ืชื–ืžื•ืจ ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช ืžื™ืงืจื•-ืฉื™ืจื•ืชื™ื, ืื• ืกืชื ื›ืœื™ ืœื™ื™ืขื•ืœ ื–ืจื™ืžืช ื”ืขื‘ื•ื“ื” ื•ืœืงื‘ืœ ืืช ื”ื™ื›ื•ืœืช ืœื‘ืฆืข ื”ื–ืžื ื”, ื˜ื™ืคื•ืœ ื‘ืชื–ืžื•ืŸ ื–ืžืŸ, ืกืื’ื” ื•ืขืกืงืื•ืช ืคื™ืฆื•ื™.

ืคืœื˜ืคื•ืจืžืช BPM ืขื ืงื•ื“ ืคืชื•ื— ืžืงืืžื•ื ื“ื” ื ื”ื“ืจ ืขื‘ื•ืจ ืžืฉื™ืžื•ืช ื›ืืœื”. ื™ื“ื™ื“ื•ืชื™ื•ืช ืœืžืคืชื—ื™ื ื”ื™ื ืื—ืช ืžืชื›ื•ื ื•ืช ื”ืžืคืชื— ืฉืœ ื”ืžื•ืฆืจ. ืื‘ืœ ืื ืชืกืชื›ืœ ืขืœ ื”ืชื™ืขื•ื“ ืฉืœื”, ืื•ืœื™ ืชืชืจืฉื ืฉื”"ื™ื“ื™ื“ื•ืชื™ื•ืช" ืฉืœ ืงืืžื•ื ื“ื” ืžื›ื•ื•ื ืช ื‘ืขื™ืงืจ ืœืžืคืชื—ื™ ื’'ืื•ื•ื”. ื”ืคืœื˜ืคื•ืจืžื” ืžืกืคืงืช ื”ืจื‘ื” ืืคืฉืจื•ื™ื•ืช ืœื—ื™ื‘ื•ืจ ืคื•ื ืงืฆื™ื•ืช ื•ื”ืจื—ื‘ื•ืช ืžืฉืœืš, ืื‘ืœ ื”ื›ืœ ื ืขืฉื” ื‘-Java. ื‘ืืžืช?

ืœื! ืœืžืขืฉื”, ืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœื”ืคืขื™ืœ ืืช Camunda ืœืœื ื›ืœ ื™ื“ืข ื‘ื’'ืื•ื•ื” ื•ืœื”ื’ื“ื™ืจ ืืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืœืงื•ื“ ื‘ื›ืœ ืฉืคื” ืฉืชื‘ื—ืจ. ื‘ืžืืžืจ ื–ื” ื ืกืชื›ืœ ืขืœ:

  • ืื“ืจื™ื›ืœื•ืช ื‘ืกื™ืกื™ืช;
  • REST API
  • ื™ื™ืขื•ืฅ ืœื’ื‘ื™ ืกืคืจื™ื•ืช ืœืงื•ื—ื•ืช ืงื™ื™ืžื•ืช ืœืฉืคื•ืช ืฉืื™ื ืŸ Java;
  • ื“ื•ื’ืžื” ื‘ืืžืฆืขื•ืช C# ื•-Node.JS;
  • ื“ืจื›ื™ื ืœื”ืคืขื™ืœ ืืช ืฉืจืช Camunda (Docker ืื• Tomcat).

ืื“ืจื™ื›ืœื•ืช

Camunda ื›ืชื•ื‘ ื‘-Java ื•ืฆืจื™ืš ืžื›ื•ื ืช Java Virtual Machine (JVM) ื›ื“ื™ ืœืคืขื•ืœ. Camunda ืžืกืคืงืช REST API ื”ืžืืคืฉืจ ืœืš ืœื›ืชื•ื‘ ื‘ื›ืœ ืฉืคื” ืฉืชืจืฆื” ื•ืœื”ืฉืชืžืฉ ื‘-REST ืขื Camunda:

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ื–ืจื™ืžื•ืช ืขื‘ื•ื“ื” ื‘ืงืžื•ื ื“ื” ืžื•ื’ื“ืจื•ืช ื‘-BPMN, ืฉื”ื•ื ื‘ืขืฆื ืงื•ื‘ืฅ XML. ืืคืฉืจ ืœืขืฆื‘ ืื™ืชื• ืงืžื•ื ื“ื” ื“ื•ื’ืžื ื™ืช.

ื”ืคืขืœืช Camunda ื“ืจืš ืชืžื•ื ืช Docker ื‘ื ื•ื™ื” ืžืจืืฉ

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื”ืคืขื™ืœ ืืช Camunda ื”ื™ื ืœื”ืฉืชืžืฉ ื‘-Docker. ื“ืจื›ื™ื ื—ืœื•ืคื™ื•ืช ืœื”ืคืขืœืช Camunda ืžืชื•ืืจื•ืช ื‘ื”ืžืฉืš ืžืืžืจ ื–ื”.

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ื‘ืžืงืจื” ื–ื”, ืคืฉื•ื˜ ื”ืคืขืœ:

  docker run -d -p 8080:8080 camunda/camunda-bpm-platform:latest

ืืชื” ืœื ืฆืจื™ืš ืœื“ืื•ื’ ืœื’ื‘ื™ ืœื™ื ื•ืงืก, JVMs ืื• Tomcats. ืงื‘ืฆื™ Docker ื•ืชื™ืขื•ื“ ื‘ืกื™ืกื™ (ืœื“ื•ื’ืžื”, ื”ื•ืจืื•ืช ืœื—ื™ื‘ื•ืจ ืœื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื”ื ื“ืจืฉื™ื) ื–ืžื™ื ื™ื ื‘ื›ืชื•ื‘ืช GitHub.

ืื ืืชื” ืจื•ืฆื” ืœื”ืคืขื™ืœ ืืช Camunda Enterprise Edition ืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœืฉื ื•ืช ื“ื•ืงืจืคื™ืœ.

ืขื ื–ืืช, ืœื”ืจืฆืช Camunda ืขื Docker ื™ืฉ ื—ื™ืกืจื•ืŸ ืื—ื“: ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืชื”ื™ื” ืœืš ื’ืจืกื” ืฉืœ Tomcat ืฉืœื ืชืžื™ื“ ื›ื•ืœืœืช ืืช ื”ืชื™ืงื•ื ื™ื ื”ืื—ืจื•ื ื™ื. ื›ื“ื™ ืœืขืงื•ืฃ ื–ืืช, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืชืžื•ื ืช Docker ืžืฉืœืš ื‘ื”ืชื‘ืกืก ืขืœ ื”ืคืฆืช Tomcat ื”ืจืฆื•ื™ื”, ื›ืคื™ ืฉืžื•ืฆื’ ื‘ื“ื•ื’ืžื” ื–ื•, ืื• ืœื”ืฉืชืžืฉ ื‘ืื—ื“ ืžื”ืคืชืจื•ื ื•ืช ื”ืžืชื•ืืจื™ื ืœื”ืœืŸ.

ืคืจื™ืกืช ืžื•ื“ืœ ืชื”ืœื™ืš

ื”ื‘ื” ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ื‘ืืžืฆืขื•ืช ืชื‘ื ื™ืช Saga ืขื‘ื•ืจ ื”ื–ืžื ืช ื˜ื™ื•ืœ ืงืœืืกื™ืช ืฉื‘ื” ืืชื” ืจื•ืฆื” ืœื”ืคืขื™ืœ ืฉืœื•ืฉ ืคืขื•ืœื•ืช ื‘ืจืฆื™ืคื•ืช ื•ืœืคืฆื•ืช ื‘ื—ืŸ ืขืœ ืคืขื•ืœื•ืช ืฉื”ื•ืฉืœืžื• ื‘ื”ืฆืœื—ื” ื‘ืžืงืจื” ืฉืœ ื›ืฉืœ ืžืื•ื—ืจ ื™ื•ืชืจ. ืžื™ื•ืฆื’ ื‘ืฆื•ืจืช BPMN, ื–ื” ื ืจืื” ื›ืš:

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ REST API ืขื‘ื•ืจ ืคืจื™ืกืช ืžื•ื“ืœ ืชื”ืœื™ืš. ื ื ื™ื— ืฉืืชื” ืฉื•ืžืจ ืื•ืชื• ื‘ืชื•ืจ trip.bpmn ื•ืžืคืขื™ืœ ืืช Camunda ื“ืจืš Docker ื›ืš ืฉื”ื•ื ื–ืžื™ืŸ ื‘-localhost:8080:

  curl -w "n" 
-H "Accept: application/json" 
-F "deployment-name=trip" 
-F "enable-duplicate-filtering=true" 
-F "deploy-changed-only=true" 
-F "[email protected]" 
http://localhost:8080/engine-rest/deployment/creat

ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœืจื•ืฅ ืžื•ืคืขื™ ื–ืจื™ืžืช ืขื‘ื•ื“ื” ื—ื“ืฉื™ื ื‘ืืžืฆืขื•ืช REST API ื•ื”ืขื‘ื™ืจื• ืืช ื”ื ืชื•ื ื™ื ืฉื‘ืจืฆื•ื ื›ื ืœืจืื•ืช ื›ืžืฉืชื ื™ ืžื•ืคืข ืฉืœ ื–ืจื™ืžืช ืขื‘ื•ื“ื”:

  curl 
-H "Content-Type: application/json" 
-X POST 
-d '{"variables":{"someData" : {"value" : "someValue", "type": "String"}},"businessKey" : "12345"}}' 
http://localhost:8080/engine-rest/<!-- -->process-definition/key/<!-- -->FlowingTripBookingSaga<!-- -->/start

ื”ืฉืืœื” ื”ืžืขื ื™ื™ื ืช ื”ื‘ืื” ื”ื™ื: ืื™ืš ืงืžื•ื ื“ื” ืžื›ื ื” ื ื”ืœื™ื ื›ืžื• ื”ื–ืžื ืช ืจื›ื‘? Camunda ืœื ื™ื›ื•ืœ ืจืง ืœื”ืชืงืฉืจ ืœืฉื™ืจื•ืชื™ื ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ (Push-Principle) ื‘ืืžืฆืขื•ืช ื—ืœืง ืžื•ื‘ื ื” ืžื—ื‘ืจื™ื, ืื‘ืœ ื’ื ืœืฉื™ื ืคืจื™ื˜ื™ ืขื‘ื•ื“ื” ื‘ืžืขื™ืŸ ืกื“ืจ ืžื•ื‘ื ื”. ืœืื—ืจ ืžื›ืŸ ื”ืขื•ื‘ื“ ื™ื›ื•ืœ ืœื”ื‘ื™ื ืคืจื™ื˜ื™ ืขื‘ื•ื“ื” ื“ืจืš REST, ืœื‘ืฆืข ืืช ื”ืขื‘ื•ื“ื” ื•ืœื”ื•ืจื•ืช ืœืงืžื•ื ื“ื” ืœื”ืฉืœื™ื (Pull-Principle).

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ืื– ืงื•ื“ื ื›ืœ ืืชื” ืฆืจื™ืš ืœื‘ืฆืข fetchAndLock (ืžื›ื™ื•ื•ืŸ ืฉืขื•ื‘ื“ื™ื ืื—ืจื™ื ื™ื›ื•ืœื™ื ืœืงื‘ืœ ืžืฉื™ืžื•ืช ื‘ื•-ื–ืžื ื™ืช ืœื”ื’ื“ืœืช ื”ืžืขืจื›ืช):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123","maxTasks":1,"usePriority":true,"topics":[{"topicName": "reserve-car"}, "lockDuration": 10000, "variables": ["someData"]}]}'<!-- --> 
http://localhost:8080/engine-rest/external-task/fetchAndLock

ืื– ืชื’ื™ื“ ืืช ื–ื” ืœืงืžื•ื ื“ื” ื”ืขื•ื‘ื“ ื”ืฉืœื™ื ืืช ื”ืขื‘ื•ื“ื” (ืฉื™ื ืœื‘ ืฉืขืœื™ืš ืœื”ื–ื™ืŸ ืืช ืžื–ื”ื” ื”ืžืฉื™ืžื” ื”ื—ื™ืฆื•ื ื™ืช ืฉื”ืชืงื‘ืœ ื‘ื‘ืงืฉื” ื”ืจืืฉื•ื ื”):

  curl 
-H "Content-Type: application/json" 
-X POST 
-d <!-- -->'{"workerId":"worker123", "variables": {}}'<!-- --> 
http://localhost:8080/engine-rest/<!-- -->external-task/EXTERNAL_TASK_ID/complete

ื–ื”ื• - ืขื“ื™ื™ืŸ ืœื ื”ื™ื™ืช ืฆืจื™ืš ืฉื•ื ื’'ืื•ื•ื”, ื ื›ื•ืŸ? ื•ื–ื” ืžืกืคื™ืง ื›ื“ื™ ืœื”ืชื—ื™ืœ!

ืกืคืจื™ื•ืช ืœืงื•ื—ื•ืช

ืงืœ ืœืงืจื•ื ืœ- REST API ื‘ื›ืœ ืฉืคืช ืชื›ื ื•ืช. ื‘-JavaScript, ื–ื” ื ืขืฉื” ื‘ืฆื•ืจื” ื ื•ื—ื” ื‘ืืžืฆืขื•ืช JQuery, ื•ื‘-C#, ื‘ืืžืฆืขื•ืช System.Net.Http ื•- Newtonsoft.Json. ืื‘ืœ ื–ื” ื™ื™ืงื— ื–ืžืŸ. ืื– ืืชื” ื™ื›ื•ืœ ืคืฉื•ื˜ ืœื”ืฉืชืžืฉ ื‘ืื™ื–ื• ืกืคืจื™ื™ืช ืœืงื•ื—.

ื›ืจื’ืข, ืžืกืคืจ ืกืคืจื™ื•ืช ืœืงื•ื—ื•ืช ืžื•ื›ื ื•ืช ื–ืžื™ื ื•ืช:

  • javascript: ืงืฉืจ. ื ืชืžืš ืขืœ ื™ื“ื™ Camunda;
  • Java you ืงืฉืจ. ื ืชืžืš ืขืœ ื™ื“ื™ Camunda;
  • C #:ืงืฉืจ ะธ ืงืฉืจ. ืฉื ื™ ื”ืคืจื•ื™ืงื˜ื™ื ื”ืœืœื• ื ืžืฆืื™ื ื‘ืžืฆื‘ ื‘ื™ื ื™ื™ื ื•ืœืžืขืฉื” ืจื“ื•ืžื™ื, ืืš ื™ื›ื•ืœื™ื ืœืฉืžืฉ ื›ื ืงื•ื“ืช ื”ืชื—ืœื” ื˜ื•ื‘ื”;
  • PHP: ืงืฉืจ - ืœื ืฉืœื ืžื“ื™ ื•ืื™ื ื• ื›ื•ืœืœ ืืช ื”ืฉื™ื ื•ื™ื™ื ื”ืื—ืจื•ื ื™ื ื‘-API, ืื‘ืœ ืื ื™ ืžื›ื™ืจ ืคืจื•ื™ืงื˜ื™ื ืฉืžืฉืชืžืฉื™ื ื‘ื•.

ืœืžืขื˜ JavaScript ื•-Java, ืกืคืจื™ื•ืช ื”ืœืงื•ื— ืื™ื ืŸ ื—ืœืง ืžืžื•ืฆืจ Camunda ืขืฆืžื•. ืืœ ืชืฆืคื” ืžื”ื ืœืชืžื•ืš ื‘ื›ืœ ืชื›ื•ื ื•ืช ื”-REST API ืฉืœ Camunda. ื–ื” ืฉืกืคืจื™ื” ืœื ืžืกืคืงืช ืคื•ื ืงืฆื™ื” ืžืกื•ื™ืžืช ืœื ืื•ืžืจ ืฉื”ื™ื ืœื ืฉื, ื‘ื“ื•ืง ืชืžื™ื“ ืืช REST API ืฉืœ Camunda. ืคืจื•ื™ืงื˜ื™ ืขื™ื•ืŸ ืžืฉืชืžืฉื™ื ื‘ืกืคืจื™ื•ืช ื›ื ืงื•ื“ืช ื”ืชื—ืœื” ื•ื›ืชื‘ื ื™ืช.

ื“ื•ื’ืžื” C#

ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช ื”ืœืงื•ื—ื•ืช ืœืขื™ืœ, ืื ื• ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœื›ืชื•ื‘:

  var camunda = new CamundaEngineClient("http://localhost:8080/engine-rest/engine/default/", null, null);
  // Deploy the BPMN XML file from the resources
  camunda.RepositoryService.Deploy("trip-booking", new List<object> {
        FileParameter.FromManifestResource(Assembly.GetExecutingAssembly(), "FlowingTripBookingSaga.Models.FlowingTripBookingSaga.bpmn")
     });
  
  // Register workers
  registerWorker("reserve-car", externalTask => {
    // here you can do the real thing! Like a sysout :-)
    Console.WriteLine("Reserving car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("cancel-car", externalTask => {
    Console.WriteLine("Cancelling car now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  registerWorker("book-hotel", externalTask => {
    Console.WriteLine("Reserving hotel now...");
    camunda.ExternalTaskService.Complete(workerId, externalTask.Id);
  });
  // Register more workers...
  
  StartPolling();
  
  string processInstanceId = camunda.BpmnWorkflowService.StartProcessInstance("FlowingTripBookingSaga", new Dictionary<string, object>()
    {
      {"someBookingData", "..." }
    });

ืืช ืงื•ื“ ื”ืžืงื•ืจ ื”ืคื•ืขืœ ื‘ืžืœื•ืื• ื ื™ืชืŸ ืœืžืฆื•ื ื‘ืื™ื ื˜ืจื ื˜: ืงืฉืจ. ื“ื•ื’ืžื” ื ื•ืกืคืช ื–ืžื™ื ื” ื‘ ืงืฉืจ.

ื“ื•ื’ืžื” ืขื Node.js

  var Workers = require('camunda-worker-node');
  var workers = Workers('http://localhost:8080/engine-rest', {
    workerId: 'some-worker-id'
  });
  
  workers.registerWorker('reserve-car', [ 'someData' ], function(context, callback) {
    var someNewData = context.variables.someData + " - added something";
    callback(null, {
      variables: {
        someNewData: someNewData
      }
    });
  });
  
  workers.shutdown();

ืžื™ื“ืข ื ื•ืกืฃ ื ื™ืชืŸ ืœืžืฆื•ื ื‘ืืชืจ github.com

ื“ืจื›ื™ื ื—ืœื•ืคื™ื•ืช ืœื”ืคืขืœืช Camunda

ืชืžื•ื ืช Docker ืžื•ืชืืžืช ืื™ืฉื™ืช ืขื "Camunda WAR ืขืฆืžืื™ืช"

ื›ื—ืœื•ืคื” ืœืชืžื•ื ืช Docker ืฉื ื‘ื ืชื” ืžืจืืฉ ืž-Camunda, ืืชื” ื™ื›ื•ืœ ืœื”ื›ื™ืŸ ืืช Tomcat ื‘ืขืฆืžืš (ืœื“ื•ื’ืžื”, ืขืœ ืกืžืš ื”ืชืžื•ื ื•ืช ื”ืจืฉืžื™ื•ืช ืฉืœ Docker Tomcat) ื•ืื– ืœื”ืขืชื™ืง ืืช Camunda ืœืชื•ื›ื” ื›ืื—ื“ ืžื”ืงื‘ืฆื™ื ืฉื ืงืจืื™ื WAR.

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ืื ื™ืฉ ืœืš ื“ืจื™ืฉื•ืช ื ื•ืกืคื•ืช ืจื‘ื•ืช ื•ืืชื” ื™ื›ื•ืœ ืœื”ื’ื“ื™ืจ ืกื‘ื™ื‘ืช ื‘ื ื™ื™ื” ืฉืœ Java, ืืชื” ื™ื›ื•ืœ ื’ื ืœื”ื’ื“ื™ืจ ืืช Camunda Standalone War. ื”ื’ื“ืจ ืžื‘ื ื” ืฉืœ Maven ื›ืžื• ื‘ื“ื•ื’ืžืื•ืช ื”ื‘ืื•ืช: build Maven ืขื ืชืฆื•ืจืช ืžืœื—ืžื” ืื• ื”ืจื›ื‘ื” Maven ืขื ืฉื›ื‘ืช ืขืœ.

ื”ืชื—ืœืช ื”ืคืฆืช Camunda Tomcat

ืืคืฉืจื•ืช ื ื•ืกืคืช ื”ื™ื ืคืฉื•ื˜ ืœื”ื•ืจื™ื“ ืืช ื”ืคืฆืช Camunda Tomcat, ืœืคืชื•ื— ืื•ืชื” ื•ืœื”ืคืขื™ืœ ืื•ืชื”. ื–ื” ื“ื•ืจืฉ ืจืง ืืช Java Runtime Environment (JRE) ื”ืžื•ืชืงื ืช ื‘ืžื—ืฉื‘ ืฉืœืš. ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื‘ืงืœื•ืช ืœื”ื•ืจื™ื“ ืžื›ืืŸ.

ืฉื™ืžื•ืฉ ื‘ืงืžื•ื ื“ื” ืœืชื–ืžื•ืจ ืงืœ ื”ืžื‘ื•ืกืก ืขืœ REST ื•-Workflow Engine (ืœืœื Java)

ื›ื“ื™ ืœืฉื ื•ืช ืืช ืžืกื“ ื”ื ืชื•ื ื™ื ืื• ืœืขืฉื•ืช ื›ืœ ื“ื‘ืจ ืื—ืจ, ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืช Tomcat like ืžืชื•ืืจ ื‘ืชื™ืขื•ื“. ืื ื™ ื™ื•ื“ืข ืฉ-Tomcat ืื•ืœื™ ื ืฉืžืข ืžืกื•ื‘ืš, ืื‘ืœ ื–ื” ื‘ืขืฆื ืžืื•ื“ ืคืฉื•ื˜. ื•ื’ื•ื’ืœ ื™ื•ื“ืขืช ืืช ื”ืชืฉื•ื‘ื•ืช ืœื›ืœ ืžื” ืฉื™ื™ื“ืจืฉ ื‘ืชื”ืœื™ืš.

ื”ืคืขืœืช Camunda ื‘ืืžืฆืขื•ืช Tomcat

ื”ืืœื˜ืจื ื˜ื™ื‘ื” ื”ืื—ืจื•ื ื” ื”ื™ื ืœื”ื’ื“ื™ืจ ืืช Tomcat ื‘ืขืฆืžืš ื•ืœื”ืชืงื™ืŸ ื‘ื• ืืช Camunda, ื‘ืขืงื‘ื•ืช ืชื™ืื•ืจ ื”ื”ืชืงื ื”. ื–ื” ื™ื™ืชืŸ ืœืš ืืช ื”ืืคืฉืจื•ืช ืœื”ืฉืชืžืฉ ื‘ื›ืœ ื’ืจืกื” ืฉืœ Tomcat ืฉืืชื” ืžืขื“ื™ืฃ, ืื• ืœื”ืชืงื™ืŸ ืื•ืชื” ื›ืฉื™ืจื•ืช Windows, ืœืžืฉืœ.

ื”ืฉืงืช ืงืืžื•ื ื“ื” ืœื™ื™ืฆื•ืจ

ื–ื” ื‘ื“ืจืš ื›ืœืœ ื™ื“ืจื•ืฉ ื”ื’ื“ืจื” ืกื•ืคื™ืช ื›ืœืฉื”ื™ ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช Camunda. ื™ืฉื ืŸ ื”ื ื—ื™ื•ืช ื‘ืงืžื•ื ื“ื” ืฉืžืชืืจื•ืช ื–ืืช ื‘ืคื™ืจื•ื˜ ืจื‘, ืืš ืœื ืื›ื ืก ืืœื™ื”ืŸ ื‘ืžืืžืจ ื–ื” โ€“ ืืฆื™ื™ืŸ ืจืง ื“ื•ื’ืžื” ืื—ืช: REST API ืฉืœ ื”ื”ืคืฆื” ืื™ื ื• ืžื•ื’ื“ืจ ืœืื™ืžื•ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ. ืื•ืœื™ ืชืจืฆื” ืœืฉื ื•ืช ื–ืืช.

ื”ืกื™ื›ื•ื ืฉืœื•

ื›ืคื™ ืฉืืชื” ื™ื›ื•ืœ ืœืจืื•ืช, ืงืœ ืžืื•ื“ ืœื”ืชื—ื™ืœ ืขื Camunda, ืœืœื ืงืฉืจ ืœืฉืคื” ืฉื‘ื” ืืชื” ืžืฉืชืžืฉ. ื ืงื•ื“ืช ื”ืžืคืชื— ื”ื™ื ืฉื›ืœ ื”ืื™ื ื˜ืจืืงืฆื™ื” ื ืขืฉื™ืช ื“ืจืš REST API. ื’ื ื”ื”ืชืงื ื” ื“ื™ ืงืœื”, ื‘ืžื™ื•ื—ื“ ื‘ืขืช ืฉื™ืžื•ืฉ ื‘- Docker.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”