liveBook · Manning

What you will learn in Quarkus in Action

by Martin Štefanko and Jan Martiška
Foreword by Markus Eisele

Chapter by chapter

Chapter 1: What is Quarkus?

1.1 Why Quarkus? · 1.2 Introducing Quarkus · 1.2.1 A Kubernetes native stack · 1.2.2 OpenJDK HotSpot and GraalVM · 1.2.3 Libraries and standards · 1.3 Principles of Quarkus · 1.3.1 Imperative and reactive programming seamlessly connected together · 1.3.2 Making developers’ lives easier · 1.4 The Quarkus architecture · 1.5 Building the Acme Car Rental application using Quarkus · 1.5.1 Use cases · 1.5.2 Architecture · 1.5.3 Implementation · 1.6 Alternative frameworks · 1.6.1 Spring Boot · 1.6.2 Micronaut · 1.6.3 Helidon · 1.6.4 Framework summary · 1.7 Next steps · 1.8 Summary

What you learn in chapter 1 →

Chapter 2: Your first Quarkus application

2.1 Generating Quarkus applications · 2.1.1 Generating Quarkus applications with Maven · 2.1.2 Generating Quarkus applications with CLI · 2.1.3 Generating Quarkus applications from code.quarkus.io · 2.1.4 code.quarkus.io REST API · 2.2 Contents of the generated application · 2.2.1 Maven pom.xml file · 2.2.2 Generated code and resources · 2.3 Running the Quarkus Application · 2.4 Native compilation with GraalVM · 2.4.1 GraalVM · 2.4.2 How does the native execution compare to JVM execution? · 2.4.3 GraalVM distributions · 2.4.4 Packaging Quarkus as a native executable · 2.4.5 Native executable with a container build · 2.5 Unequaled performance · 2.5.1 When to use JVM and when to compile to native · 2.6 Building container images with Quarkus · 2.7 Extensions · 2.7.1 What is an extension? · 2.7.2 Native compilations and build-time processing · 2.7.3 Working with Quarkus extensions · 2.7.4 Quarkus guides · 2.7.5 Quarkiverse · 2.8 Next steps · 2.9 Summary

What you learn in chapter 2 →

Chapter 3: Enhancing developer productivity with Quarkus

3.1 Development mode · 3.1.1 Trying live coding with the Quarkus project · 3.1.2 How does it work? · 3.2 Application configuration · 3.2.1 Experimenting with application configuration · 3.2.2 Configuration profiles · 3.2.3 Overriding application.properties · 3.3 Dev UI · 3.3.1 Experimenting with Dev UI · 3.4 Dev Services · 3.4.1 Securing the Quarkus application using OpenID Connect and Dev Services · 3.5 Continuous testing · 3.5.1 Testing the Quarkus in Action project · 3.6 Next steps · 3.7 Summary

What you learn in chapter 3 →

Chapter 4: Handling communications

4.1 Developing REST-based Quarkus applications · 4.2 Car rental Reservation service · 4.2.1 Checking car availability · 4.2.2 Making a reservation · 4.2.3 Experimenting with the exposed REST API using the Swagger UI · 4.3 Using the REST client · 4.4 Developing Quarkus applications with GraphQL · 4.5 Car Rental Inventory service · 4.5.1 Exposing the Inventory service over GraphQL · 4.5.2 Invoking GraphQL operations using the UI · 4.5.3 Reviewing the GraphQL schema · 4.5.4 Consuming the Inventory service using a GraphQL client · 4.6 Developing Quarkus services with gRPC · 4.6.1 Understanding when to use gRPC · 4.6.2 Protocol Buffers · 4.7 Adding gRPC support to your project · 4.8 Implementing a gRPC service using Quarkus · 4.8.1 Working with gRPC and streams · 4.8.2 Using a gRPC client with Quarkus · 4.9 Next steps · 4.10 Summary

What you learn in chapter 4 →

Chapter 5: Testing Quarkus applications

5.1 Writing tests · 5.1.1 Writing a simple test for the Reservation repository · 5.2 Native testing · 5.2.1 Writing a test for the Reservation resource · 5.3 Mocking · 5.3.1 Mocking by replacing implementations · 5.3.2 Mocking with Mockito · 5.4 Testing profiles · 5.5 Next steps · 5.6 Summary

What you learn in chapter 5 →

Chapter 6: Exposing and securing web applications

6.1 Creating a secured web application · 6.1.1 Creating a simple HTML page · 6.1.2 Adding security to the application · 6.2 Creating a UI for managing car reservations · 6.2.1 Updates to the Reservation service needed by the Users service · 6.2.2 Preparing backend parts in the Users service to be used by the UI · 6.2.3 Creating the UI using Qute, HTMX, and a REST backend · 6.2.4 Trying the application · 6.3 Other security features of Quarkus · 6.4 Running in production mode · 6.4.1 Running Keycloak and PostgreSQL as containers · 6.4.2 Wiring the services to use Keycloak · 6.5 Next steps · 6.6 Summary

What you learn in chapter 6 →

Chapter 7: Database access

7.1 Panache · 7.1.1 Active record pattern · 7.1.2 Getting started with Panache · 7.1.3 Using Panache in the Reservation service · 7.2 Panache repository pattern · 7.2.1 Utilizing repository pattern with MySQL · 7.2.2 Using the repository pattern in Inventory · 7.3 Traditional ORM/JPA data access · 7.4 REST Data · 7.5 Transactions · 7.5.1 Declarative transactions · 7.5.2 Manual handling with QuarkusTransaction · 7.5.3 Transactions with Panache · 7.6 Panache with NoSQL · 7.6.1 Utilizing MongoDB with Panache · 7.6.2 Using the Panache MongoDB in Rental service · 7.6.3 Adjusting Reservation service to the Rental service updates · 7.7 Reactive data access · 7.7.1 Using Hibernate Reactive with Panache · 7.7.2 Reservation service updates for Hibernate Reactive usage · 7.8 Next steps · 7.9 Summary

What you learn in chapter 7 →

Chapter 8: Reactive programming

8.1 Being reactive · 8.1.1 Handling of I/O operations · 8.1.2 Writing reactive code · 8.2 Mutiny · 8.2.1 Reactive streams · 8.2.2 Mutiny API · 8.3 Reactive engine · 8.4 Making Car Rental reactive · 8.4.1 Reservation service · 8.4.2 Inventory service · 8.5 Virtual threads with project Loom · 8.5.1 Project Loom in Quarkus · 8.5.2 Problems with project Loom · 8.6 Next steps · 8.7 Summary

What you learn in chapter 8 →

Chapter 9: Quarkus messaging

9.1 Car rental messaging integrations · 9.2 Reactive systems · 9.3 MicroProfile Reactive Messaging · 9.3.1 Synchronous vs. asynchronous distributed communication · 9.3.2 Reactive messaging API · 9.3.3 Message acknowledgments · 9.3.4 Integrating imperative code with reactive messaging · 9.4 Introducing messaging in Reservation · 9.5 Connectors · 9.5.1 What is a connector? · 9.5.2 Connector configuration · 9.6 Quarkus messaging with Kafka connector · 9.6.1 Kafka integration in the Rental service · 9.6.2 Testing messaging with Kafka · 9.7 Quarkus messaging with RabbitMQ · 9.7.1 Testing messaging with RabbitMQ · 9.8 Car rental Billing service · 9.8.1 Messaging in the Billing service · 9.8.2 Consuming RabbitMQ messages from the Reservation service · 9.8.3 Producing confirmations to the Rental service · 9.8.4 Rental service invoice confirmations · 9.9 Next steps · 9.10 Summary

What you learn in chapter 9 →

Chapter 10: Cloud-native application patterns

10.1 MicroProfile, SmallRye, and Quarkus · 10.1.1 What is SmallRye? · 10.2 Monitoring application health · 10.2.1 Monitoring the health of car rental · 10.3 Application metrics · 10.3.1 Micrometer · 10.3.2 Metric types · 10.3.3 Metric dimensionality · 10.3.4 The programming model · 10.3.5 Prometheus and Grafana · 10.3.6 Monitoring metrics of car rental · 10.4 Tracing · 10.4.1 OpenTelemetry · 10.4.2 Adding tracing capabilities to car rental · 10.5 Fault tolerance · 10.5.1 Adding fault tolerance to car rental · 10.5.2 Alternative fault tolerance approaches · 10.6 Service discovery · 10.7 Next steps · 10.8 Summary

What you learn in chapter 10 →

Chapter 11: Quarkus applications in the cloud

11.1 Car rental production · 11.1.1 Externalizing providers for independent deployment · 11.2 Building and pushing container images · 11.2.1 Building images with Quarkus without extensions · 11.2.2 Building and pushing images with Quarkus extensions · 11.2.3 Image customizations · 11.2.4 Pushing car rental images to quay.io · 11.3 Kubernetes and OpenShift integration · 11.3.1 Generating Kubernetes resources · 11.3.2 Customizing generated manifests · 11.3.3 Deploying Quarkus applications on Kubernetes · 11.3.4 Deploying Quarkus applications on OpenShift · 11.4 Kubernetes and OpenShift clients · 11.5 Serverless application with Quarkus · 11.5.1 Serverless architecture · 11.5.2 Funqy · 11.5.3 Car statistics application with Knative · 11.5.4 Car statistics Knative deployment · 11.6 Deploying car rental in the cloud · 11.6.1 Setting up OpenShift Sandbox · 11.6.2 Car rental infrastructure deployment with OpenShift Sandbox · 11.6.3 Car rental services deployment with OpenShift Sandbox · 11.7 Next steps · 11.8 Summary

What you learn in chapter 11 →

Chapter 12: Custom Quarkus extensions

12.1 Motivation to create custom extensions · 12.1.1 Initialization · 12.1.2 Build-time steps and bytecode generation · 12.1.3 Configuration · 12.1.4 Dependency injection · 12.1.5 Dev mode shutdown hooks · 12.1.6 Dev Services · 12.1.7 Dev UI · 12.1.8 Native mode · 12.2 Extension concepts and structure · 12.2.1 Modules · 12.2.2 Processors and recorders · 12.2.3 Build items · 12.3 Creating an extension · 12.3.1 Creating the project · 12.3.2 Extending the configuration model · 12.3.3 Creating the HTTP handler · 12.3.4 Creating the recorder · 12.3.5 Creating the processor · 12.3.6 Trying out the extension · 12.4 Testing an extension · 12.5 Next steps · 12.6 Summary

What you learn in chapter 12 →

Concepts explained in this book

These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.