{"id":477,"date":"2020-06-27T16:46:31","date_gmt":"2020-06-27T16:46:31","guid":{"rendered":"http:\/\/www.canchito-dev.com\/public\/blog\/?p=477"},"modified":"2021-05-02T13:38:38","modified_gmt":"2021-05-02T13:38:38","slug":"use-flowable-apps-with-a-custom-rest-api","status":"publish","type":"post","link":"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/06\/27\/use-flowable-apps-with-a-custom-rest-api\/","title":{"rendered":"Use Flowable Apps with a Custom REST API"},"content":{"rendered":"<p style=\"text-align: justify;\"><div class=\"perfect-pullquote vcard pullquote-align-full pullquote-border-placement-left\"><blockquote><p><\/p>\n<p style=\"text-align: justify;\">In this post, you will learn how configure Flowable&#8217;s apps to use your custom Spring Boot REST API as a backend engine. All this, in a dockerized environment.<\/p>\n<p style=\"text-align: justify;\"><\/p><\/blockquote><\/div><\/p>\n<div>\n  <a class=\"donate-with-crypto\"\n     href=\"https:\/\/commerce.coinbase.com\/checkout\/faf64f90-2e80-46ee-aeba-0fde14cbeb46\"><br \/>\n    Buy Me a Coffee<br \/>\n  <\/a><br \/>\n  <script src=\"https:\/\/commerce.coinbase.com\/v1\/checkout.js?version=201807\">\n  <\/script>\n<\/div>\n<h2 style=\"text-align: justify;\">What you\u2019ll need<\/h2>\n<ul style=\"text-align: justify;\">\n<li>About 30 minutes<\/li>\n<li>Docker Desktop for you operating system already installed. For this tutorial, we used Docker Desktop for Windows. You can download it from <a href=\"https:\/\/docs.docker.com\/docker-for-windows\/install\/\">here<\/a>.<\/li>\n<li>Download Flowable war files. You can download them from <a href=\"https:\/\/github.com\/flowable\/flowable-engine\/releases\/download\/flowable-6.5.0\/flowable-6.5.0.zip\">here<\/a>. We need a fresh copy without any modification.<\/li>\n<li>Download MySQL Connector\/J. You can download it from <a href=\"https:\/\/dev.mysql.com\/downloads\/connector\/j\/\">here<\/a>.<\/li>\n<li>A Spring Boot application that has Flowable&#8217;s engine integrated. You can follow our post <a href=\"http:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/12\/integrate-flowable-into-your-spring-boot-application\">Integrate Flowable into your Spring Boot Application<\/a> if you do not have one.<\/li>\n<li>A favorite IDE. In this post, we use <a href=\"https:\/\/www.jetbrains.com\/idea\/download\/index.html\">Intellij Community<\/a><\/li>\n<li><a href=\"http:\/\/www.oracle.com\/technetwork\/java\/javase\/downloads\/index.html\">JDK 7<\/a> or later. It can be made to work with JDK6, but it will need configuration tweaks. Please check the Spring Boot documentation<\/li>\n<\/ul>\n<h2 style=\"text-align: justify;\">Introduction<\/h2>\n<p style=\"text-align: justify;\">Flowable offers four web applications to help us understand the functionalities provided by the project. Here is a brief description of these four apps (quoting Flowable&#8217;s documentation):<\/p>\n<ul>\n<li style=\"text-align: justify;\"><strong>Flowable IDM:<\/strong> an Identity Management application that provides single sign-on authentication functionality for all the Flowable UI applications, and, for users with the IDM administrative privilege, it also provides functionality to manage users, groups and privileges.<\/li>\n<li style=\"text-align: justify;\"><strong>Flowable Modeler:<\/strong> an application that allows users with modeler privileges to model processes, forms, decision tables and application definitions.<\/li>\n<li style=\"text-align: justify;\"><strong>Flowable Task:<\/strong> a runtime task application that provides functionality to start process instances, edit task forms, complete tasks and query on tasks and process instances.<\/li>\n<li style=\"text-align: justify;\"><strong>Flowable Admin:<\/strong> an administrative application that allows users with admin privilege to query the BPMN, DMN, form and content engines and provides several options to change process instances, tasks, jobs and so on. The admin application connects to the engines through the REST API that is deployed together with the Flowable Task app and the Flowable REST app.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">By default, all the apps connect to the Flowable Task REST API, but you can easily change this to use the Flowable REST app or a custom REAT API instead. Let&#8217;s see how this is done.<\/p>\n<h2>Folder Structure<\/h2>\n<p>This is the folder structure that we will be using for this tutorial:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">root \r\n  |- flowable-docker \r\n       |- wars \r\n           |- flowable-admin.war \r\n           |- flowable-idm.war \r\n           |- flowable-modeler.war \r\n           |- flowable-task.war \r\n           |- spring-flowable-integration-1.0.0.war\r\n       |- tomcat-users-xml \r\n       |- DockerfileRest\r\n       |- DockerfileTomcat\r\n       |- docker-compose.xml<\/pre>\n<h2>Integrating Flowable into a Spring Boot Application<\/h2>\n<p style=\"text-align: justify;\">For this tutorial, you will need a Spring Boot app which includes Flowable&#8217;s engine and REST API. If you do not have one, you can either create one by following the steps explained in our post <a href=\"http:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/12\/integrate-flowable-into-your-spring-boot-application\">Integrate Flowable into your Spring Boot Application<\/a>.<\/p>\n<p style=\"text-align: justify;\">In our example, we will use the app created in our previous post. However, we will do some modifications. Download the source code from our <a href=\"https:\/\/github.com\/canchito-dev\/spring-flowable-integration\">GitHub<\/a> repository, and open it with your favorite IDE.<\/p>\n<p style=\"text-align: justify;\">Once loaded, open the <code>pom.xml<\/code> file and add the following MySQL dependency:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\">&lt;dependency&gt;\r\n  &lt;groupId&gt;mysql&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\r\n  &lt;scope&gt;runtime&lt;\/scope&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p style=\"text-align: justify;\">Now, compile it, generate the war file and copy it to the folder <code>\/root\/flowable-docker\/wars<\/code>. Notice that we have rename the file to <em>spring-flowable-integration-1.0.0.war<\/em>.<\/p>\n<h2>Creating the Tomcat User file<\/h2>\n<p>So that we can access the management app&#8217;s web page that Tomcat offers, we can add some user with valid credentials and roles. Create the following file and called <em>tomcat-users.xml<\/em> under <code>flowable-docker<\/code> folder:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\">&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;tomcat-users xmlns=\"http:\/\/tomcat.apache.org\/xml\"\r\n              xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n              xsi:schemaLocation=\"http:\/\/tomcat.apache.org\/xml tomcat-users.xsd\"\r\n              version=\"1.0\"&gt;\r\n  &lt;user \r\n       username=\"tomcat\" \r\n       password=\"tomcat\"\r\n       roles=\"tomcat,standard,manager-gui,manager-status,manager-script,manager-jmx\"\r\n  \/&gt;\r\n&lt;\/tomcat-users&gt;\r\n<\/pre>\n<p style=\"text-align: justify;\">Here, we have created a user called <code>tomcat<\/code>, with <code>tomcat<\/code> as password, and assigned the following roles: <code class=\"EnlighterJSRAW\" data-enlighter-language=\"xml\">tomcat,standard,manager-gui,manager-status,manager-script,manager-jmx<\/code>.<\/p>\n<h2>Creating the Dockerfile for the Tomcat Service<\/h2>\n<p style=\"text-align: justify;\">Docker has a simple file format called <a href=\"https:\/\/docs.docker.com\/reference\/builder\/\"><code>Dockerfile<\/code><\/a>, which uses to specify the <em>layers<\/em>\u00a0of an image. Having said this, let\u2019s go ahead and create a <code>Dockerfile<\/code> for our Tomcat service using your favorite text editor under <code>flowable-docker<\/code> folder. Name it <em>DockerfileTomcat<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dockerfile\"># Use an official Tomcat runtime as a parent image \r\nFROM tomcat:8.0-jre8 \r\n\r\nENV DIRPATH \/usr\/local\/tomcat \r\n\r\n# Copy Tomcat users into the container at \/conf \r\nCOPY .\/tomcat-users.xml $DIRPATH\/conf \r\n\r\n# Copy flowable-admin war file into the container at \/webapps \r\nCOPY .\/wars\/flowable-admin.war $DIRPATH\/webapps \r\n\r\n# Copy flowable-idm war file into the container at \/webapps \r\nCOPY .\/wars\/flowable-idm.war $DIRPATH\/webapps \r\n\r\n# Copy flowable-modeler war file into the container at \/webapps \r\nCOPY .\/wars\/flowable-modeler.war $DIRPATH\/webapps \r\n\r\n# Copy flowable-task war file into the container at \/webapps \r\nCOPY .\/wars\/flowable-task.war $DIRPATH\/webapps \r\n\r\n# Make port 8080 available to the world outside this container \r\nEXPOSE 8080 \r\n\r\n# Run CMD \"catalina.sh\" when the container launches \r\nCMD [\"catalina.sh\", \"run\"]<\/pre>\n<p style=\"text-align: justify;\">This <code>Dockerfile<\/code> is very simple, but that\u2019s all you need to run a container with Tomcat. This is what the file does:<\/p>\n<ol>\n<li><code>COPY<\/code> the file <em>tomcat-users.xml<\/em> to <code>\/user\/local\/tomcat\/conf<\/code><\/li>\n<li><code>COPY<\/code> <em>flowable-admin<\/em> war file into the container at <code>\/webapps<\/code><\/li>\n<li><code>COPY<\/code> <em>flowable-idm<\/em> war file into the container at <code>\/webapps<\/code><\/li>\n<li><code>COPY<\/code> <em>flowable-modeler<\/em> war file into the container at <code>\/webapps<\/code><\/li>\n<li><code>COPY<\/code> <em>flowable-task<\/em> war file into the container at <code>\/webapps<\/code><\/li>\n<li>Make port 8080 available to the world outside this container<\/li>\n<li>Run <code>CMD<\/code> <code>catalina.sh<\/code> when the container launches<\/li>\n<\/ol>\n<h2>Creating the Dockerfile for the Spring Boot Application<\/h2>\n<p style=\"text-align: justify;\">The <a href=\"https:\/\/docs.docker.com\/reference\/builder\/\"><code>Dockerfile<\/code><\/a>\u00a0 used for our Spring Boot app is also very simple too. Create a <code>Dockerfile<\/code> for it using your favorite text editor under <code>flowable-docker<\/code> folder. Name it <em>DockerfileRest<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dockerfile\"># Use an official alphine as a parent image\r\nFROM openjdk:8-jdk-alpine\r\n\r\n# Copy spring-flowable-integration war file into the container \r\nCOPY .\/wars\/spring-flowable-integration-1.0.0.war app.war\r\n\r\n# Run the app when the container launches \r\nENTRYPOINT [\"java\", \"-jar\", \"app.war\"]<\/pre>\n<p style=\"text-align: justify;\">This <code>Dockerfile<\/code> is very simple, but that\u2019s all you need to run a container with Tomcat. This is what the file does:<\/p>\n<ol>\n<li><code>COPY<\/code> the file <em>spring-flowable-integration-1.0.0.war<\/em> and name is <em>app.war<\/em><\/li>\n<li>Run <code>ENTRYPOINT<\/code> <code>java -jar app.war<\/code>\u00a0when the container launches<\/li>\n<\/ol>\n<h2>Creating docker-compose.yml file<\/h2>\n<p style=\"text-align: justify;\">In the file, we specify several services:<\/p>\n<ul>\n<li style=\"text-align: justify;\"><em>mysql-db<\/em>: Runs a MySQL database.<\/li>\n<li style=\"text-align: justify;\"><em><a href=\"https:\/\/www.adminer.org\/en\/\">adminer<\/a><\/em>: Database manager, so that we can access the database from a web interface.<\/li>\n<li><em>backend-rest<\/em>: Alphine system from which our custom REST API is executed.<\/li>\n<li style=\"text-align: justify;\"><em>tomcat<\/em>: Runs an Apache Tomcat web server, and all of Flowable&#8217;s apps.<\/li>\n<\/ul>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dockerfile\">version: '3.7'\r\nservices:\r\n  mysql-db:\r\n    image: mysql:5.7.26\r\n    container_name: mysql\r\n    command: --default-authentication-plugin=mysql_native_password\r\n    volumes:\r\n      - db_data:\/var\/lib\/mysql\r\n    environment:\r\n      MYSQL_ROOT_PASSWORD: flowable\r\n      MYSQL_USER: flowable\r\n      MYSQL_PASSWORD: flowable\r\n      MYSQL_DATABASE: flowable\r\n    ports:\r\n      - \"3306:3306\" # Forward the exposed port 3306 on the container to port 3306 on the host machine\r\n    networks:\r\n      - service-network\r\n\r\n  adminer:\r\n    image: adminer\r\n    container_name: adminer\r\n    ports:\r\n      - 18080:8080\r\n    networks:\r\n      - service-network\r\n\r\n  backend-rest:\r\n    build: \r\n      context: .\r\n      dockerfile: DockerfileRest\r\n    image: openjdk:8-jdk-alpine\r\n    container_name: backend-rest-api\r\n    ports:\r\n      - \"8181:8080\" # Forward the exposed port 8181 on the container to port 8080 on the host machine\r\n    environment:\r\n      - SERVER_PORT=8080\r\n      - SERVER_SERVLET_CONTEXT-PATH=\/rest\r\n      - SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.cj.jdbc.Driver\r\n      - SPRING_DATASOURCE_URL=jdbc:mysql:\/\/mysql-db:3306\/flowable?autoReconnect=true\r\n      - SPRING_DATASOURCE_USERNAME=flowable\r\n      - SPRING_DATASOURCE_PASSWORD=flowable\r\n    depends_on:\r\n      - mysql-db # This service depends on mysql. Start that first\r\n    networks:\r\n      - service-network\r\n\r\n  tomcat:\r\n    build: \r\n      context: .\r\n      dockerfile: DockerfileTomcat\r\n    image: tomcat:8.0-jre8\r\n    container_name: tomcat-with-flowable-apps\r\n    ports:\r\n      - \"8080:8080\" # Forward the exposed port 8080 on the container to port 8080 on the host machine \r\n    environment:\r\n      - SPRING_DATASOURCE_DRIVER-CLASS-NAME=com.mysql.cj.jdbc.Driver\r\n      - SPRING_DATASOURCE_URL=jdbc:mysql:\/\/mysql-db:3306\/flowable?autoReconnect=true\r\n      - SPRING_DATASOURCE_USERNAME=flowable\r\n      - SPRING_DATASOURCE_PASSWORD=flowable\r\n      - FLOWABLE_COMMON_APP_IDM-URL=http:\/\/localhost:8080\/flowable-idm\r\n      - FLOWABLE_COMMON_APP_IDM-REDIRECT-URL=http:\/\/localhost:8080\/flowable-idm\r\n      - FLOWABLE_COMMON_APP_IDM-ADMIN_USER=admin\r\n      - FLOWABLE_COMMON_APP_IDM-ADMIN_PASSWORD=test\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_PROCESS_SERVER-ADDRESS=http:\/\/backend-rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_PROCESS_PORT=8080\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_PROCESS_CONTEXT-ROOT=rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_PROCESS_REST-ROOT=process-api\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CMMN_SERVER-ADDRESS=http:\/\/backend-rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CMMN_PORT=8080\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CMMN_CONTEXT-ROOT=rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CMMN_REST-ROOT=cmmn-api\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_DMN_SERVER-ADDRESS=http:\/\/backend-rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_DMN_PORT=8080\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_DMN_CONTEXT-ROOT=rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_DMN_REST-ROOT=dmn-api\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_FORM_SERVER-ADDRESS=http:\/\/backend-rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_FORM_PORT=8080\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_FORM_CONTEXT-ROOT=rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_FORM_REST-ROOT=form-api\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CONTENT_SERVER-ADDRESS=http:\/\/backend-rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CONTENT_PORT=8080\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CONTENT_CONTEXT-ROOT=rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_CONTENT_REST-ROOT=content-api\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_APP_SERVER-ADDRESS=http:\/\/backend-rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_APP_PORT=8080\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_APP_CONTEXT-ROOT=rest\r\n      - FLOWABLE_ADMIN_APP_SERVER-CONFIG_APP_REST-ROOT=app-api\r\n      - FLOWABLE_MODELER_APP_DEPLOYMENT-API-URL=http:\/\/backend-rest:8080\/rest\/app-api\r\n    depends_on:\r\n      - mysql-db # This service depends on mysql. Start that first\r\n      - backend-rest\r\n    networks:\r\n      - service-network\r\n\r\n# Networks to be created to facilitate communication between containers\r\nnetworks:\r\n  service-network:\r\n\r\n# Volumes\r\nvolumes:\r\n    db_data: {}\r\n<\/pre>\n<p style=\"text-align: justify;\">So that the containers can communicate between them, we have created a network that we have called <em>service-network<\/em>.<\/p>\n<p style=\"text-align: justify;\">Let&#8217;s have a quick look at <em>mysql-db<\/em> service&#8217;s configuration. When you start the <code>mysql<\/code> image, you can adjust the configuration of the MySQL instance by passing one or more environment variables. Do note that none of the variables will have any effect if you start the container with a data directory that already contains a database: any pre-existing database will always be left untouched on container startup.<\/p>\n<p style=\"text-align: justify;\">With the environment variables that we are configuring, according to the official documentation, the database <em>flowable<\/em> will automatically be created, and the users <em>root<\/em> and <em>flowable<\/em> will be granted all privileges.<\/p>\n<p style=\"text-align: justify;\"><em>backend-rest<\/em> service configuration is very straight forward. We are telling it to use <em>DockerfileRest<\/em> and passing some environment variables which tells <em>spring-flowable-integration-1.0.0.war<\/em>\u00a0how to connect to the MySQL database.<\/p>\n<p style=\"text-align: justify;\">Meanwhile, for our <em>tomcat<\/em> service, we are not only telling it to use <em>DockerfileTomcat<\/em> but also passing some environment variables as well. Please notice that in most of the environment variables, we are specifying the <em>backend-rest<\/em> service as host, and the port to use, is also the <em>backend-rest<\/em> service&#8217;s internal port. Not the exposed port.<\/p>\n<p style=\"text-align: justify;\">Nevertheless, variables <code class=\"EnlighterJSRAW\" data-enlighter-language=\"dockerfile\">FLOWABLE_COMMON_APP_IDM<\/code> and <code class=\"EnlighterJSRAW\" data-enlighter-language=\"dockerfile\">FLOWABLE_COMMON_APP_IDM-REDIRECT-URL<\/code> are using localhost as host value. The do not need to be changed, because they are for internal use among Flowable&#8217;s web applications. So, the communication is within the same container.<\/p>\n<h2>Start the containers<\/h2>\n<p>Run the following command <code class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">docker-compose build<\/code> and build the images:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">$ docker-compose build\r\nmysql-db uses an image, skipping\r\nadminer uses an image, skipping\r\nBuilding backend-rest\r\nStep 1\/4 : FROM openjdk:8-jdk-alpine\r\n8-jdk-alpine: Pulling from library\/openjdk\r\ne7c96db7181b: Pull complete\r\nf910a506b6cb: Pull complete\r\nc2274a1a0e27: Pull complete\r\nDigest: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3\r\nStatus: Downloaded newer image for openjdk:8-jdk-alpine\r\n ---&gt; a3562aa0b991\r\nStep 2\/4 : COPY .\/wars\/spring-flowable-integration-1.0.0.war app.war\r\n ---&gt; 328a650aaaae\r\nStep 3\/4 : COPY .\/wait-for-something.sh wait-for-something.sh\r\n ---&gt; c0b3e8e15063\r\nStep 4\/4 : ENTRYPOINT [\"java\", \"-jar\", \"app.war\"]\r\n ---&gt; Running in dff38b65e12c\r\nRemoving intermediate container dff38b65e12c\r\n ---&gt; 592920898ce3\r\n\r\nSuccessfully built 592920898ce3\r\nSuccessfully tagged openjdk:8-jdk-alpine\r\nBuilding tomcat\r\nStep 1\/9 : FROM tomcat:8.0-jre8\r\n8.0-jre8: Pulling from library\/tomcat\r\n05d1a5232b46: Pull complete\r\n5cee356eda6b: Pull complete\r\n89d3385f0fd3: Pull complete\r\n65dd87f6620b: Pull complete\r\n78a183a01190: Pull complete\r\n1a4499c85f97: Pull complete\r\n2c9d39b4bfc1: Pull complete\r\n1b1cec2222c9: Pull complete\r\nfc95b85a81f3: Pull complete\r\n0f3868647539: Pull complete\r\na3921d755681: Pull complete\r\n350389afc69e: Pull complete\r\nDigest: sha256:268403c3fa09afd9310ced7e83ac021927dca0f04a394a80a0b0220f62e056ed\r\nStatus: Downloaded newer image for tomcat:8.0-jre8\r\n ---&gt; 8391ef8f6ae4\r\nStep 2\/9 : ENV DIRPATH \/usr\/local\/tomcat\r\n ---&gt; Running in 7294bfc81b3e\r\nRemoving intermediate container 7294bfc81b3e\r\n ---&gt; 61f7d119a9bb\r\nStep 3\/9 : COPY .\/mysql-connector-java-8.0.16.jar $DIRPATH\/lib\r\n ---&gt; e70ed1c8ab5f\r\nStep 4\/9 : COPY .\/tomcat-users.xml $DIRPATH\/conf\r\n ---&gt; da0dc3eb4e87\r\nStep 5\/9 : COPY .\/wars\/flowable-idm.war $DIRPATH\/webapps\r\n ---&gt; 21fa5e740c81\r\nStep 6\/9 : COPY .\/wars\/flowable-admin.war $DIRPATH\/webapps\r\n ---&gt; 0f083ba05938\r\nStep 7\/9 : COPY .\/wars\/flowable-modeler.war $DIRPATH\/webapps\r\n ---&gt; 800bb455304b\r\nStep 8\/9 : COPY .\/wars\/flowable-task.war $DIRPATH\/webapps\r\n ---&gt; d6b345404627\r\nStep 9\/9 : CMD [\"catalina.sh\", \"run\"]\r\n ---&gt; Running in d9230b2e015c\r\nRemoving intermediate container d9230b2e015c\r\n ---&gt; 364788d74804\r\n\r\nSuccessfully built 364788d74804\r\nSuccessfully tagged tomcat:8.0-jre8<\/pre>\n<p style=\"text-align: justify;\">In my case, I already had an image for <em>mysql-db<\/em> and <em>adminer<\/em>, so they were skipped. However, the <code>Dockerfile<\/code> for the <em>backend-rest<\/em> and <em>tomcat<\/em> services were executed.<\/p>\n<p style=\"text-align: justify;\">Now we just need to start the services by executing the following command <code class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">docker-compose up -d<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">$ docker-compose up -d\r\nCreating network \"flowable-custom-rest_service-network\" with the default driver\r\nCreating volume \"flowable-custom-rest_db_data\" with default driver\r\nPulling mysql-db (mysql:5.7.26)...\r\n5.7.26: Pulling from library\/mysql\r\n0a4690c5d889: Pull complete\r\n98aa2fc6cbeb: Pull complete\r\n0777e6eb0e6f: Pull complete\r\n2464189c041c: Pull complete\r\nb45df9dc827d: Pull complete\r\nb42b00086160: Pull complete\r\nbb93567627c7: Pull complete\r\n48acc32b4863: Pull complete\r\n6257d2da4815: Pull complete\r\n1cd5ed3b2653: Pull complete\r\nf4ba7ff24ae9: Pull complete\r\nDigest: sha256:bdee7a98276ccf377d2c00b8ceaa9f65455a9376481467bbcc3d1e6b662dac5d\r\nStatus: Downloaded newer image for mysql:5.7.26\r\nPulling adminer (adminer:)...\r\nlatest: Pulling from library\/adminer\r\ncbdbe7a5bc2a: Pull complete\r\n1bc86e4cff5f: Pull complete\r\n7be142bd33f5: Pull complete\r\n8132c9e52be3: Pull complete\r\na137357f3ccd: Pull complete\r\nd20a867f685c: Pull complete\r\n5cb708ec8e9a: Pull complete\r\n0d70b58097d6: Pull complete\r\n2ecb47295b41: Pull complete\r\n121f9efe481e: Pull complete\r\nd7c616de3ab5: Pull complete\r\nfa518f083971: Pull complete\r\n161cb5763d0b: Pull complete\r\n948b9fab056c: Pull complete\r\n066e297dac24: Pull complete\r\nDigest: sha256:3dcbff606471c2cae9af7ab313fdbbc17c4fbb502f26f311eab140f73e559f75\r\nStatus: Downloaded newer image for adminer:latest\r\nCreating adminer ... done\r\nCreating mysql   ... done\r\nCreating backend-rest-api ... done\r\nCreating tomcat-with-flowable-apps ... done<\/pre>\n<p style=\"text-align: justify;\">if you list the active container using the command <code class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">docker container ls -a<\/code>, you should be able to see something like this:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">$ docker container ls -a\r\nCONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                               NAMES\r\n3d768d4e49f4        tomcat:8.0-jre8        \"catalina.sh run\"        3 hours ago         Up 3 hours          0.0.0.0:8080-&gt;8080\/tcp              tomcat-with-flowable-apps\r\n615a509adabb        openjdk:8-jdk-alpine   \"java -jar app.war\"      3 hours ago         Up 3 hours          0.0.0.0:8181-&gt;8080\/tcp              backend-rest-api\r\nca380f524165        mysql:5.7.26           \"docker-entrypoint.s\u2026\"   3 hours ago         Up 3 hours          0.0.0.0:3306-&gt;3306\/tcp, 33060\/tcp   mysql\r\n4f72bede870d        adminer                \"entrypoint.sh docke\u2026\"   3 hours ago         Up 3 hours          0.0.0.0:18080-&gt;8080\/tcp             adminer<\/pre>\n<p>To see the logs of the tomcat container, type the command <code class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">docker logs -f CONTAINER_ID<\/code>.<\/p>\n<h2>Let&#8217;s see the result<\/h2>\n<p style=\"text-align: justify;\">After a few moments, you should be able to access Tomcat&#8217;s home page (<a href=\"http:\/\/localhost:8080\/\">http:\/\/localhost:8080\/<\/a>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"441\" data-permalink=\"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/13\/deploying-flowable-in-a-docker-container-and-mysql-part-1\/tomcat_main_page-2\/\" data-orig-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png\" data-orig-size=\"1012,925\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"CANCHITO-DEV: Tomcat Main\" data-image-description=\"&lt;p&gt;CANCHITO-DEV: Tomcat Main&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;CANCHITO-DEV: Tomcat Main&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1-300x274.png\" data-large-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png\" class=\"aligncenter wp-image-441 size-full\" src=\"http:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png\" alt=\"CANCHITO-DEV: Tomcat Main\" width=\"1012\" height=\"925\" srcset=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png 1012w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1-300x274.png 300w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1-768x702.png 768w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1-624x570.png 624w\" sizes=\"auto, (max-width: 1012px) 100vw, 1012px\" \/><\/p>\n<p style=\"text-align: justify;\">Now, click on the button <strong>&lt;Manager App&gt;<\/strong>. It should prompt you for the credentials that we previously created.<\/p>\n<p style=\"text-align: justify;\">Make sure that Flowable&#8217;s apps are up and running.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"447\" data-permalink=\"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/13\/deploying-flowable-in-a-docker-container-and-mysql-part-1\/tomcat_manager_app\/\" data-orig-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app.png\" data-orig-size=\"1900,860\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"CANCHITO-DEV: Tomcat Manager App\" data-image-description=\"&lt;p&gt;CANCHITO-DEV: Tomcat Manager App&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;CANCHITO-DEV: Tomcat Manager App&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-300x136.png\" data-large-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-1024x463.png\" class=\"aligncenter wp-image-447 size-full\" src=\"http:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app.png\" alt=\"CANCHITO-DEV: Tomcat Manager App\" width=\"1900\" height=\"860\" srcset=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app.png 1900w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-300x136.png 300w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-1024x463.png 1024w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-768x348.png 768w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-1536x695.png 1536w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_manager_app-624x282.png 624w\" sizes=\"auto, (max-width: 1900px) 100vw, 1900px\" \/><\/p>\n<p>If they are, you should be able to access Flowable&#8217;s apps by visiting the following URLs:<\/p>\n<ul>\n<li>Flowable IDM: <a href=\"http:\/\/localhost:8080\/flowable-idm\/\">http:\/\/localhost:8080\/flowable-idm\/<\/a><\/li>\n<li>Flowable Admin: <a href=\"http:\/\/localhost:8080\/flowable-admin\/\">http:\/\/localhost:8080\/flowable-admin\/<\/a><\/li>\n<li>Flowable Modeler: <a href=\"http:\/\/localhost:8080\/flowable-modeler\/\">http:\/\/localhost:8080\/flowable-modeler\/<\/a><\/li>\n<li>Flowable Task: <a href=\"http:\/\/localhost:8080\/flowable-task\/\">http:\/\/localhost:8080\/flowable-task\/<\/a><\/li>\n<\/ul>\n<p>Remember that you will be prompted to log in by Flowable&#8217;s IDM. Enter <em>admin<\/em> as user and <em>test<\/em> as password.<\/p>\n<p>When opening Flowable&#8217;s Admin web app, and heading to the configuration screen, you should see that all the endpoints are configured to use our <em>backend-rest<\/em> service.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"485\" data-permalink=\"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/06\/27\/use-flowable-apps-with-a-custom-rest-api\/flowable-admin-engine-configuration\/\" data-orig-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration.png\" data-orig-size=\"1183,897\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"CANCHITO-DEV: Flowable Admin with custom REST API\" data-image-description=\"&lt;p&gt;CANCHITO-DEV: Flowable Admin with custom REST API&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;CANCHITO-DEV: Flowable Admin with custom REST API&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration-300x227.png\" data-large-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration-1024x776.png\" class=\"aligncenter wp-image-485 size-full\" src=\"http:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration.png\" alt=\"CANCHITO-DEV: Flowable Admin with custom REST API\" width=\"1183\" height=\"897\" srcset=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration.png 1183w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration-300x227.png 300w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration-1024x776.png 1024w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration-768x582.png 768w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/flowable-admin-engine-configuration-624x473.png 624w\" sizes=\"auto, (max-width: 1183px) 100vw, 1183px\" \/><\/p>\n<p>And if you used the Spring Boot app that we created in our post <a href=\"http:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/12\/integrate-flowable-into-your-spring-boot-application\">Integrate Flowable into your Spring Boot Application<\/a>, you should at least see one deployment.<img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"486\" data-permalink=\"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/06\/27\/use-flowable-apps-with-a-custom-rest-api\/process-engine-deployments\/\" data-orig-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments.png\" data-orig-size=\"1160,382\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"CANCHITO-DEV: Process engine deployments in Flowable Admin\" data-image-description=\"&lt;p&gt;CANCHITO-DEV: Process engine deployments in Flowable Admin&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;CANCHITO-DEV: Process engine deployments in Flowable Admin&lt;\/p&gt;\n\" data-medium-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments-300x99.png\" data-large-file=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments-1024x337.png\" class=\"aligncenter wp-image-486 size-full\" src=\"http:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments.png\" alt=\"CANCHITO-DEV: Process engine deployments in Flowable Admin\" width=\"1160\" height=\"382\" srcset=\"https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments.png 1160w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments-300x99.png 300w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments-1024x337.png 1024w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments-768x253.png 768w, https:\/\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/process-engine-deployments-624x205.png 624w\" sizes=\"auto, (max-width: 1160px) 100vw, 1160px\" \/><\/p>\n<h2>Stopping the container<\/h2>\n<p style=\"text-align: justify;\">When you are done working with Flowable&#8217;s apps, you can stop and remove Docker containers, images, networks and volumes with the help of this command <code class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">docker-compose down -v<\/code>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">$ docker-compose down -v\r\nStopping tomcat-with-flowable-apps ... done\r\nStopping backend-rest-api          ... done\r\nStopping mysql                     ... done\r\nStopping adminer                   ... done\r\nRemoving tomcat-with-flowable-apps ... done\r\nRemoving backend-rest-api          ... done\r\nRemoving mysql                     ... done\r\nRemoving adminer                   ... done\r\nRemoving network flowable-custom-rest_service-network\r\nRemoving volume flowable-custom-rest_db_data\r\n<\/pre>\n<h2 style=\"text-align: justify;\">Summary<\/h2>\n<p style=\"text-align: justify;\">In this post, we have shown how to deploy Flowable&#8217;s Apps in a dockerized environment, using a MySQL database, and using a custom Spring Boot REST API that implements Flowable&#8217;s engine as backend. We hope that, even though this was a very basic introduction, you understood how to use and configure them. We will try to go deeper into Flowable in upcoming posts.<\/p>\n<p style=\"text-align: justify;\">Please feel free to contact us. We will gladly response to any doubt or question you might have.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this post, you will learn how configure Flowable&#8217;s apps to use your custom Spring Boot REST API as a backend engine. All this, in a dockerized environment.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[31,74,30,61,47,65],"tags":[18,63,75,34,10,67],"class_list":["post-477","post","type-post","status-publish","format-standard","hentry","category-bpm","category-docker-compose","category-flowable","category-flowable-bpm","category-open-source","category-spring-boot","tag-bpm","tag-docker","tag-docker-compose","tag-flowable","tag-open-source","tag-spring-boot"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p8EwXo-7H","jetpack-related-posts":[{"id":356,"url":"https:\/\/www.canchito-dev.com\/public\/blog\/2019\/07\/05\/run-flowable-bpm-using-docker-and-mysql\/","url_meta":{"origin":477,"position":0},"title":"Run Flowable BPM using Docker and MySQL","author":"canchitodev","date":"July 5, 2019","format":false,"excerpt":"In this article, you will learn how to compile Flowable source code using MySQL as database source, and generate valid Docker images. Once you have the images, we will use Docker Compose for defining and running a multi-container Docker applications.","rel":"","context":"In &quot;BPM&quot;","block_context":{"text":"BPM","link":"https:\/\/www.canchito-dev.com\/public\/blog\/category\/bpm\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":458,"url":"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/14\/deploying-flowable-in-a-docker-container-and-mysql-part-2\/","url_meta":{"origin":477,"position":1},"title":"Deploying Flowable in a Docker Container and MySQL (Part 2)","author":"canchitodev","date":"May 14, 2020","format":false,"excerpt":"This is the second part of our \"Deploying Flowable in a Docker Container and MySQL\" series. In this post, you will learn how to deploy Flowable's war files in a container running Tomcat, and connecting to another container running use MySQL database.","rel":"","context":"In &quot;BPM&quot;","block_context":{"text":"BPM","link":"https:\/\/www.canchito-dev.com\/public\/blog\/category\/bpm\/"},"img":{"alt_text":"CANCHITO-DEV: Tomcat Main","src":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=700%2C400 2x"},"classes":[]},{"id":423,"url":"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/13\/deploying-flowable-in-a-docker-container-and-mysql-part-1\/","url_meta":{"origin":477,"position":2},"title":"Deploying Flowable in a Docker Container and MySQL (Part 1)","author":"canchitodev","date":"May 13, 2020","format":false,"excerpt":"In this post, you will learn how to adapt Flowable's war files to use MySQL as a database source. Once this is done, we will deploy them in a dockerized environment.","rel":"","context":"In &quot;BPM&quot;","block_context":{"text":"BPM","link":"https:\/\/www.canchito-dev.com\/public\/blog\/category\/bpm\/"},"img":{"alt_text":"CANCHITO-DEV: Tomcat Main","src":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/tomcat_main_page-1.png?resize=700%2C400 2x"},"classes":[]},{"id":471,"url":"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/06\/27\/flowable-custom-engine-configuration\/","url_meta":{"origin":477,"position":3},"title":"Customizing Flowable Engine","author":"canchitodev","date":"June 27, 2020","format":false,"excerpt":"In this article, we will go into detail on how to customize Flowable's engine. Three changes to the engine will be done: (1) Change the database connection by modifying the data source and adding custom data source properties. (2)Use a strong UUID generator. (3)Implement a custom event handler.","rel":"","context":"In &quot;BPM&quot;","block_context":{"text":"BPM","link":"https:\/\/www.canchito-dev.com\/public\/blog\/category\/bpm\/"},"img":{"alt_text":"CANCHITO-DEV: Spring Initializr","src":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr-1024x674.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr-1024x674.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr-1024x674.png?resize=525%2C300 1.5x"},"classes":[]},{"id":370,"url":"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/05\/12\/integrate-flowable-into-your-spring-boot-application\/","url_meta":{"origin":477,"position":4},"title":"Integrate Flowable into your Spring Boot Application","author":"canchitodev","date":"May 12, 2020","format":false,"excerpt":"In\u00a0this\u00a0tutorial,\u00a0we\u00a0will\u00a0be\u00a0integrating\u00a0Flowable's\u00a0BPM\u00a0engine\u00a0into\u00a0our\u00a0Spring\u00a0Boot\u00a0application.","rel":"","context":"In &quot;BPM&quot;","block_context":{"text":"BPM","link":"https:\/\/www.canchito-dev.com\/public\/blog\/category\/bpm\/"},"img":{"alt_text":"CANCHITO-DEV: Spring Initializr","src":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr-1024x674.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr-1024x674.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr-1024x674.png?resize=525%2C300 1.5x"},"classes":[]},{"id":372,"url":"https:\/\/www.canchito-dev.com\/public\/blog\/2020\/06\/07\/create-custom-service-tasks-for-flowable\/","url_meta":{"origin":477,"position":5},"title":"Create Custom Service Tasks for Flowable","author":"canchitodev","date":"June 7, 2020","format":false,"excerpt":"In\u00a0this\u00a0tutorial,\u00a0we\u00a0will\u00a0be\u00a0implementing\u00a0a\u00a0custom\u00a0service\u00a0task\u00a0in\u00a0Flowable\u00a0","rel":"","context":"In &quot;BPM&quot;","block_context":{"text":"BPM","link":"https:\/\/www.canchito-dev.com\/public\/blog\/category\/bpm\/"},"img":{"alt_text":"CANCHITO-DEV: Spring Initializr","src":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr.png?resize=700%2C400 2x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr.png?resize=1050%2C600 3x, https:\/\/i0.wp.com\/www.canchito-dev.com\/public\/blog\/wp-content\/uploads\/2020\/05\/initializr.png?resize=1400%2C800 4x"},"classes":[]}],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/posts\/477","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/comments?post=477"}],"version-history":[{"count":9,"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/posts\/477\/revisions"}],"predecessor-version":[{"id":535,"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/posts\/477\/revisions\/535"}],"wp:attachment":[{"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/media?parent=477"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/categories?post=477"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.canchito-dev.com\/public\/blog\/wp-json\/wp\/v2\/tags?post=477"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}