<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Andrecbrito</title>
    <description>The latest articles on DEV Community by Andrecbrito (@andrecbrito).</description>
    <link>https://dev.to/andrecbrito</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F166269%2Fbca4e973-d325-4a05-8860-99eb92941d9c.png</url>
      <title>DEV Community: Andrecbrito</title>
      <link>https://dev.to/andrecbrito</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andrecbrito"/>
    <language>en</language>
    <item>
      <title>Azure Functions with supersonic Java</title>
      <dc:creator>Andrecbrito</dc:creator>
      <pubDate>Fri, 09 Apr 2021 08:59:22 +0000</pubDate>
      <link>https://dev.to/andrecbrito/azure-functions-with-supersonic-java-3pkg</link>
      <guid>https://dev.to/andrecbrito/azure-functions-with-supersonic-java-3pkg</guid>
      <description>&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;Serverless is becoming an alternative way of creating and deploying some types of services due to the fast delivery and cost-efficient project management [1]. The way that serverless applications work allows for high availability with a cost-efficient delivery by “turning ON“ our application only when it is being requested and thus saving resources on “dead“ hours.&lt;/p&gt;

&lt;p&gt;Java, as it was until recently, wasn’t adequately fit to handle fast boot-ups (needed to wake up the application) and low resource consumption (yes, serverless doesn’t mean there is no server. There is a server and one must pay for it and the resources it uses). &lt;/p&gt;

&lt;p&gt;This is where Quarkus and Microprofile [3;4] come to the rescue allowing for a serverless service fully built on Java.&lt;/p&gt;

&lt;p&gt;Function as a Service (FaaS) “is an event-driven computing execution model where developers write logic that is deployed in containers fully managed by a platform, then executed on demand.” [5]&lt;/p&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Azure subscription and The Azure CLI&lt;/li&gt;
&lt;li&gt;Java JDK 7, 8, 11, 13, 15&lt;/li&gt;
&lt;li&gt;Maven v3&lt;/li&gt;
&lt;li&gt;A pinch of programming skills &lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Sample Application
&lt;/h1&gt;

&lt;p&gt;We start off by having to have a service to deploy that fits the need for it to be FaaS [1;5]. For the sake of simplicity, this example will be a basic service where there is a 1-minute timer that reads an in-memory database (DB) and increments a row with the current timestamp. It should also provide a way of getting this information so it will have a microservice with an HTTP GET operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time to replicate
&lt;/h2&gt;

&lt;p&gt;Assuming you already have an Azure subscription it is expected to replicate this example in less than one hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download Code Base
&lt;/h2&gt;

&lt;p&gt;Access &lt;a href="https://code.quarkus.io/"&gt;https://code.quarkus.io/&lt;/a&gt; and start selecting the options and dependencies needed. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxg3ltprmzhjjwp7tdsz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxg3ltprmzhjjwp7tdsz1.png" alt="Alt Text" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Group | com.example&lt;/p&gt;

&lt;p&gt;Artifact | quarkus-functions-sample&lt;/p&gt;

&lt;p&gt;Build Tool | Maven&lt;/p&gt;

&lt;p&gt;Version | 1.0.0-Snapshot&lt;/p&gt;

&lt;p&gt;Then we choose what dependencies we will need, do not worry if you miss dependencies here because you can always add them later. &lt;/p&gt;

&lt;p&gt;So, for now, we know that we want azure functions, and we will need to create a REST service. Let’s also check if there is something for the timer as well. Let's start typing in the dependencies: &lt;/p&gt;

&lt;p&gt;For REST, we choose RESTeasy JAX-rs&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0r3eko9xfcpxndb6fai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj0r3eko9xfcpxndb6fai.png" alt="Alt Text" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For Azure functions, we type “functions” and select the “Azure functions HTTP“&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx966ndq8qe8s99qw1iu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx966ndq8qe8s99qw1iu7.png" alt="Alt Text" width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And let's try the scheduler for the timer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3qmycgx78pgqswaahuf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3qmycgx78pgqswaahuf.png" alt="Alt Text" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last we also select the dependencies for the in-memory database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuz4mexm9s2ppssny0xil.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuz4mexm9s2ppssny0xil.png" alt="Alt Text" width="468" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, we download the application (notice that they provide articles for you to read based on the selected dependencies )&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8b35g4e9lprpv7jttai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8b35g4e9lprpv7jttai.png" alt="Alt Text" width="662" height="296"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7y46ramo795vfcqkhu6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7y46ramo795vfcqkhu6c.png" alt="Alt Text" width="670" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can see that there are many things configured therefore our job will be to code mostly&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuw9co6ipkarsb1xay5xz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuw9co6ipkarsb1xay5xz.png" alt="Alt Text" width="314" height="412"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Hands-On
&lt;/h1&gt;

&lt;p&gt;We start off by configuring the database, and the entities to access the data.&lt;/p&gt;

&lt;p&gt;in the file:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;src\main\resources\application.properties&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;add the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;quarkus.http.root-path=/api
quarkus.package.type=uber-jar
quarkus.datasource.db-kind=h2
quarkus.datasource.username=sa
quarkus.datasource.password=sa
quarkus.datasource.jdbc.url=jdbc:h2:mem:public;MODE=PostgreSQL
quarkus.hibernate-orm.database.generation=drop-and-create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And create a file [src/main/resources/import.sql] with the initial data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;INSERT INTO quafun
(id, current)
VALUES(1, '1615195937');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check that you have all of these dependencies:&lt;/p&gt;

&lt;h3&gt;
  
  
  pom.xml
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;dependencies&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-azure-functions-http&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-resteasy&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-resteasy-jsonb&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-scheduler&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-arc&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-junit5&amp;lt;/artifactId&amp;gt;
            &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;!-- Hibernate ORM specific dependencies --&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-hibernate-orm-panache&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;

        &amp;lt;!-- JDBC driver dependencies --&amp;gt;
        &amp;lt;dependency&amp;gt;
            &amp;lt;groupId&amp;gt;io.quarkus&amp;lt;/groupId&amp;gt;
            &amp;lt;artifactId&amp;gt;quarkus-jdbc-h2&amp;lt;/artifactId&amp;gt;
        &amp;lt;/dependency&amp;gt;
    &amp;lt;/dependencies&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the java side we need a JPA entity and a repository to manage the data and an API class:&lt;/p&gt;

&lt;h3&gt;
  
  
  Quafun.java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Entity(name = "quafun")
public class Quafun {

  @Id
  private long id;
  private String current;

  public Quafun() {
  }

  public Quafun(long nextLong, long currentTimeMillis) {
    this.id = nextLong;
    this.current = "" + currentTimeMillis;

  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getCurrent() {
    return current;
  }

  public void setCurrent(String current) {
    this.current = current;
  }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  QuafunRepo.java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@ApplicationScoped
public class QuafunRepo implements PanacheRepository&amp;lt;Quafun&amp;gt; {

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A controller for the REST interface&lt;/p&gt;

&lt;h3&gt;
  
  
  QuafunController.java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Path("/quarkus-function")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class QuafunController {
  private static final Logger LOGGER = Logger.getLogger(QuafunController.class.getName());

  @Inject
  QuafunRepo repo;

  @GET
  public List&amp;lt;Quafun&amp;gt; getAll() {
    LOGGER.info("[RETRIEVE-OPERATION] Get All Data");

    return repo.findAll().list();

  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And a Scheduler to do an operation regularly. &lt;/p&gt;

&lt;h3&gt;
  
  
  QuafunScheduler.java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@ApplicationScoped
public class QuafunScheduler {
  private static final Logger LOGGER = Logger.getLogger(QuafunScheduler.class.getName());

  @Inject
  QuafunRepo repo;

  @Scheduled(every = "1m")
  @Transactional
  void updateRepo() {
    LOGGER.info("[AUTO-OPERATION] Scheduller called");
    Quafun quafun = new Quafun(new Random().nextLong(), System.currentTimeMillis());
    repo.persist(quafun);

  }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Beam me Up
&lt;/h1&gt;

&lt;p&gt;The next step is to deliver our application to the cloud. There are several ways of achieving this, like terraform for example here [6], but for the sake of simplicity, this example will use Maven to deploy to Azure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Link Maven to Azure
&lt;/h2&gt;

&lt;p&gt;As we selected “Azure Functions HTTP“ for dependencies much of the needed information will be already placed in our pom.xml :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
&amp;lt;properties&amp;gt;
        &amp;lt;azure.functions.maven.plugin.version&amp;gt;1.3.2&amp;lt;/azure.functions.maven.plugin.version&amp;gt;
        &amp;lt;compiler-plugin.version&amp;gt;3.8.1&amp;lt;/compiler-plugin.version&amp;gt;
        &amp;lt;function&amp;gt;greeting&amp;lt;/function&amp;gt;
        &amp;lt;functionAppName&amp;gt;${artifactId}-&amp;lt;####INSERT-UUID_HERE####&amp;gt;&amp;lt;/functionAppName&amp;gt;
        &amp;lt;functionAppRegion&amp;gt;westus&amp;lt;/functionAppRegion&amp;gt;
        &amp;lt;functionResourceGroup&amp;gt;java-functions-group&amp;lt;/functionResourceGroup&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deploy
&lt;/h2&gt;

&lt;p&gt;Deploying is the easy part! We need to be logged in! Past this into a command line: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;az login&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and then we just tell our application to deploy itself: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;mvn clean install azure-functions:deploy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;if everything went fine we have : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftn4qqttxqrowz00tvljz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftn4qqttxqrowz00tvljz.png" alt="Alt Text" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And we may test it by calling the URL:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwzsec5c7k3lozez0oko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwzsec5c7k3lozez0oko.png" alt="Alt Text" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And watching the metrics and check our logging messages:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a3vrf31x1dx54rcyxyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7a3vrf31x1dx54rcyxyx.png" alt="Alt Text" width="800" height="372"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2021-03-31T11:04:04.514 [Information] INFO: [RETRIEVE-OPERATION] Get All Data
...
2021-03-31T11:04:33.017 [Information] INFO: [AUTO-OPERATION] Scheduller called
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Happy coding!
&lt;/h1&gt;

&lt;p&gt;From here on we are able to create and deploy functions with the full potential of  Java. &lt;/p&gt;

&lt;p&gt;Another topic to consider for functions and Java is the Funqy HTTP [7] which provides less overhead for functions.&lt;/p&gt;

&lt;p&gt;#Koerber&lt;/p&gt;

&lt;h1&gt;
  
  
  Refs
&lt;/h1&gt;

&lt;p&gt;[1] &lt;a href="https://www.thoughtworks.com/radar/techniques/serverless-architecture"&gt;https://www.thoughtworks.com/radar/techniques/serverless-architecture&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[2] &lt;a href="https://docs.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin"&gt;https://docs.microsoft.com/en-us/azure/developer/java/eclipse-microprofile/deploy-microprofile-quarkus-java-app-with-maven-plugin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[3] &lt;a href="https://quarkus.io/"&gt;https://quarkus.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[4] &lt;a href="https://microprofile.io/"&gt;https://microprofile.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[5] &lt;a href="https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless?sc_cid=7013a0000026GRyAAM&amp;amp;gclid=CjwKCAiA65iBBhB-EiwAW253W-6QT-UZ2rkqC5FPUVKxXR3Xr4FOrTAi_KYt8ROWySeb9JshOvEm6hoCTJQQAvD_BwE&amp;amp;gclsrc=aw.ds"&gt;https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless?sc_cid=7013a0000026GRyAAM&amp;amp;gclid=CjwKCAiA65iBBhB-EiwAW253W-6QT-UZ2rkqC5FPUVKxXR3Xr4FOrTAi_KYt8ROWySeb9JshOvEm6hoCTJQQAvD_BwE&amp;amp;gclsrc=aw.ds&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;[6] &lt;a href="https://www.maxivanov.io/deploy-azure-functions-with-terraform/"&gt;https://www.maxivanov.io/deploy-azure-functions-with-terraform/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[7] &lt;a href="https://quarkus.io/guides/funqy-http"&gt;https://quarkus.io/guides/funqy-http&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>azure</category>
      <category>quarkus</category>
      <category>maven</category>
    </item>
  </channel>
</rss>
