{"id":216,"date":"2019-03-18T18:58:26","date_gmt":"2019-03-18T17:58:26","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/"},"modified":"2020-01-31T11:26:16","modified_gmt":"2020-01-31T10:26:16","slug":"java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/","title":{"rendered":"Java wasn\u2019t designed to run in the cloud&#8230; so we added Buildpacks, Schedulers, and Services"},"content":{"rendered":"<p>It&#8217;s not that <span id=\"urn:batch-analysis-a830f78c-8d85-490b-a2c6-656ff78bd9c8\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/java\">Java<\/span> can&#8217;t run in the cloud, of course it can, it&#8217;s just that it was never really designed that way from the beginning. When <span id=\"urn:batch-analysis-abd18a32-3dfd-49c3-b183-6e8d05cff842\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/java\">Java<\/span> was first brought to market it was mostly intended as a new way to build \u2018run-anywhere\u2019 desktop applications. With its <span id=\"urn:batch-analysis-22df8149-33c6-4007-a8e9-d772fb44b527\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/java_virtual_machine\">Java Virtual Machine<\/span> (JVM) it transcended traditional <span id=\"urn:batch-analysis-2eff1b81-b35b-417e-b6db-4e720233f377\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/operating_system\">operating systems<\/span>. It even ran in browsers like Netscape (remember Netscape?).<\/p>\n<p>But for enterprise application developers like me, run-anywhere was a cruel joke. JEE included the concept of \u2018standardized\u2019 application servers, but the truth is, they were never that \u2018standard\u2019.  You couldn&#8217;t really run your code \u2018anywhere\u2019 at all. JEE applications just weren&#8217;t that portable. Thankfully, this mess was sorted out by Spring Boot.<\/p>\n<p><strong>Spring Boot<\/strong> can take your application code, combine it with an embedded JEE Application Server (like Tomcat, which you never even see), and package it all up together into an executable JAR file. This JAR file will run anywhere there&#8217;s a compatible JVM.<\/p>\n<h2>Great. Does that include the cloud?<\/h2>\n<p>Well, yes and no. To run in the cloud, you need to pick and secure an <span id=\"urn:batch-analysis-5eae15c6-0d5f-4dad-bf40-8231419dc467\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/operating_system\">operating system<\/span>, layer a <span id=\"urn:batch-analysis-44b875ed-ad55-4c4c-ae74-2a5e9e194707\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/java\">Java<\/span> distribution on top of it, add your application code, and then tweak the JVM a little to make it run smoothly. You have to bundle all this stuff into a runnable container image, and you must be prepared to do this repeatedly every time you deliver a new <span id=\"urn:batch-analysis-adefca79-5839-498e-9461-99e090848291\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/feature_machine_learning\">feature<\/span>, a new bug fix, change a configuration item, or deal with a CVE, etc.<\/p>\n<p>Help is available. <strong>Buildpacks<\/strong> are a technology that can automate this process for you. For example, the <a href=\"https:\/\/github.com\/cloudfoundry\/java-buildpack\" rel=\"noopener noreferrer\" target=\"_blank\">Java Buildpack<\/a> can layer OpenJDK over Ubuntu LTS; figure out the right memory settings for your app; construct the correct command line to run it, and bundle all these things into a container image for you.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png\" alt=\"\"><\/p>\n<h2>So I have a container, now what?<\/h2>\n<p>Next, you need to run your container in the cloud; and keep it running. That&#8217;s where a &#8220;scheduler&#8221; or &#8220;orchestrator&#8221; comes in. The most basic schedulers (a.k.a people) will simply take your container image and start it.<\/p>\n<p>Application \u201cPlatforms\u201d (like <a href=\"https:\/\/www.cloudfoundry.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Cloud Foundry<\/a>) have much more automation and go much further.<\/p>\n<p>Platforms can <strong>schedule<\/strong> your application to run in the cloud, and spread it over multiple zones for higher availability. They can scale your application horizontally or vertically by adding extra instances or memory. They can even create URL routes automatically and configure load-balancing over your application&#8217;s endpoints. Most will also keep your application running by killing misbehaving instances or restarting instances after a crash. Everything a developer needs.<\/p>\n<p>Platforms have a better \u201cday two\u201d operations story as well. Day two refers to the maintenance features required to maintain and run the platform itself. To do this properly you need to take care of things like application\u2019s OS patching and have the ability to resize your platform easily as demand increases. You also need to ensure that your platform\u2019s various components remain secure, and you need to do all this with zero downtime.<\/p>\n<p>The beauty of a Platform is that it\u2019s not a \u2018do it yourself\u2019 solution. IT decision makers always underestimate <a href=\"https:\/\/content.pivotal.io\/white-papers\/the-upside-down-economics-of-building-your-own-platform\" rel=\"noopener noreferrer\" target=\"_blank\">how much money and effort it takes to build a viable platform<\/a>. Even though it may be technically very interesting, it does take the most valueable resources (developers) away from other, more valuable things (like adding the \u201cwow-factor\u201d that users really want).<\/p>\n<h2>But what about Data, Messaging, Monitoring etc?<\/h2>\n<p>Applications need <strong>services<\/strong>. <a href=\"https:\/\/12factor.net\/\" rel=\"noopener noreferrer\" target=\"_blank\">12-factor<\/a> applications may be designed with stateless access in mind, but their <span id=\"urn:batch-analysis-51e98ba1-d52e-402a-bb19-2a3b90211dc7\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/data\">data<\/span> still needs a <span id=\"urn:batch-analysis-7d4457f2-93e7-499d-9258-bfb3b3e00061\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/table_database\">database<\/span>, messages still need queues, config still needs externalizing, and applications still need monitoring. So applications need many services, but creating and running them usually means either tickets or toil or both.<\/p>\n<p>But, not if you have a services marketplace! With a services marketplace, you can personally pick and choose from a curated list of ready to run services. No Ops, no DBAs, no Jira tickets. All backed by high-availability cloud-based infrastructure and ready to run with a few clicks or taps. Marketplaces are even extensible, you can add to them using the <a href=\"https:\/\/www.openservicebrokerapi.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Open Service Broker API<\/a>.<\/p>\n<h2>Sounds amazing, what&#8217;s the catch?<\/h2>\n<p>Usually, the catch is the cost. But you can try all these technologies for free (up to a spend of $87) with <a href=\"https:\/\/run.pivotal.io\/\" rel=\"noopener noreferrer\" target=\"_blank\">Pivotal Web Services<\/a>. There\u2019s no sign-up fee. You don&#8217;t even need a credit card. All you need is a spare few minutes.<\/p>\n<p>You can interact with PWS using a simple command line client called <strong>cf-cli<\/strong> which <a href=\"https:\/\/docs.cloudfoundry.org\/cf-cli\/install-go-cli.html\" rel=\"noopener noreferrer\" target=\"_blank\">you can download here<\/a>. With the <code>cf<\/code> command installed you can <code>push<\/code>, <code>scale<\/code>, <code>start<\/code> and <code>stop<\/code> your apps at will.<\/p>\n<p>For example, for a Spring Boot application built with maven, the terminal commands would look something like this\u2026<\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;padding:15px;  \">\n<pre style=\"margin: 0; line-height: 125%\"><span style=\"color: #008800; font-style: italic\"># to get a JAR file...<\/span>\nmvn package\n<span style=\"color: #008800; font-style: italic\"># to push the app and start it on a random URL...<\/span>\ncf push my-application -p target\/my.jar --random-route\n<\/pre>\n<\/div>\n<p>When the <code>cf push<\/code> command finishes, you\u2019ll be told the URL that your application was assigned to. You can log in to PWS using your browser (at <a href=\"https:\/\/run.pivotal.io\/\" rel=\"noopener noreferrer\" target=\"_blank\">run.pivotal.io<\/a>) at any time. There you can visit the Apps Manager UI and see your application\u2019s current status, view logs, etc.<\/p>\n<p><img decoding=\"async\" class=\"aligncenter wp-image-2474 size-full\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-08-at-11.09.43.png\" alt=\"\"><\/p>\n<p>PWS includes a full <code>marketplace<\/code> of over 20 services, many of which have free plans. You can use <code>create-service<\/code> and <code>bind-service<\/code> to attach services such as <span id=\"urn:batch-analysis-3bd22b08-89db-4b4e-99da-0c08e3561d48\" class=\"textannotation disambiguated wl-no-link wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/table_database\">databases<\/span> to applications. Doing so takes just a couple of minutes. For example, the commands for creating a free SQL database using ClearDB are&#8230;<\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;padding:15px;  \">\n<pre style=\"margin: 0; line-height: 125%\">cf create-service cleardb spark mydb\ncf <span style=\"color: #AA22FF\">bind<\/span>-service my-application mydb\ncf restage my-application\n<\/pre>\n<\/div>\n<p>The potential of this is huge. Imagine how much time you could save if all of this infrastructure, configuration, wiring, patching, maintenance and service provision were taken care of for you?<\/p>\n<p>You should try it. It&#8217;s like having cloud super-powers. I doubt you&#8217;ll have a more productive 10 minutes this year.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s not that Java can&#8217;t run in the cloud, of course it can, it&#8217;s just that it was never really designed that way from the beginning. When Java was first brought to market it was mostly intended as a new way to build \u2018run-anywhere\u2019 desktop applications. With its Java Virtual Machine (JVM) it transcended traditional&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\">Read more<\/a><\/p>\n","protected":false},"author":64,"featured_media":217,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[36],"tags":[],"collections":[],"class_list":{"0":"post-216","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend","8":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Java wasn\u2019t designed to run in the cloud... so we added Buildpacks, Schedulers, and Services - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\" \/>\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.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java wasn\u2019t designed to run in the cloud... so we added Buildpacks, Schedulers, and Services\" \/>\n<meta property=\"og:description\" content=\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-18T17:58:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-01-31T10:26:16+00:00\" \/>\n<meta name=\"author\" content=\"Codemotion\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Codemotion\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\"},\"author\":{\"name\":\"Codemotion\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c\"},\"headline\":\"Java wasn\u2019t designed to run in the cloud&#8230; so we added Buildpacks, Schedulers, and Services\",\"datePublished\":\"2019-03-18T17:58:26+00:00\",\"dateModified\":\"2020-01-31T10:26:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\"},\"wordCount\":951,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png\",\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\",\"name\":\"Java wasn\u2019t designed to run in the cloud... so we added Buildpacks, Schedulers, and Services - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png\",\"datePublished\":\"2019-03-18T17:58:26+00:00\",\"dateModified\":\"2020-01-31T10:26:16+00:00\",\"description\":\"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png\",\"width\":1276,\"height\":633},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/backend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Java wasn\u2019t designed to run in the cloud&#8230; so we added Buildpacks, Schedulers, and Services\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c\",\"name\":\"Codemotion\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png\",\"caption\":\"Codemotion\"},\"description\":\"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.\",\"sameAs\":[\"https:\/\/x.com\/CodemotionIT\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java wasn\u2019t designed to run in the cloud... so we added Buildpacks, Schedulers, and Services - Codemotion Magazine","description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","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.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/","og_locale":"en_US","og_type":"article","og_title":"Java wasn\u2019t designed to run in the cloud... so we added Buildpacks, Schedulers, and Services","og_description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","og_url":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-03-18T17:58:26+00:00","article_modified_time":"2020-01-31T10:26:16+00:00","author":"Codemotion","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Codemotion","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/"},"author":{"name":"Codemotion","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c"},"headline":"Java wasn\u2019t designed to run in the cloud&#8230; so we added Buildpacks, Schedulers, and Services","datePublished":"2019-03-18T17:58:26+00:00","dateModified":"2020-01-31T10:26:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/"},"wordCount":951,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png","articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/","url":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/","name":"Java wasn\u2019t designed to run in the cloud... so we added Buildpacks, Schedulers, and Services - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png","datePublished":"2019-03-18T17:58:26+00:00","dateModified":"2020-01-31T10:26:16+00:00","description":"Codemotion and Facebook organized the Tech Leadership Training boot camp, heres a personal reportage from one of our attendees.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png","width":1276,"height":633},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/java-wasnt-designed-to-run-in-the-cloud-so-we-added-buildpacks-schedulers-and-services\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"Java wasn\u2019t designed to run in the cloud&#8230; so we added Buildpacks, Schedulers, and Services"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/201bb98b02412383686cced7521b861c","name":"Codemotion","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/cropped-codemotionlogo-150x150.png","caption":"Codemotion"},"description":"Articles wirtten by the Codemotion staff. Tech news, inspiration, latest treends in software development and more.","sameAs":["https:\/\/x.com\/CodemotionIT"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-600x600.png","author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png",1276,633,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-300x149.png",300,149,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-768x381.png",768,381,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-1024x508.png",1024,508,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png",1276,633,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png",1276,633,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07.png",100,50,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/03\/Screenshot-2019-03-11-at-10.12.07-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"Codemotion","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/codemotion-2\/"},"uagb_comment_info":0,"uagb_excerpt":"It&#8217;s not that Java can&#8217;t run in the cloud, of course it can, it&#8217;s just that it was never really designed that way from the beginning. When Java was first brought to market it was mostly intended as a new way to build \u2018run-anywhere\u2019 desktop applications. With its Java Virtual Machine (JVM) it transcended traditional&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=216"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/216\/revisions"}],"predecessor-version":[{"id":3120,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/216\/revisions\/3120"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/217"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=216"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}