{"id":11480,"date":"2017-06-26T17:12:08","date_gmt":"2017-06-26T15:12:08","guid":{"rendered":"https:\/\/blog.zhaw.ch\/icclab\/?p=11480"},"modified":"2019-08-05T13:24:30","modified_gmt":"2019-08-05T11:24:30","slug":"termite-a-java-library-for-the-selective-lambdafication-of-applications","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/","title":{"rendered":"Termite. A Java library for the selective \u201cLambdafication\u201d of applications."},"content":{"rendered":"\n<p>by <a href=\"https:\/\/blog.zhaw.ch\/icclab\/serhii-dorodko\/\">Serhii Dorodko<\/a><\/p>\n\n\n<h1><b>Introducing selective Lambdafication<\/b><\/h1>\n<p><span style=\"font-weight: 400\">\u201cLambdafication\u201d is the automated transformation of source code to make it run on <a href=\"https:\/\/aws.amazon.com\/lambda\/\">AWS Lambda<\/a>. It is a provider-specific flavour of generic \u201cFaaSification\u201d which is our ultimate research goal. With our Lambdafication tooling, we offer application engineers today the possibility to step into the serverless world without much effort, and leave the more challenging research tasks for the summer time.<\/span><\/p>\n<p><!--more--><\/p>\n<p><span style=\"font-weight: 400\">Continuing the Java Lambdafication topic, started with the Java translation tool for AWS Lambda called <a href=\"https:\/\/github.com\/serviceprototypinglab\/podilizer\">Podilizer<\/a>, we inform about the open source launch of Termite, a buildtime\/runtime library for Lambdafication. And here is logical question: \u201cWhy do we need another tool which essentially does the same job as Podilizer?\u201d The reasons come from experience we gained prototyping, developing and <a href=\"http:\/\/www.shortscience.org\/paper?bibtexKey=journals\/corr\/1702.05510\">field-testing<\/a> Podilizer. One of them is the quality of translation of some complex projects (Java OOP\/functional programming <a href=\"https:\/\/aws.amazon.com\/de\/sdk-for-java\/\">paradigm issues<\/a>). Another one touches the code design: FaaS does not position itself as a new full cloud deployment method, furthermore native design of serverless fits the idea of going along with other projects and infrastructures. We assume that functions could take care about particular tasks in the cloud or become a glue between existing microservices. Based on this knowledge we created Termite, which tends to fit current FaaS paradigms by letting application engineers choose which methods to export.<\/span><\/p>\n<h1><b>Termite vs Podilizer<\/b><\/h1>\n<p><span style=\"font-weight: 400\">Unlike Podilizer, which is implemented as command-line tool and unconditionally translates a whole project\u2019s source code, Termite\u2019s design allows to translate certain methods into Lambda functions. It provides syntax elements to mark methods in your project and have them translated and uploaded as lambda functions in a controlled way. Not a less important advantage of Termite is auto-generating dependencies for each function, leading to easier configuration. On the other hand, Podilizer is able to handle between-functions calls, while Termite does not give you such opportunity (yet). Overall Termite looks more harmonious and flexible compare to Podilizer despite the limited maturity.<\/span><\/p>\n<h1><b>Architecture and design<\/b><\/h1>\n<p><span style=\"font-weight: 400\">The core idea of the design are Java annotations as a syntactical means to mark and configure functions. As long as annotations are part of the language they are easy in understanding and usage. An example for marking a method with annotations follows:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">@Lambda()<\/span>\n\n<span style=\"font-weight: 400\">public static int sum(int a1, int a2){<\/span>\n\n<span style=\"font-weight: 400\">return a1 + a2;<\/span>\n\n<span style=\"font-weight: 400\">}<\/span><\/pre>\n<p><span style=\"font-weight: 400\">The syntax makes it possible to configure Lambda function aspects such as resource use and placement:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">@Lambda(timeOut = 60, memorySize = 512, region=\"us-west-2\")<\/span>\n\n<span style=\"font-weight: 400\">public static int sum(int a1, int a2){<\/span>\n\n<span style=\"font-weight: 400\">return a1 + a2;<\/span>\n\n<span style=\"font-weight: 400\">}<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Annotated methods are being processed over the compilation phase. The Termite processor creates Lambda functions based on the particular method specification and uploads them to the cloud. Function invocation is performed through the <a href=\"https:\/\/eclipse.org\/aspectj\/index.php\">AspectJ<\/a> library. AspectJ interrupts the runtime workflow and calls deployed Lambda functions instead of local methods, as shown in the following high-level diagram.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11481 size-full\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png\" alt=\"\" width=\"467\" height=\"345\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png 467w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel-300x222.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel-406x300.png 406w\" sizes=\"auto, (max-width: 467px) 100vw, 467px\" \/><\/p>\n<h1><b>How to use<\/b><\/h1>\n<p><span style=\"font-weight: 400\">Before using Termite directly from our Git repository, make sure to fulfil the following prerequisites:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">AWS account and credentials configured at your machine (aws command-line tool should work: aws lambda list-functions)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">JDK 1.8+ installed<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Maven installed<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">Clone from <\/span><a href=\"https:\/\/github.com\/serviceprototypinglab\/termite\"><span style=\"font-weight: 400\">https:\/\/github.com\/serviceprototypinglab\/termite<\/span><\/a><span style=\"font-weight: 400\"> (In the folder \u2018example\u2019 you can find example project which uses Termite):<\/span><\/p>\n<pre><span style=\"font-weight: 400\">clone https:\/\/github.com\/serviceprototypinglab\/termite.git<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Compile the project:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">cd termite\n<\/span><span style=\"font-weight: 400\">mvn clean install<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Afterwards, Termite is ready to be used within your Java application. Assuming you use Maven, create your own Maven project and configure dependencies. In case you use another build system, Termite does not offer integration yet but we are happy to accept patches of course.<\/span><\/p>\n<pre><span style=\"font-weight: 400\">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;   &lt;dependency&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;ch.zhaw.splab.servicetooling&lt;\/groupId&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;Termite&lt;\/artifactId&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;0.1&lt;\/version&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/dependency&gt;<\/span>\n<span style=\"font-weight: 400\">            &lt;dependency&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.aspectj&lt;\/groupId&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;aspectjweaver&lt;\/artifactId&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;${aspectj.version}&lt;\/version&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;scope&gt;runtime&lt;\/scope&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/dependency&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Correct execution is able only with the following argument to the Maven execution plugin:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">-javaagent:${settings.localRepository}\/org\/aspectj\/aspectjweaver\/${aspectj.version}\/<\/span>\n<span style=\"font-weight: 400\">aspectjweaver-${aspectj.version}.jar<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Also you need the generic Maven plugin for compiling generated sources because Termite will generate some source code files:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">             &lt;plugin&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;groupId&gt;org.bsc.maven&lt;\/groupId&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;artifactId&gt;maven-processor-plugin&lt;\/artifactId&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;version&gt;2.2.4&lt;\/version&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;executions&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;execution&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;id&gt;process&lt;\/id&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goals&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;goal&gt;process&lt;\/goal&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/goals&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;phase&gt;process-sources&lt;\/phase&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;configuration&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;proc&gt;none&lt;\/proc&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;outputDirectory&gt;${generated.sources.directory}&lt;\/outputDirectory&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;processors&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;processor&gt;ch.zhaw.splab.podilizerproc.annotations.LambdaProcessor<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/processor&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/processors&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/configuration&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/execution&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/executions&gt;<\/span>\n<span style=\"font-weight: 400\"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;\/plugin&gt;<\/span><\/pre>\n<p><span style=\"font-weight: 400\">A full example of a Maven configuration file is located in the Termite repository at<\/span><\/p>\n<pre><span style=\"font-weight: 400\">example\/pom.xml<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Afterwards, you\u2019re ready to go serverless! Annotate functions you want to upload with \u201c@Lambda\u201d, see the example above.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Compile the created project:<\/span><\/p>\n<pre><span style=\"font-weight: 400\">mvn clean install<\/span><\/pre>\n<p><span style=\"font-weight: 400\">Maven will inform you about deployed functions which are then ready to be used from AWS Lambda. We&#8217;d like to hear from your experience with using Termite &#8211; do not hesitate to comment on this post.<br>\n<\/span><\/p><div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/faas\/\">faas<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/java\/\">java<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/open-source\/\">open source<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/serverless\/\">serverless<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/tooling\/\">tooling<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>by Serhii Dorodko Introducing selective Lambdafication \u201cLambdafication\u201d is the automated transformation of source code to make it run on AWS Lambda. It is a provider-specific flavour of generic \u201cFaaSification\u201d which is our ultimate research goal. With our Lambdafication tooling, we offer application engineers today the possibility to step into the serverless world without much effort, [&hellip;]<\/p>\n","protected":false},"author":486,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[820,838,684,831,777],"features":[],"class_list":["post-11480","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-faas","tag-java","tag-open-source","tag-serverless","tag-tooling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Termite. A Java library for the selective \u201cLambdafication\u201d of applications. - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Termite. A Java library for the selective \u201cLambdafication\u201d of applications.\" \/>\n<meta property=\"og:description\" content=\"by Serhii Dorodko Introducing selective Lambdafication \u201cLambdafication\u201d is the automated transformation of source code to make it run on AWS Lambda. It is a provider-specific flavour of generic \u201cFaaSification\u201d which is our ultimate research goal. With our Lambdafication tooling, we offer application engineers today the possibility to step into the serverless world without much effort, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-26T15:12:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-05T11:24:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png\" \/>\n<meta name=\"author\" content=\"icclab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"icclab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\"},\"author\":{\"name\":\"icclab\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\"},\"headline\":\"Termite. A Java library for the selective \u201cLambdafication\u201d of applications.\",\"datePublished\":\"2017-06-26T15:12:08+00:00\",\"dateModified\":\"2019-08-05T11:24:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\"},\"wordCount\":669,\"commentCount\":15,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png\",\"keywords\":[\"faas\",\"java\",\"open source\",\"serverless\",\"tooling\"],\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\",\"name\":\"Termite. A Java library for the selective \u201cLambdafication\u201d of applications. - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png\",\"datePublished\":\"2017-06-26T15:12:08+00:00\",\"dateModified\":\"2019-08-05T11:24:30+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png\",\"width\":467,\"height\":345},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Termite. A Java library for the selective \u201cLambdafication\u201d of applications.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\",\"name\":\"icclab\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"caption\":\"icclab\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/icclab\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Termite. A Java library for the selective \u201cLambdafication\u201d of applications. - Service Engineering (ICCLab &amp; SPLab)","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:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/","og_locale":"en_US","og_type":"article","og_title":"Termite. A Java library for the selective \u201cLambdafication\u201d of applications.","og_description":"by Serhii Dorodko Introducing selective Lambdafication \u201cLambdafication\u201d is the automated transformation of source code to make it run on AWS Lambda. It is a provider-specific flavour of generic \u201cFaaSification\u201d which is our ultimate research goal. With our Lambdafication tooling, we offer application engineers today the possibility to step into the serverless world without much effort, [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2017-06-26T15:12:08+00:00","article_modified_time":"2019-08-05T11:24:30+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png","type":"","width":"","height":""}],"author":"icclab","twitter_card":"summary_large_image","twitter_misc":{"Written by":"icclab","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/"},"author":{"name":"icclab","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563"},"headline":"Termite. A Java library for the selective \u201cLambdafication\u201d of applications.","datePublished":"2017-06-26T15:12:08+00:00","dateModified":"2019-08-05T11:24:30+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/"},"wordCount":669,"commentCount":15,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png","keywords":["faas","java","open source","serverless","tooling"],"articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/","url":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/","name":"Termite. A Java library for the selective \u201cLambdafication\u201d of applications. - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png","datePublished":"2017-06-26T15:12:08+00:00","dateModified":"2019-08-05T11:24:30+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/06\/termite-highlevel.png","width":467,"height":345},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/termite-a-java-library-for-the-selective-lambdafication-of-applications\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Termite. A Java library for the selective \u201cLambdafication\u201d of applications."}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563","name":"icclab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","caption":"icclab"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/icclab\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/486"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=11480"}],"version-history":[{"count":8,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11480\/revisions"}],"predecessor-version":[{"id":12469,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11480\/revisions\/12469"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=11480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=11480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=11480"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=11480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}