{"id":61464,"date":"2016-11-03T10:00:09","date_gmt":"2016-11-03T08:00:09","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=61464"},"modified":"2016-11-02T18:07:37","modified_gmt":"2016-11-02T16:07:37","slug":"running-flowable-cockroachdb","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html","title":{"rendered":"Running Flowable on CockroachDB"},"content":{"rendered":"<h2>What is CockroachDB?<\/h2>\n<p><a href=\"https:\/\/www.cockroachlabs.com\/\">CockroachDB<\/a> is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed, database (<a href=\"https:\/\/github.com\/cockroachdb\/cockroach\">Github link<\/a>)\u00a0that\u00a0<a href=\"https:\/\/www.wired.com\/2015\/06\/cockroach-labs\/\">heavily draws inspiration from\u00a0the Google Spanner whitepaper<\/a>. At it\u2019s core its a key-value store that scales horizontally. What makes it really interesting for us though, is that 1)\u00a0it\u00a0supports\u00a0SQL by using the Postgres wire protocol and 2) has full ACID semantics and distributed transactions. If you\u2019re interested in how they achieve this, make sure to read the technical posts at the <a href=\"https:\/\/www.cockroachlabs.com\/blog\/\">CockroachLabs blog<\/a>\u00a0(I admit, sometimes it\u2019s not for the faint-of-heart ;-)). Do note that it is still a distributed system and thus follows the CAP theorem, more specifically it is a CP system.<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/cockroachDB_beta_hero.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-61472\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/cockroachDB_beta_hero.png\" alt=\"cockroachdb_beta_hero\" width=\"281\" height=\"275\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/cockroachDB_beta_hero.png 281w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/cockroachDB_beta_hero-70x70.png 70w\" sizes=\"(max-width: 281px) 100vw, 281px\" \/><\/a><\/p>\n<p>It\u2019s still early days, as you\u2019ll read in their FAQ, as many things are not optimized yet. However, now that they recently added basic <a href=\"https:\/\/github.com\/cockroachdb\/cockroach\/issues\/2970\">support for joins<\/a>, I figured I should give it a spin with the Flowable engine.\u00a0In this post I\u2019ll show\u00a0how easy it is to run the <a href=\"http:\/\/www.flowable.org\/\">Flowable<\/a>\u00a0v6 process engine on CockroachDB.<\/p>\n<p>(Sidenote: I love the name! For people that don\u2019t understand it: cockroaches are one of the few creatures on earth that can survive something like a nuclear blast. Quite a resilient little animal \u2026 something you\u2019d like for your data too &amp;#55357;&amp;#56898; )<\/p>\n<h2>Setup<\/h2>\n<p>The <a href=\"https:\/\/www.cockroachlabs.com\/docs\/install-cockroachdb.html\">getting started docs<\/a> on the CockroachDb website are quite clear, but for clarity here are the steps I followed:<\/p>\n<ul>\n<li>Download latest CockroachDB tarball (or whatever your system needs)<\/li>\n<li>Untar and start first node:\n<ul>\n<li>\u00a0.\/cockroachdb start<\/li>\n<\/ul>\n<\/li>\n<li>Start a second node:\n<ul>\n<li>.\/cockroach start \u2013store=node2 \u2013port=26258 \u2013http-port=8081 \u2013join=localhost:26257<\/li>\n<\/ul>\n<\/li>\n<li>Start a third node:\n<ul>\n<li>.\/cockroach start \u2013store=node3 \u2013port=26259 \u2013http-port=8082 \u2013join=localhost:26257<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Hurray, you\u2019ve now got a cluster of three nodes running, which will happily replicate data among each other. There is a nice admin app which is running on 8080 and gives an overview of the cluster:<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/screen-1.png\"><img decoding=\"async\" class=\"aligncenter wp-image-61473\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/screen-1-1024x492.png\" alt=\"screen-1\" width=\"860\" height=\"413\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/screen-1-1024x492.png 1024w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/screen-1-300x144.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/screen-1-768x369.png 768w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/screen-1.png 1435w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>Next step: we need a database for the Flowable engine. Creating the database and granting permissions to the default user (maxroach) is done via the CockroachDB SQL shell:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:sql\">.\/cockroachdb sql\r\n&gt; CREATE DATABASE flowable;\r\n&gt; GRANT ALL ON DATABASE flowable TO maxroach;<\/pre>\n<p>Sadly, CockroachDB hasn\u2019t implemented the JDBC\u00a0metadata feature yet, which we use in the Flowable engine for automatically creating the database schema. Also, I couldn\u2019t quite get foreign keys to work properly in a few cases, so I copy\/pasted the Flowable SQL scripts and removed those. The file is <a href=\"https:\/\/raw.githubusercontent.com\/jbarrez\/flowable-cockroachdb-demo\/master\/engine-schema.sql\">uploaded on Github<\/a>.<\/p>\n<p>Also, this means that currently you need to create the database schema \u201cmanually\u201d. If you\u2019re using a bash terminal, you can download the script above from github and feed it to the CockroachDB SQL shell as follows. Alternatively, you can paste it into the SQL shell.<\/p>\n<pre class=\"brush:sql\">sql=$(wget https:\/\/raw.githubusercontent.com\/jbarrez\/flowable-cockroachdb-demo\/master\/engine-schema.sql -q -O -)\r\n.\/cockroach sql \u2013database=flowable \u2013user=maxroach -e \u201c$sql\u201d<\/pre>\n<h2>Flowable on CockroachDB<\/h2>\n<p>The database is now ready. Time to boot up a Flowable engine using this database as data store. All source code is available on Github:\u00a0<a href=\"https:\/\/github.com\/jbarrez\/flowable-cockroachdb-demo\">https:\/\/github.com\/jbarrez\/flowable-cockroachdb-demo<\/a><\/p>\n<p><a href=\"http:\/\/www.jorambarrez.be\/blog\/2016\/10\/17\/announcing-flowable\/logo-2\/\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-61474\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/logo-1.png\" alt=\"logo-1\" width=\"180\" height=\"180\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/logo-1.png 180w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/logo-1-150x150.png 150w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/logo-1-70x70.png 70w\" sizes=\"(max-width: 180px) 100vw, 180px\" \/><\/a><\/p>\n<p>As CockroachDB uses the Postgres wire protocol, we simply need to add the Postgres JDBC\u00a0driver to the <a href=\"https:\/\/github.com\/jbarrez\/flowable-cockroachdb-demo\/blob\/master\/pom.xml\">pom.xml<\/a>:<\/p>\n<pre class=\"brush:xml\">&lt;dependency&gt;\r\n  &lt;groupId&gt;org.flowable&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;flowable-engine&lt;\/artifactId&gt;\r\n  &lt;version&gt;6.0.0.RC1-SNAPSHOT&lt;\/version&gt;\r\n&lt;\/dependency&gt;\r\n&lt;dependency&gt;\r\n  &lt;groupId&gt;org.postgresql&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\r\n  &lt;version&gt;9.4.1211.jre7&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>I\u2019m using the current v6 master branch here, which isn\u2019t released yet. You can build it yourself easily though by cloning the flowable-engine project and doing a \u2018mvn clean install -DskipTests\u2019 in the root. The <a href=\"https:\/\/github.com\/jbarrez\/flowable-cockroachdb-demo\/blob\/master\/src\/main\/resources\/flowable.cfg.xml\">configuration<\/a>\u00a0file used for the engine\u00a0is quite simple, and it looks exactly like connecting to a regular Postgres relational database. Do note I\u2019m \u201ccheating\u201d a bit with the\u00a0<em>databaseSchemaUpdate<\/em> settings to avoid the auto-schema check.<\/p>\n<pre class=\"brush:xml\">&lt;property name=\"jdbcUrl\" value=\"jdbc:postgresql:\/\/127.0.0.1:26257\/flowable?sslmode=disable\" \/&gt;\r\n&lt;property name=\"jdbcDriver\" value=\"org.postgresql.Driver\" \/&gt;\r\n&lt;property name=\"jdbcUsername\" value=\"maxroach\" \/&gt;\r\n&lt;property name=\"jdbcPassword\" value=\"\" \/&gt;\r\n\r\n&lt;property name=\"databaseSchemaUpdate\" value=\"cockroachDb\" \/&gt;<\/pre>\n<p>The process definition we\u2019ll use is a simple demo process that exercises a few things like user tasks, service tasks, subprocesses, timers, etc:<\/p>\n<p><a href=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/diagram2.png\"><img decoding=\"async\" class=\"aligncenter wp-image-61475\" src=\"http:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/diagram2.png\" alt=\"diagram2\" width=\"860\" height=\"496\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/diagram2.png 1002w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/diagram2-300x173.png 300w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2016\/11\/diagram2-768x443.png 768w\" sizes=\"(max-width: 860px) 100vw, 860px\" \/><\/a><\/p>\n<p>The following snippet shows how the Flowable API is used in a few different ways. If you follow on the CockroachDB admin UI, you\u2019ll see that traffic goes up for a while. What happens here is:<\/p>\n<ul>\n<li>Lines 3-9: booting up the Flowable process engine using the config file from above and getting all the services<\/li>\n<li>Line 11: Deploying the process definition<\/li>\n<li>Lines 15-19: Starting 100 process instances<\/li>\n<li>Lines 24-33: Finishing all tasks in the system<\/li>\n<li>Line 35: Doing a historical query<\/li>\n<\/ul>\n<p>So, as you can see, nothing fancy, simply touching various API\u2019s and validating it all works on CockroachDB.<\/p>\n<pre class=\"brush:java\">public static void main(String[] args) {\r\n\r\n  ProcessEngine processEngine = ProcessEngineConfiguration\r\n    .createProcessEngineConfigurationFromResource(\"flowable.cfg.xml\").buildProcessEngine();\r\n\r\n  RepositoryService repositoryService = processEngine.getRepositoryService();\r\n  RuntimeService runtimeService = processEngine.getRuntimeService();\r\n  TaskService taskService = processEngine.getTaskService();\r\n  HistoryService historyService = processEngine.getHistoryService();\r\n\r\n  repositoryService.createDeployment().addClasspathResource(\"demo-process.bpmn\").deploy();\r\n  System.out.println(\"Process definitions deployed = \" + repositoryService.createProcessDefinitionQuery().count());\r\n\r\n  Random random = new Random();\r\n  for (int i=0; i&lt;100; i++) {\r\n  Map&lt;String, Object&gt; vars = new HashMap&lt;&gt;();\r\n    vars.put(\"var\", random.nextInt(100));\r\n    runtimeService.startProcessInstanceByKey(\"myProcess\", vars);\r\n  }\r\n\r\n  System.out.println(\"Process instances running = \" + runtimeService.createProcessInstanceQuery().count());\r\n  LinkedList&lt;Task&gt; tasks = new LinkedList&lt;&gt;(taskService.createTaskQuery().list());\r\n\r\n  while (!tasks.isEmpty()) {\r\n    Task task = taskService.createTaskQuery().taskId(tasks.pop().getId()).singleResult();\r\n    if (task != null) {\r\n      taskService.complete(task.getId());\r\n    }\r\n\r\n    if (tasks.isEmpty()) {\r\n      tasks.addAll(taskService.createTaskQuery().list());\r\n    }\r\n  }\r\n\r\n  System.out.println(\"Finished all tasks. Finished process instances = \"\r\n    + historyService.createHistoricProcessInstanceQuery().finished().count());\r\n\r\n  processEngine.close();\r\n}<\/pre>\n<p>The output is exactly as you\u2019d expect (and exactly the same as running it on a relational database).<\/p>\n<pre class=\"brush:bash\">Process definitions deployed = 1\r\nProcess instances running = 100\r\nCompleted 10 tasks\r\nCompleted 20 tasks\r\n\u2026\r\nCompleted 400\u00a0tasks\r\nFinished all tasks. Finished process instances = 100<\/pre>\n<h2>Conclusion<\/h2>\n<p>It\u2019s almost trivial to run the Flowable process engine on CockroachDB, most specifically by the excellent SQL layer and relational support the developers of CockroachDB have added. There\u2019s still a way to go (as you\u2019ll read on their blog), but it\u2019s certainly a cool piece of technology already right now! And who doesn\u2019t like horizontal scalability without sacrificing ACID transactions? It\u2019s a perfect fit for the use cases of a process engine.<\/p>\n<p>I\u2019m going to continue to keep a close eye on the CockroachDB project, as the combination with Flowable shows a lot of potential. And, as you know me, I\u2019m also really looking forward, once they start focusing on performance, to run some benchmarks :-).<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"http:\/\/www.jorambarrez.be\/blog\/2016\/11\/02\/running-flowable-on-cockroachdb\/\">Running Flowable on CockroachDB<\/a> from our <a href=\"http:\/\/www.javacodegeeks.com\/join-us\/jcg\/\">JCG partner<\/a> Joram Barrez at the <a href=\"http:\/\/www.jorambarrez.be\/blog\/\">Small steps with big feet<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed, database (Github link)\u00a0that\u00a0heavily draws inspiration from\u00a0the Google Spanner whitepaper. At it\u2019s core its a key-value store that scales horizontally. What makes it really interesting for us though, is that &hellip;<\/p>\n","protected":false},"author":103,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[1403],"class_list":["post-61464","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-cockroachdb"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Running Flowable on CockroachDB - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed,\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Running Flowable on CockroachDB - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-03T08:00:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Joram Barrez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/jbarrez\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joram Barrez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html\"},\"author\":{\"name\":\"Joram Barrez\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/9b09e3a1d64b03b29f5c18542eea4b18\"},\"headline\":\"Running Flowable on CockroachDB\",\"datePublished\":\"2016-11-03T08:00:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html\"},\"wordCount\":877,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"CockroachDB\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html\",\"name\":\"Running Flowable on CockroachDB - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2016-11-03T08:00:09+00:00\",\"description\":\"What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed,\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2016\\\/11\\\/running-flowable-cockroachdb.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Running Flowable on CockroachDB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/9b09e3a1d64b03b29f5c18542eea4b18\",\"name\":\"Joram Barrez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d80c6768731886d7ac9f7cdd6185ab5bdb32544f83c0b70e26d7ea096615683?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d80c6768731886d7ac9f7cdd6185ab5bdb32544f83c0b70e26d7ea096615683?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4d80c6768731886d7ac9f7cdd6185ab5bdb32544f83c0b70e26d7ea096615683?s=96&d=mm&r=g\",\"caption\":\"Joram Barrez\"},\"description\":\"Joram is an all-around software engineer with a keen interest in anything that is slightly related to software development. After working with Ruby on Rails at the university, he became a java consultant specializing in jBPM which later led him to joining the jBPM project as JBoss employee. He left JBoss for starting the Activiti project together with Tom Baeyens (also ex-JBoss) at Alfresco .Besides Activiti, he is also heavily involved with iOS development and the workflow features for the Alfresco Mobile app.\",\"sameAs\":[\"http:\\\/\\\/www.jorambarrez.be\\\/blog\",\"http:\\\/\\\/be.linkedin.com\\\/in\\\/jorambarrez\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/jbarrez\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Joram-Barrez\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Running Flowable on CockroachDB - Java Code Geeks","description":"What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed,","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html","og_locale":"en_US","og_type":"article","og_title":"Running Flowable on CockroachDB - Java Code Geeks","og_description":"What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed,","og_url":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2016-11-03T08:00:09+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Joram Barrez","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/jbarrez","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Joram Barrez","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html"},"author":{"name":"Joram Barrez","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/9b09e3a1d64b03b29f5c18542eea4b18"},"headline":"Running Flowable on CockroachDB","datePublished":"2016-11-03T08:00:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html"},"wordCount":877,"commentCount":1,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["CockroachDB"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html","url":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html","name":"Running Flowable on CockroachDB - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2016-11-03T08:00:09+00:00","description":"What is CockroachDB? CockroachDB is a project I\u2019ve been keeping an eye on for a while now with great interest. It\u2019s\u00a0a an open-source, Apache 2 licensed,","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2016\/11\/running-flowable-cockroachdb.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Running Flowable on CockroachDB"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/9b09e3a1d64b03b29f5c18542eea4b18","name":"Joram Barrez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/4d80c6768731886d7ac9f7cdd6185ab5bdb32544f83c0b70e26d7ea096615683?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4d80c6768731886d7ac9f7cdd6185ab5bdb32544f83c0b70e26d7ea096615683?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4d80c6768731886d7ac9f7cdd6185ab5bdb32544f83c0b70e26d7ea096615683?s=96&d=mm&r=g","caption":"Joram Barrez"},"description":"Joram is an all-around software engineer with a keen interest in anything that is slightly related to software development. After working with Ruby on Rails at the university, he became a java consultant specializing in jBPM which later led him to joining the jBPM project as JBoss employee. He left JBoss for starting the Activiti project together with Tom Baeyens (also ex-JBoss) at Alfresco .Besides Activiti, he is also heavily involved with iOS development and the workflow features for the Alfresco Mobile app.","sameAs":["http:\/\/www.jorambarrez.be\/blog","http:\/\/be.linkedin.com\/in\/jorambarrez","https:\/\/x.com\/http:\/\/twitter.com\/jbarrez"],"url":"https:\/\/www.javacodegeeks.com\/author\/Joram-Barrez"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/61464","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/103"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=61464"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/61464\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=61464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=61464"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=61464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}