<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Praveenbuya on Medium]]></title>
        <description><![CDATA[Stories by Praveenbuya on Medium]]></description>
        <link>https://medium.com/@praveenbuya?source=rss-22b41ae491e1------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*G0K9POmE2vDb9NXw</url>
            <title>Stories by Praveenbuya on Medium</title>
            <link>https://medium.com/@praveenbuya?source=rss-22b41ae491e1------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 03:36:34 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@praveenbuya/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Decoding Camunda: The Link Between JobWorkers in Camunda 8 and Service Tasks in Camunda 7]]></title>
            <link>https://medium.com/@praveenbuya/decoding-camunda-the-link-between-jobworkers-in-camunda-8-and-service-tasks-in-camunda-7-62826d775cea?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/62826d775cea</guid>
            <category><![CDATA[camunda8]]></category>
            <category><![CDATA[zeebe-client]]></category>
            <category><![CDATA[camunda7-vscamunda8]]></category>
            <category><![CDATA[camunda7]]></category>
            <category><![CDATA[external-task-client]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Mon, 13 Jan 2025 16:44:09 GMT</pubDate>
            <atom:updated>2025-01-13T16:44:09.653Z</atom:updated>
            <content:encoded><![CDATA[<p>In this article, we will explore the implementation of Camunda 7 service tasks configured with the implementation type as <strong>“External”</strong> and how this enables a <strong>remote process engine</strong> setup. Furthermore, we will draw parallels to the architecture of Camunda 8, focusing on its <strong>JobWorkers</strong> implementation and how it aligns with the concepts of Camunda 7.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/421/1*unO-upMW8rVBUxkrDIzIYA.png" /></figure><h3>Camunda 7: Remote Process Engine Setup with External Service Tasks</h3><p>The diagram above illustrates a <strong>remote process engine setup</strong> in Camunda 7. In this architecture:</p><ul><li><strong>Camunda Process Engine</strong> is hosted as a separate application, handling BPMN workflow orchestration.</li><li><strong>Remote Applications</strong> implement the business logic for specific tasks within workflows. These applications are typically built using Spring Boot and integrate with the process engine through the <strong>Camunda External Task Client library</strong>.</li></ul><h4>How External Task Processing Works</h4><ul><li>When a process instance reaches a service task with the implementation type <strong>“External”</strong>, the process engine creates a <strong>job</strong>.</li><li>These jobs are assigned to a virtual queue, identified by the <strong>topic name</strong> configured during service task creation in the workflow.</li><li>Remote applications register themselves to listen to specific topics and process the jobs using the <strong>External Task Client</strong>.</li><li>Once processing is complete, the applications send a status update back to the process engine.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1004/1*tUYZlrAxWA9bwzK40uDbEA.png" /></figure><h4>Illustration</h4><p>Consider the setup where the process engine application has a BPMN deployed. The diagram above highlights:</p><ul><li>A <strong>virtual queue</strong> named dummyTopic, configured as the topic name for an external service task.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bOeLLZR0dni7pn1kwYmWKQ.png" /></figure><ul><li>A <strong>Spring Boot application</strong> equipped with the <strong>External Task Client dependency</strong> for job processing.</li></ul><pre>&lt;dependency&gt;<br>      &lt;groupId&gt;org.camunda.bpm.springboot&lt;/groupId&gt;<br>      &lt;artifactId&gt;camunda-bpm-spring-boot-starter-external-task-client&lt;/artifactId&gt;<br>      &lt;version&gt;${camunda.platform.runtime.version}&lt;/version&gt;<br>    &lt;/dependency&gt;</pre><p>The application.properties file in the remote application configures the connection to the remote process engine. Essential configurations include endpoint URLs, authentication, and retry mechanisms. For instance:</p><pre>camunda.bpm.client:<br>  base-url: http://localhost:8080/engine-rest # the URL pointing to the Camunda Platform Runtime REST API<br>  lock-duration: 10000 # defines how many milliseconds the External Tasks are locked until they can be fetched again<br>  subscriptions:  <br>    eligibilityCheck:<br>      variable-names: name,age,loanAmount,purpose,email,monthlyIncome # only fetch these variables<br>      process-definition-key: loanproces</pre><p>The remote application’s job-handling logic includes fetching jobs from the queue, processing them, and updating the job status back to the process engine using the complete() method.</p><pre>@Component<br>@ExternalTaskSubscription(&quot;dummyTopic&quot;)<br>public class TaskHandler implements ExternalTaskHandler {<br><br> @Override<br> public void execute(ExternalTask extTask, ExternalTaskService extTaskService) {<br><br>  String name = extTask.getVariable(&quot;name&quot;);<br>  long age = extTask.getVariable(&quot;age&quot;);<br>  long loanAmount = extTask.getVariable(&quot;loanAmount&quot;);<br>  String purpose = extTask.getVariable(&quot;purpose&quot;);<br>  String email = extTask.getVariable(&quot;email&quot;);<br>  String status = &quot;&quot;;<br>  String rejectReason = &quot;&quot;;<br><br>  System.out.println(&quot;name*** &quot; + name);<br>  System.out.println(&quot;age*** &quot; + age);<br>  System.out.println(&quot;loanAmount*** &quot; + loanAmount);<br>  System.out.println(&quot;purpose*** &quot; + purpose);<br>  System.out.println(&quot;email*** &quot; + email);<br>  System.out.println(&quot;status*** &quot; + status);<br>  System.out.println(&quot;rejectReason*** &quot; + rejectReason);<br><br>  if (loanAmount &lt; 100000) {<br>   status = &quot;Rejected&quot;;<br>   rejectReason = &quot;We are not approving loans less than 100000&quot;;<br><br>  } else {<br>   status = &quot;Approved&quot;;<br>  }<br><br>  VariableMap variables = Variables.createVariables();<br>  variables.put(&quot;status&quot;, status);<br>  variables.put(&quot;rejectReason&quot;, rejectReason);<br><br>  extTaskService.complete(extTask, variables);<br><br> }<br><br>}</pre><blockquote><strong>Correlating Camunda 7 and Camunda 8 Architectures</strong></blockquote><p>Camunda 8 introduces the <strong>Zeebe Cluster</strong>, which serves as a scalable and distributed workflow engine. The Zeebe Cluster can be compared to the <strong>remote process engine</strong> setup in Camunda 7. Let’s examine key similarities:</p><p><strong>Zeebe Cluster vs. Remote Process Engine</strong>:<br>In Camunda 8, the Zeebe Cluster handles workflow orchestration, akin to the process engine in Camunda 7.</p><p><strong>JobWorkers vs. External Task Client</strong>:</p><ul><li>In Camunda 8, <strong>JobWorkers</strong> use the Zeebe Client library to subscribe to topics and process jobs.</li><li>Similarly, in Camunda 7, <strong>External Task Subscriptions</strong> via the External Task Client library are used to process jobs assigned to specific topics.</li></ul><p><strong>Key Comparison:</strong></p><p><strong>Workflow Engine</strong>: Camunda7 -Process , Camunda8-EngineZeebe <strong>ClusterCommunication Library:</strong> Camunda7 — External Task Client , Camunda8 — Zeebe Client</p><p><strong>Task Handling:</strong> Camunda7- External Task Subscription ,Camuna8 JobWorkers</p><p><strong>Topic Subscription:</strong> Camunda7 — Virtual Queue in Service Tasks , Camunda8 — Zeebe Topics</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MY16pPetomGGFhO3v4Y2lg.png" /></figure><h3>Conclusion</h3><p>The external service task model in Camunda 7 provides the flexibility to implement distributed and decoupled architectures, where task-specific logic resides in separate remote applications. Similarly, Camunda 8, with its JobWorkers and Zeebe Cluster, builds upon this concept by offering a cloud-native, scalable workflow engine.</p><p>Understanding these parallels allows developers to transition seamlessly from Camunda 7 to Camunda 8, leveraging the best practices from both architectures to meet modern workflow automation needs.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=62826d775cea" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Camunda DMN (Decision Model And Notation) Integration with BPM]]></title>
            <link>https://medium.com/@praveenbuya/camunda-dmn-decision-model-and-notation-integration-with-bpm-54b4edcf55f1?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/54b4edcf55f1</guid>
            <category><![CDATA[drd]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[dmn]]></category>
            <category><![CDATA[rules]]></category>
            <category><![CDATA[camunda]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Wed, 13 Nov 2024 01:21:20 GMT</pubDate>
            <atom:updated>2024-11-13T01:21:20.394Z</atom:updated>
            <content:encoded><![CDATA[<blockquote><strong>What is DMN(Decision Model Notation)?</strong></blockquote><p>DMN defines the decision logic in a visual way working along side BPMN</p><p>Similar to BPM generates XML in the backend which is understood by Camunda Engine, DMN also generates XML in the backend which is understood by engine and executes the decision models.</p><p>Basic execution flow of DMN is as below.</p><p><strong><em>Input → Decision(DMN) → Result(output)</em></strong></p><p>here Input can be simple one or can be an output from another DMN. Those inputs are executed and evaluated again the decision models and output will be generated.</p><blockquote><strong>Why DMN?</strong></blockquote><ul><li>Understood by everyone</li><li>Easy transition from decision to the implementation</li><li>DMN usable along with BPMN</li><li>Transparency</li></ul><blockquote><strong>What is Decision Management?</strong></blockquote><p>Decision management is designing , building , and managing automated decision making systems.</p><p><em>Define goals</em> <strong>→ </strong><em>Create Decisions</em> → <em>Develop rules</em> → <em>Decisions are made compliant by rules</em> →<em> Automate Decision making</em></p><blockquote><strong>Decision Management Goals:</strong></blockquote><p><strong><em>Transparency</em></strong>: Make decision logic explicit</p><p><strong><em>Efficiency</em></strong>: Automate decisions if possible</p><p><strong><em>Agility</em></strong>: Implement new or changed decision logic easily</p><blockquote><strong>Components of DMN:</strong></blockquote><p><em>Decision Requirement Diagram(DRD):</em></p><ul><li>It is a visual representation of the structure of the decision logic</li><li>No exact logic here</li><li>Shows the needed input and supporting decisions</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/837/1*5pW-yMO0ph1b3wRSRRTBHw.png" /></figure><p>Decision Tables:</p><p>Basically rules are expressed as decision table. Once you have an input(s) , think about rules and business logic which will go into decision tables.</p><p>Below is sample Decision Table which have set of business rules which evaluates cost of azure services selected by user.</p><p>eg: When AzureService = “AzureSql” and Version = “Standard”…… then Cost of the selected service is 100.</p><p>User can select AzureService and Version using input1 and input2 variable which will be passed to decision table and executes the decison model based on the hit policy , which is defined as unique in below table. If the rule is matched then that corresponding output value will be sent in the result here it is Cost of the service selected.</p><p>We will disucss on different types of hit policy in next blog.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jBwx-PvbqgLf-eh-pIlM5g.png" /></figure><p>Here Azure Cost is the Name of the Decision Table</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*akK6VDs6IO4j0GUFi6lVzg.png" /></figure><p>In the above Image AzureService is first input which is passed to Decision table using input1(you can name as you like) variable which is of type String(different types are available).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6Bw8MwWzZ8PlQUq_XDMcFw.png" /></figure><p>In the above Image Version is second input variable which can be passed using variable input2 which is also of type String.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ma9Silq8fKmpFNgDUBk5pg.png" /></figure><p>In the above Image Cost is the output of the decision table which is stored in result variable ‘price’ which is of type number.</p><p>Annotations are place where we can give some description above that rule or condition etc. Which is just an information purpose only and will not impact your rule execution.</p><p>Below is the DRD for the above Decision Table.Decision ID highlighted below is important and which will be used to integrated this DRD with BPM or Invoke this Decision Table using restAPI.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*obwjrdjr1h2wkePBcU17Eg.png" /></figure><blockquote><strong>Using DMN in BPM:</strong></blockquote><p>Now we will see how to use above DMN in BPM , for which I have created a simple BPM with one task as DMN as shown below</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7gmObPymXJwKnyA76J2RgQ.png" /></figure><p>And below highlighted screen shows how to refer DMN and output variable from DMN in BPM. here Decision reference is the Decision ID of DRD diagram and price is the output variable and Map decision result is selected as singleEntry(TypedValue) since our output from DMN is single value. we can discuss on other types in the other blog when we discuss about diffent hit policies.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Bbd3aEvQrUjs6e2tQc124g.png" /></figure><p>This simple work flow will take 2 inputs(input1 &amp; input2) from the user using user task , those input variables will be used as input to DMN to execute against decision model and provide an output(Cost of azure service). The resulted output will be printed to console using script task.</p><p>In below diagram i am completing user task by providing two input values.</p><p>here input1 and input2 variables should match the values defined in DMN to get evaluated.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*s8yhpyx1VHNdFDnX-doHug.png" /></figure><p>You can go to Decisions to see the evaluated rules.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JmGTjEXU0yyNQg6s6hf9eA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aLD5ESwi3ObZUqyUNcvp5A.png" /></figure><p>Click on the latest Decision Instance to see how the rule was evaluated. The evaluated rule will be highlighted as below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i-0MiBuzwVzN0HsZfZ2ehQ.png" /></figure><p>And the final script task will be executed and print the output in the console.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pNOvzne8tTO6TTvsfXrs5Q.png" /></figure><p>This concludes how to work with DMN and integrate it with BPM. In the next blog we will discuss about different hit policies and how to handle the different outputs form DMN.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=54b4edcf55f1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Difference between Camunda 7 and Camunda 8]]></title>
            <link>https://medium.com/@praveenbuya/difference-between-camunda-7-and-camunda-8-2a182d4f67da?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/2a182d4f67da</guid>
            <category><![CDATA[camunda]]></category>
            <category><![CDATA[cockpit]]></category>
            <category><![CDATA[operate]]></category>
            <category><![CDATA[activiti]]></category>
            <category><![CDATA[zeebe]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Mon, 28 Oct 2024 08:57:09 GMT</pubDate>
            <atom:updated>2024-10-28T08:57:09.324Z</atom:updated>
            <content:encoded><![CDATA[<blockquote><strong>Core Engine:</strong></blockquote><p>Camunda 7 is backed by Activiti engine(Camunda was originally a fork of the Activiti project) where as Camunda 8 is on Zeebe engine(scalable both horizontally and linearly) developed by Camunda which makes it suitable for Cloud operations and automation processes.</p><blockquote><strong>Process solutions using Spring Boot:</strong></blockquote><p><strong>Camunda 7:</strong></p><p>To build a process solution using Camunda 7 and Spring Boot we need :</p><ol><li>Java</li><li>Spring Boot</li><li>Camunda Spring Boot Starter with embedded engine</li><li>Java Delegates</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/440/1*lLb_M3_r0te_I00HyLvfFQ.png" /></figure><p><strong>Camunda 8:</strong></p><p>To build a process solution using Camunda 8 and Spring Boot we need :</p><ol><li>Java</li><li>Spring Boot</li><li>Spring Zeebe Starter (Zeebe Client)</li><li>Job Workers</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/393/1*ZdLSuMuBN0XIfIa7QWoE-g.png" /></figure><blockquote><strong>Typical Deployment Difference:</strong></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/448/1*PUd639CWHXx-THDbayUdhA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/565/1*hd7NwBHm-wPw1NlbCpA_nA.png" /></figure><blockquote><strong>Data Storage:</strong></blockquote><p>In Camunda 7 data was stored in a relational database which was a bottle neck for scaling to cater huge loads.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/675/1*RtfXYQjLvMpIc96F2YX-tg.png" /></figure><p>Camunda 8 uses elasticsearch which is specialized on search efficinecy , not storage. The data can be exported into a datasource of your choice. Exporter simply takes the data from zeebe engine and puts it into elasticsearch.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/993/1*CHypFWE2eHLLpB2sUrgyeg.png" /></figure><blockquote><strong>Communication:</strong></blockquote><p>In Camunda 7 communication with engine was either through RestAPI or Java SDK in case of embedded engine.</p><p>In Camunda 8 communication with engine is via Zeebe Gateway which uses gRPC Api which will be used to start , fetch or complete a task.</p><blockquote><strong>Web Modeler:</strong></blockquote><p>Integrating Modeler with the engine in Camunda 7 was technically challenging and user-unfriendly. Camunda 8’s cloud-based Web Modeler is a lot more user-friendly.The new modeler greatly supports collaboration, since it doesn’t require Cawemo, but instead, offers separate tabs for the different roles It also offers play and design modes, as well as an AI generator for user task forms.</p><blockquote><strong>Connectors:</strong></blockquote><p>Camunda 8 introduces pre-built connectors to simplify communication with external systems in workflows. These reusable connectors will save developers time and effort. While Camunda provides some connectors, users can also build their own for internal systems. Importantly, this doesn’t restrict developer flexibility — Camunda 8 isn’t aiming to be a low-code platform. There’s an extensive connector marketplace that also includes partner-built connectors. Where as Camunda 7 does not have such in built connectors .</p><blockquote><strong>Operations :</strong></blockquote><p>The functionalities provided by Operate in Camunda 8, the equivalent of Cockpit in Camunda 7, is more limited. It’s currently impossible to suspend the execution of specific process steps, although the version is continuously being developed to include new features like retriggering task executions and manipulating stuck instances.Process instance migration is also significantly limited in Camunda 8.</p><blockquote><strong>Embedded Engine:</strong></blockquote><p>In Camunda 7, the workflow engine operates in a tightly coupled manner with your application. It achieves this by being embedded as a library within the same Java Virtual Machine (JVM). This co-location allows for shared resources, including thread pools and even the data source and transaction manager.</p><p>Camunda 8 workflow engine, Zeebe, functions as a separate, remote resource for your application. The key implication is the inability to directly share ACID transactions between your application code and the workflow engine, which means you’ll have to handle data consistency differently when planning the migration.</p><blockquote><strong>Scripting:</strong></blockquote><p>Camunda 7 allows the implementation of scripting tasks in Groovy, JavaScript and several other programming languages, which allows developers to write custom logic and perform complex operations directly within the workflow.</p><p>With Camunda 8, only FEEL script is allowed in script task activities. It aims to provide a more standardized, simplified, and optimized approach to workflow automation. However, this limitation may require developers to adapt their existing scripts and may not be suitable for all use cases. In situations where more complex or custom logic is required, developers may need to explore alternative approaches, such as implementing external services or using other extension points provided by Camunda.</p><p>Above are some of the differences between Camunda 7 and Camunda 8 .</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2a182d4f67da" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Camunda Script and Service Task Implementation]]></title>
            <link>https://medium.com/@praveenbuya/camunda-script-and-service-task-implementation-878cc05ac359?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/878cc05ac359</guid>
            <category><![CDATA[script-task]]></category>
            <category><![CDATA[camunda]]></category>
            <category><![CDATA[connector]]></category>
            <category><![CDATA[camunda-bpmn]]></category>
            <category><![CDATA[camunda7]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Fri, 20 Sep 2024 04:16:50 GMT</pubDate>
            <atom:updated>2024-09-24T02:23:54.850Z</atom:updated>
            <content:encoded><![CDATA[<p>In this story we will discuss on how to implement and use Camunda script task and service task. And also how to start the Camunda process instance using Java SDK using Camunda runtime services and also using Camunda Rest API support.</p><p>Here we will work on embedded process engine setup using spring boot like below:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/391/1*da7nv2NypDzPrPcp599IFQ.jpeg" /></figure><p>How to create Camunda spring boot project:</p><p>1. <a href="https://start.camunda.com/">https://start.camunda.com/</a> its similar to spring initializer , its a quick start process to help create sample application with required dependencies</p><p>2. Or you can use Spring Initializer to create normal spring boot project and add Camunda related dependencies manually and add BPMN file in resources folder.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1nIcruR-IjJntzUncHUybQ.png" /></figure><p>Using start.camunda.com select the modules which you are interested in and select the Camunda version and spring boot version. You can also set admin username and password here.</p><p>Once project is generated you can import to your IDE like STS or VSCode etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/485/1*1fCzr9MA4LhQTT1LFHVM8A.png" /></figure><p>Open your bpmn file using Camunda modeler and start to create your work flow.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*NtJ95mDjFhicKJ1M8uw2og.png" /></figure><p>Here I have created multiple script tasks and service tasks.</p><blockquote><strong>Script Task:</strong> Inline JavaScript</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1d3aaXhkJGY9Rs3lgDzerw.png" /></figure><p>Above highlighted is the script task with script format as JavaScript and type as inline. And script is just to print text in console.</p><blockquote><strong>Script Task: </strong>Inline Script to print JSON object</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fW0oRoYMTQVK9gIiDPzxiw.png" /></figure><p>Above highlighted is the other script task with script format as javascript and type as inline script and in the script we have created a JSON object and printing it to console and this result is stored in result variable as UserObject, which can be used in rest of the flow and process business logic using this object.</p><blockquote><strong>Script Task:</strong> External JavaScript Resource</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GhcDtdnkhIelQEeUISBsRQ.png" /></figure><p>Above is the script task with type as external resource. Resource represents a js file which is present in resources folder of spring boot project.</p><pre>var studentObj = {<br>     name: &#39;John&#39;,<br>     age: 25,<br>     subject: &#39;English&#39;<br>     };<br>     <br>     var studentJson = JSON.stringify(studentObj);<br>     <br>     print(studentJson);<br>     print(&quot;Printing User Object from previous script task:::&quot;+JSON.stringify(UserObject));<br>     print(&quot;Printing Global User Object from previous script task:::&quot;+JSON.stringify(globalUserObj1));</pre><p>Here in the js file we are priniting studentJson object , as well as printing UserObject which was created as result object in previous script task.</p><blockquote><strong>Service Task: </strong>Java Delegate</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DpN_5tHb72jsID8Gpnhh4Q.png" /></figure><p>Above is the service task with implementation as Java class , here we have give reference to java class with complete package name and implementation details as follows.</p><pre>package com.example.workflow.delegate;<br><br>import org.camunda.bpm.engine.delegate.JavaDelegate;<br><br>public class TestDelegateWithJava implements JavaDelegate{<br> <br> @Override<br> public void execute(org.camunda.bpm.engine.delegate.DelegateExecution execution) throws Exception {<br>  System.out.println(&quot;TestDelegateWithJava executed&quot;);<br> }<br><br>}</pre><p>This is the java delegate class where we have to implement JavaDelegate and override execute method. DelegateExection object will hold all the key elements about runtime and process variables and global parameters which can be used and can be passed on to next elements in the flow.</p><blockquote><strong>Service Task:</strong> Delegate Expression</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dc6MFPsPpHiWK0vVO6hKJw.png" /></figure><p>Above is another way of implementing serivce task using Delegate expression, advantage of this way of implementation compared to java class is that in case if there is any change in package structure and you move the class it will not break the service task implementation as it uses expression to find the class.</p><pre>package com.example.workflow.delegate;<br><br>import org.camunda.bpm.engine.delegate.DelegateExecution;<br>import org.camunda.bpm.engine.delegate.JavaDelegate;<br>import org.springframework.stereotype.Component;<br><br>@Component<br>public class TestDelegateExecution implements JavaDelegate {<br><br> @Override<br> public void execute(DelegateExecution execution) throws Exception {<br>  System.out.println(&quot;TestDelegateExecution executed&quot;);<br> }<br><br>}</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6pCONrL_9kggEkFHqi9IMQ.png" /></figure><blockquote><strong>Serivce Task: </strong>Expression</blockquote><p>Above is the another way of implementing service task using expression , here we can refer any of the existing java class method like service class or util class etc.</p><pre>package com.example.workflow.service;<br><br>import org.springframework.stereotype.Service;<br><br>@Service<br>public class SimpleService {<br> <br> public String generateMessage() {<br>  System.out.println(&quot;SimpleService executed&quot;);<br>  return &quot;Hello World&quot;;<br> }<br><br>}</pre><p><strong>Service Task:</strong> <em>HttpConnector — Get Implementation</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1dnxYbt0tYHeYJ8oK8dEEQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*Q0Eg_xoXjoJ1aEas-YCQdw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/588/1*jHe71N1Hq4gixVrR42zD-A.png" /></figure><p>Here were are using Camunda http-connector to make GET API call, you can use input parameters and output parameters under connector section.</p><p>Input parameters is to set URL , request body etc. and output parameters is used to receive response and process it.</p><blockquote><strong>ServiceTask:</strong> Http-Connector- POST method</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8uHesfUPArgQkMpy2XKhFQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/570/1*vnTYqX_1nNnmHDV6iWrIIA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/582/1*IR1lSala2HEXBSq--yvbEg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/559/1*weeK8g5HrLpKW3xAct2CMA.png" /></figure><blockquote><strong>Starting the process instance:</strong></blockquote><pre>@GetMapping(&quot;/getTest2&quot;)<br> public String test2() {<br>  ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();<br>  ProcessInstantiationBuilder instantiationBuilder =  processEngine.getRuntimeService().createProcessInstanceByKey(&quot;FirstProcess&quot;);<br>  <br>  instantiationBuilder.setVariable(&quot;name&quot;, &quot;ALEX&quot;);<br>  instantiationBuilder.executeWithVariablesInReturn();<br>  <br>  return &quot;Started Process Instance!!&quot;;<br> }</pre><p>you can start the process instance using Java SDK by using Camunda runtime services like above.</p><p><strong>Rest API method:</strong></p><p>POST: <a href="http://localhost:8080/engine-rest/process-definition/key/FirstProcess/start">http://localhost:8080/engine-rest/process-definition/key/<strong>FirstProcess</strong>/start</a></p><p>Body: {}</p><p>you can use Camunda provided rest api support like above where FirstProcess is the proces instance key of our workflow. Here i gave body as empty but based on the requirement we can pass the process variables as well.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=878cc05ac359" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BPMN And BPMN Elements]]></title>
            <link>https://medium.com/@praveenbuya/bpmn-and-bpmn-elements-44270d3e0f32?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/44270d3e0f32</guid>
            <category><![CDATA[bpmn]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[orchestration]]></category>
            <category><![CDATA[camunda]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Sun, 26 May 2024 05:30:19 GMT</pubDate>
            <atom:updated>2024-05-26T05:45:05.224Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5fddSDV-jV6fFnwj1u2VmA.png" /></figure><p>In this article we will learn about BPMN and its benefits, recognize most commonly used BPMN elements and model a simple BPMN diagram.</p><p><strong>BPMN in Context: </strong>Business Process Management(BPM) is a systematic approach for designing, executing, documenting , monitoring and controlling both automated and non automated processes.</p><p><strong>What is BPMN? </strong>Business Process Model and Notation(BPMN), is an open standard notation for business process modeling and process automation. BPMN specifies an agreed set of symbols for process modeling simple or complex business processes.</p><p><strong>Why you should use BPMN? </strong>The most important benefit is that it provides a common language for all stakeholders in an organization. It provides a graphical representation of a business process that anyone, from business analyst to developers to stakeholders can easily understand, aiding in business process analysis and business process improvement.</p><p>BPMN diagrams are represented in xml, which allows them to be executed by process engine allowing developers to easily implement and deploy the process. Where as business analyst can easily create and improve process diagrams using visual elements that anyone can understand. Developers are responsible for the technical implementation of process , Managers can monitor and control the processes.</p><p><strong>BPMN Elements:</strong></p><p>Any BPMN process consists of number of steps or activities which can be performed in sequential or in parallel according to business rules. In BPMN processes are described using diagrams containing series of graphical elements such visual representation makes it easier for users to understand the logic of the process. BPMN classifies the elements by categories so users can easily recognize them.</p><ol><li><strong><em>BPMN Flow elements:</em></strong></li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/975/1*55TRX8qXw8qv3r1ZT1DtXQ.png" /></figure><blockquote><strong>Events: </strong>They describe things that happened before ,during or end of the process. They can happen regardless of the process or as a result of the process , you can react to events or trigger events.</blockquote><blockquote><strong>Tasks: </strong>This is a step in the process an activity that needs to be done.</blockquote><blockquote><strong>Gateways:</strong> These are elements helping us present multiple paths in a process</blockquote><p>2. <strong><em>BPMN Connecting Elements:</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/507/1*e7an32Jan2AEQPEcqsqtmA.png" /></figure><blockquote><strong>Sequence Flows:</strong> This shows the order of elements in process</blockquote><p><strong>Simple BPMN Flow:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/917/1*oht1dBTTtVR5J2-6ihENeg.png" /></figure><p><strong>Start Event:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/97/1*K8AyUXvpVJGoz59BoP6YWA.png" /></figure><blockquote>A start event shows which event causes the process to start and it happens regardless of the process. It is labeled “Order Received”. As a best practice, when you label an event use the past tense because the action already happened when the event triggers.</blockquote><p><strong>Intermediate Event:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/94/1*L4KXM_VYzfv9P6jInnFVjA.png" /></figure><blockquote>This stands for a status reached in the process and that is modeled explicitly. As a use case, if you regard reaching a certain status as a milestone and you want to measure the time until the milestone is reached.</blockquote><p><strong>End Event:</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/85/1*wpa-OtWAdwrS5UiB81i1AQ.png" /></figure><blockquote>This represents the end of the process. It is possible to have one or more end events in a process. A use case multiple end events would be conditional process which can take different routes based upon business rules.(e.g Order Accepted or Order rejected)</blockquote><p><strong>Task :</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/129/1*heEeQiVq5kRRJzod41mpYg.png" /></figure><blockquote>This is a step in the process , an activity that has to be done. In this example after receiving the order you have to send a confirmation. This task is labeled “Send Order Confirmation”. As a best practice, when you label a task in a diagram always use a verb+ object.</blockquote><p><strong>Gateways:</strong></p><p>We will discuss on most used Gateways which are Exclusive Gateway (XOR) and Parallel Gateway.</p><ol><li><strong><em>Exclusive Gateway(XOR):</em></strong></li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/41/1*TP9Fm3aQA0N53Hty5M1V-Q.png" /></figure><blockquote>This is a Data-Based decision gateway , which means the decision does not happen in the gateway but it only evaluates available data. We have to choose exactly one outgoing sequence flow. It is not possible to continue in both directions.And exclusive gateway can be used in cases to split or merge the flow as show in process model below.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/867/1*Xlk6pAfn4tRA8cAUqJ5Ixg.png" /></figure><p>2. <strong><em>Parallel Gateway:</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/31/1*SSnf2H-FmZxJAwP1ILWMag.png" /></figure><blockquote>This is not based on a decision but only defined through the incoming and outgoing sequence flows. It is used to parallelization of flow or as well of synchronization of flow which is shown as below.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/942/1*Vt0MZ9z9JsnkxUp8vqsZQg.png" /></figure><p>This concludes this article on what is BPMN and commonly used elements of BPMN. In next article we will some advance elements of BPMN. If you want to Camunda and its Ecosystem here is the link for my previous article <a href="https://medium.com/@praveenbuya/camunda-ecosystem-5a44ba68c450">here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=44270d3e0f32" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Camunda EcoSystem]]></title>
            <link>https://medium.com/@praveenbuya/camunda-ecosystem-5a44ba68c450?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/5a44ba68c450</guid>
            <category><![CDATA[cockpit]]></category>
            <category><![CDATA[modelor]]></category>
            <category><![CDATA[cawemo]]></category>
            <category><![CDATA[camund-ecosystem]]></category>
            <category><![CDATA[camunda]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Tue, 07 May 2024 18:43:32 GMT</pubDate>
            <atom:updated>2024-05-07T18:43:32.599Z</atom:updated>
            <content:encoded><![CDATA[<p><strong><em>In this blog we will understand what is Camunda all about and what is its ecosystem. We will start this series with Camunda7 and then move on to Camunda8 which is latest one at the time of writing this article. Hope your enjoy this series :)</em></strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/310/1*WXSLVxL4UmpThwVNQJj2Zw.jpeg" /></figure><blockquote>Camunda BPM is a Java based framework which is implementer of BPMN 2.0 specifications.<br>It is a light weight open source platform for business process management.<br>It is used for modeling and executing BPMN(Business processes workflows) , CMMN (Case Management)and DMN (Decision Management).<br>It provides a native API and also supports the standard BPMN 2.0 API. It is highly scalable and can handle high volumes of process instances and tasks.<br>Camunda BPM is a flexible framework for workflow and process automation. It’s open-source and written in Java, allowing it to be embedded into Java applications or used as a standalone process engine server.</blockquote><p>Here are some key features of Camunda:</p><ol><li><strong>BPMN 2.0, CMMN 1.1 and DMN 1.3:</strong> Camunda supports these standards for defining and executing business processes, case management models, and decision tables, respectively. This means you can model your processes using these widely accepted standards and execute them directly on Camunda.</li><li><strong>Java API and REST API:</strong> Camunda provides a native Java API that allows you to start, stop, and interact with business processes from within your Java applications. It also provides a REST API that allows you to interact with the process engine from any programming language.</li><li><strong>Scalability:</strong> Camunda is designed to be highly scalable. It can handle a large number of process instances and tasks, making it suitable for high-load scenarios.</li><li><strong>Embeddability:</strong> Camunda is designed to be embedded into Java applications. This means you can include the Camunda libraries in your application and use the Camunda engine as part of your application.</li><li><strong>Web applications:</strong> Camunda comes with web applications for monitoring and managing business processes. These include the Camunda Cockpit (for process monitoring and operations), the Camunda Admin (for user and group management), and the Camunda Tasklist (for task management).</li><li><strong>Extensibility:</strong> Camunda is designed to be extensible. You can add custom logic to your business processes by writing Java code that interacts with the Camunda engine.</li><li><strong>Spring and Spring Boot integration:</strong> Camunda provides integration with Spring and Spring Boot, making it easy to use Camunda in Spring applications.</li><li><strong>Microservices orchestration:</strong> Camunda can be used to orchestrate microservices. You can model your microservices interactions as BPMN processes and execute them on Camunda.</li><li><strong>Business-IT alignment:</strong> Camunda allows for a strong alignment between business analysts and developers as both can work on the same models. Business analysts can create models using the Camunda Modeler, and developers can take those models and easily execute them with the process engine.</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TyzFUbdoCGwajIpApclb8Q.jpeg" /></figure><p>We can divide Camunda Ecosystem into two parts</p><ol><li>Model</li><li>Execute</li></ol><p><strong>Model:</strong> This is were we can use <strong><em>Camunda Modeler</em> </strong>or <strong><em>Eclipse BPMN2</em> <em>Modeler</em> </strong>or<strong> <em>bpmn.io</em> to </strong>model our workflows there are also latest collaborative modeling tool like <strong><em>Cawemo</em></strong> that facilitates the design and specification of BPMN diagrams in a collaborative manner, bridging the gap between business analysts and developers.</p><p><strong>Execute: </strong>This is the main part of camunda which has components like TaskList, Cockpit, Admin, Camunda Engine, Database etc..</p><blockquote><strong><em>Tasklist</em></strong><em> is a web application provided by Camunda for managing and working on user tasks. It’s part of the Camunda BPM platform and is designed to be used by end users who are responsible for completing tasks in business processes. Key features include Task Management, Task Filtering, Forms, Process Interaction, Identity Management etc..</em></blockquote><blockquote><strong>Cockpit </strong>is a web-based administration tool that allows you to monitor and manage business processes and decisions in a Camunda BPM platform. It’s primarily designed for technical users such as system administrators and developers. Key features include Process Instance monitoring and modification , Job Management, Decisions, Batch operations etc..</blockquote><blockquote><strong>Admin </strong>is primarily designed for system administrators and provides features for managing users, groups, authorizations, system settings, integration with LDAP &amp; Active directory etc..</blockquote><blockquote><strong>Engine </strong>is the core component of the Camunda BPM platform. It’s a lightweight, open-source workflow and decision automation engine written in Java. The engine can execute BPMN 2.0, DMN 1.3, and CMMN 1.1 models, The engine provides a Java API and a REST API for interacting with the engine. You can start and stop process instances, complete tasks, query for tasks and process instances, and more.The engine supports both local and JTA transactions. It can participate in existing transactions or create new transactions as needed.The engine provides integration with Spring and Spring Boot, making it easy to use Camunda in Spring applications.</blockquote><blockquote><strong>Database</strong> — Camunda BPM platform uses a relational database to persist process instances, history data, and other runtime data. It supports a variety of relational databases like MySQL , PostgreSQL, MariaDB, Oracle, DB2, MSSQL, H2, CockroachDB etc..</blockquote><blockquote>It’s important to note that the choice of database can have an impact on the performance and scalability of your Camunda installation, so it’s worth considering your database choice carefully. Also its important what level of history we need and what are the task variables we are saving will also have an impact on performance. You can reach out to Camunda Community or enterprise to get indexes that helps improve the performance.</blockquote><p>Hope you like this article on high level overview of Camunda and its Ecosystem. See you in next article….</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5a44ba68c450" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Integrate Camunda BPMN on JBoss With MySQL]]></title>
            <link>https://medium.com/@praveenbuya/integrate-camunda-bpmn-on-jboss-with-mysql-e25adfc06273?source=rss-22b41ae491e1------2</link>
            <guid isPermaLink="false">https://medium.com/p/e25adfc06273</guid>
            <category><![CDATA[camunda]]></category>
            <category><![CDATA[camunda7]]></category>
            <category><![CDATA[jboss]]></category>
            <category><![CDATA[mysql]]></category>
            <dc:creator><![CDATA[Praveenbuya]]></dc:creator>
            <pubDate>Wed, 24 Apr 2024 09:17:48 GMT</pubDate>
            <atom:updated>2024-04-24T09:17:48.636Z</atom:updated>
            <content:encoded><![CDATA[<h3>In this quick post, we take a look at all the XML code and terminal commands you need to integrate these two interesting technologies.</h3><h3>Steps to Install and Setup Camunda on a Wildfly Server:</h3><p>We’ll be using <strong>Camunda version:7.8 </strong>and<strong> Wildfly server:10.1.0 </strong>in this tutorial.</p><ul><li>Install Java and set environment variables.</li><li>Connect to your VM using putty and run the below commands.</li></ul><pre>#JDK installation - - - - - - - - - - - <br>sudo apt-get install -y openjdk-8-jdk<br>export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/<br>export PATH=$PATH:/usr/lib/jvm/java-8-openjdk-amd64/bin</pre><ul><li>Download camunda-bpm-wildfly10-7.8.0.zip/camunda-bpm-wildfly10-7.8.0.tar file.</li><li>Navigate to /opt/camunda/server/wildfly-10.1.0.Final/standalone/deployments and add the war file.</li><li>Run start-camunda.sh in/opt/camunda directory.</li><li>To run Camunda as a background process: ./start-camunda.sh</li><li>By default, Camunda will use in-memory H2 DB for storing the process details.</li></ul><h3>Steps to Connect to MySQL DB:</h3><ul><li>Run the scripts present in below directory by selecting the files related to MySQL.</li><li>Once the tables are created, navigate to the<em> /opt/camunda/server/wildfly-10.1.0.Final/standalone/configuration/standalone.xml</em> file.</li><li>Add the Ccamunda subsystem as an extension:</li></ul><pre>&lt;server xmlns=&quot;urn:jboss:domain:1.1&quot;&gt;<br><br>  &lt;extensions&gt;<br><br>    ...<br><br>          &lt;extension module=&quot;org.camunda.bpm.wildfly.camunda-wildfly-subsystem&quot;/&gt;</pre><ul><li>Create a data source to connect to MySQL under the data sources section</li></ul><pre>&lt;datasource jndi-name=&quot;java:jboss/datasources/ExampleDS&quot; pool-name=&quot;ExampleDS&quot; enabled=&quot;true&quot; use-java-context=&quot;true&quot;&gt;<br>    &lt;connection-url&gt;jdbc:mysql://*hostname*/*dbname*&lt;/connection-url&gt;<br>    &lt;driver&gt;mysql&lt;/driver&gt;<br>    &lt;security&gt;<br>        &lt;user-name&gt;*username*&lt;/user-name&gt;<br>        &lt;password&gt;*password*&lt;/password&gt;<br>    &lt;/security&gt;<br>&lt;/datasource&gt;<br>&lt;datasource jta=&quot;true&quot; jndi-name=&quot;java:jboss/datasources/ProcessEngine&quot; pool-name=&quot;ProcessEngine&quot; enabled=&quot;true&quot; use-java-context=&quot;true&quot; use-ccm=&quot;true&quot;&gt;<br>    &lt;connection-url&gt; jdbc:mysql://*hostname*/*dbname*&lt;/connection-url&gt;<br>    &lt;driver&gt;mysql&lt;/driver&gt;<br>    &lt;security&gt;<br>        &lt;user-name&gt;*username*&lt;/user-name&gt;<br>      &lt;password&gt;*password*&lt;/password&gt;<br>    &lt;/security&gt;<br>    &lt;validation&gt;<br>        &lt;valid-connection-checker class-name=&quot;org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLValidConnectionChecker&quot; /&gt;<br>        &lt;exception-sorter class-name=&quot;org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter&quot; /&gt;<br>    &lt;/validation&gt;<br>&lt;/datasource&gt;</pre><ul><li>Under drivers add a MySQL driver.</li></ul><pre>&lt;driver name=&quot;mysql&quot; module=&quot;com.sql.mysql&quot;&gt;<br>    &lt;driver-class&gt;com.mysql.jdbc.Driver&lt;/driver-class&gt;<br>&lt;/driver&gt;</pre><ul><li>Navigate to <em>/opt/camunda/server/wildfly-10.1.0.Final/modules/com/mysql/driver/main</em> and add <em>mysql-connector-java-5.1.45-bin.jar </em>and<em> module.xml</em></li><li>In <em>module.xml,</em> add the below content.</li></ul><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br><br>&lt;module xmlns=&quot;urn:jboss:module:1.1&quot; name=&quot;com.sql.mysql&quot;&gt;<br>    &lt;resources&gt;<br>        &lt;resource-root path=&quot;mysql-connector-java-5.1.45-bin.jar&quot; /&gt;<br>    &lt;/resources&gt;<br>    &lt;dependencies&gt;<br>        &lt;module name=&quot;javax.api&quot; /&gt;<br>        &lt;module name=&quot;javax.transaction.api&quot; /&gt;<br>    &lt;/dependencies&gt;<br>&lt;/module&gt;</pre><ul><li>Change the subsystem IP to point to the VM’s internal IP.</li></ul><pre>&lt;wsdl-host&gt;${jboss.bind.address:*IP*}&lt;/wsdl-host&gt;</pre><ul><li>And also change the management interface’s IP to point to the internal IP.</li></ul><pre>&lt;interfaces&gt;   <br>  &lt;interface name=&quot;management&quot;&gt;        <br>    &lt;inet-address value=&quot;${jboss.bind.address.management:*IP*}&quot; /&gt;    <br>  &lt;/interface&gt;    <br>  &lt;interface name=&quot;public&quot;&gt;     <br>    &lt;inet-address value=&quot;${jboss.bind.address:*IP*}&quot; /&gt;   <br>  &lt;/interface&gt;<br>&lt;/interfaces&gt;</pre><p>That’s it you are done with running your Camunda Bpm connecting to MySql as Database.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e25adfc06273" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>