SlideShare a Scribd company logo
Matt Raible | @mraible
December 7, 2021
Java REST API Comparison


Micronaut, Quarkus, and
Spring Boot
Photo by Evi T. on Unsplash
@mraible
Who is Matt Raible?
Father, Husband, Skier, Mountain
Biker, Whitewater Rafter


Bus Lover


Web Developer and Java Champion


Okta Developer Advocate


Blogger on raibledesigns.com and
developer.okta.com/blog
@mraible
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
developer.okta.com
@mraible
Today’s Agenda
Why Java?


Build { REST, GraphQL } APIs with Java


Secure your APIs with OAuth 2.1


Build with Docker


Go Native with GraalVM
https://unsplash.com/photos/JsTmUnHdVYQ
@mraible
Why Java?
25+ Years


of use, abuse, and improvements


Open Source


code is available; many popular open source


frameworks and tools


Hugely Popular and widely used


by many enterprises and web-scale companies
@mraible
Download the JDK from OpenJDK


https://jdk.java.net/17


Or from Adoptium


https://adoptium.net
Get Started with Java 17
@mraible
Get Started with Java 17
Better yet, use SDKMAN!


curl -s https://get.sdkman.io | bash


sdk install java 17-open
Java Releases and Features
https://developer.okta.com/blog/2020/01/09/java-rest-api-showdown
Build REST APIs with Java
Serverless
💵 💸 https://unsplash.com/photos/glRqyWJgUeY
@mraible
sdk install micronaut


mn create-app com.okta.rest.app 


-b maven -f security-jwt
Get Started with Micronaut
https://micronaut.io/launch
package com.okta.rest.controller;


import io.micronaut.http.MediaType;


import io.micronaut.http.annotation.Controller;


import io.micronaut.http.annotation.Get;


import io.micronaut.http.annotation.Produces;


import io.micronaut.security.annotation.Secured;


import io.micronaut.security.rules.SecurityRule;


import java.security.Principal;


@Controller("/hello")


public class HelloController {


@Get


@Secured(SecurityRule.IS_AUTHENTICATED)


@Produces(MediaType.TEXT_PLAIN)


public String hello(Principal principal) {


return "Hello, " + principal.getName() + "!";


}


}
micronaut.security.enabled=true


micronaut.security.token.jwt.enabled=true


micronaut.security.token.jwt.signatures.jwks.okta.url=
https://dev-133337.okta.com/oauth2/default/v1/keys
Micronaut JWT Security
micronaut.security.enabled=true


micronaut.security.token.jwt.enabled=true


micronaut.security.token.jwt.signatures.jwks.okta.url=
https://dev-133337.okta.com/oauth2/default/v1/keys
Micronaut JWT Security
https://micronaut-projects.github.io/micronaut-security/latest/guide/#jwt
Install HTTPie (a better cURL)
$ <tool> install httpie
https://httpie.org
Test Micronaut with HTTPie
https://httpie.org
mvn mn:run


http :8080/hello


TOKEN=eyJraWQiOiJxOE1QMjFNNHZCVmxOSkxGbFFWNlN...


http :8080/hello Authorization:"Bearer $TOKEN"
Verify Micronaut API with HTTPie
@mraible
Get Started with Quarkus
mvn io.quarkus:quarkus-maven-plugin:2.5.1.Final:create 


-DprojectGroupId=com.okta.rest 


-DprojectArtifactId=quarkus 


-DclassName="com.okta.rest.quarkus.HelloResource" 


-Dpath="/hello" 


-Dextensions="smallrye-jwt,resteasy-reactive"
https://code.quarkus.io
package com.okta.rest.quarkus;


import io.quarkus.security.Authenticated;


import javax.ws.rs.GET;


import javax.ws.rs.Path;


import javax.ws.rs.Produces;


import javax.ws.rs.core.Context;


import javax.ws.rs.core.MediaType;


import javax.ws.rs.core.SecurityContext;


import java.security.Principal;


@Path("/hello")


public class HelloResource {


@GET


@Path("/")


@Authenticated


@Produces(MediaType.TEXT_PLAIN)


public String hello(@Context SecurityContext context) {


Principal userPrincipal = context.getUserPrincipal();


return "Hello, " + userPrincipal.getName() + "!";


}


}
mp.jwt.verify.publickey.location=
https://dev-133337.okta.com/
oauth2/default/v1/keys


mp.jwt.verify.issuer=https://
dev-133337.okta.com/oauth2/
default
MicroProfile JWT Security
https://www.eclipse.org/community/eclipse_newsletter/2017/september/article2.php
mp.jwt.verify.publickey.location=
https://dev-133337.okta.com/
oauth2/default/v1/keys


mp.jwt.verify.issuer=https://
dev-133337.okta.com/oauth2/
default
MicroProfile JWT Security
https://www.eclipse.org/community/eclipse_newsletter/2017/september/article2.php
Java REST API Framework Comparison - PWX 2021
Test Quarkus with HTTPie
https://httpie.org
mvn quarkus:dev


http :8080/hello


TOKEN=eyJraWQiOiJxOE1QMjFNNHZCVmxOSkxGbFFWNlN...


http :8080/hello Authorization:"Bearer $TOKEN"
Verify Quarkus API with HTTPie
@mraible
Get Started with Spring Boot
http https://start.spring.io/starter.zip 


dependencies==web,oauth2-resource-server,native 


packageName==com.okta.rest 


name==spring-boot 


type==maven-project 


baseDir==spring-boot | tar -xzvf -
https://start.spring.io
package com.okta.rest.controller;


import org.springframework.web.bind.annotation.GetMapping;


import org.springframework.web.bind.annotation.RestController;


import java.security.Principal;


@RestController


public class HelloController {


@GetMapping("/hello")


public String hello(Principal principal) {


return "Hello, " + principal.getName() + "!";


}


}
Spring Security OAuth 2.0 Resource Server
https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2resourceserver
okta.oauth2.issuer=https://dev-133337.okta.com/
oauth2/default
Test Spring Boot with HTTPie
https://httpie.org
mvn spring-boot:run


http :8080/hello


TOKEN=eyJraWQiOiJxOE1QMjFNNHZCVmxOSkxGbFFWNlN...


http :8080/hello Authorization:"Bearer $TOKEN"
Verify Spring Boot API with HTTPie
@mraible
Startup Performance
Milliseconds
0
750
1500
2250
3000
Micronaut Quarkus Spring Boot
1,497
568
573
1,122
1,918
456
Dev Startup (mvn) Packaged Startup (java -jar)
@mraible
Build GraphQL APIs with Java
Why GraphQL?


Does your favorite framework support GraphQL?


Micronaut


https://micronaut-projects.github.io/micronaut-graphql/latest/guide


Quarkus


https://quarkus.io/guides/smallrye-graphql


Spring Boot


https://spring.io/projects/spring-graphql
@mraible
Secure your API with OAuth 2.0
https://aaronparecki.com/2019/12/12/21/its-time-for-oauth-2-dot-1
@mraible
Secure your API with OAuth 2.1
https://oauth.net/2.1
PKCE is required for all clients using the authorization code flow


Redirect URIs must be compared using exact string matching


The Implicit grant is omitted from this specification


The Resource Owner Password Credentials grant is omitted from this specification


Bearer token usage omits the use of bearer tokens in the query string of URIs


Refresh tokens for public clients must either be sender-constrained or one-time use
@mraible
Authenticate with OpenID Connect (OIDC)
What is OpenID Connect?


Does your favorite framework support OIDC authentication?


Micronaut


https://guides.micronaut.io/latest/micronaut-oauth2-okta.html


Quarkus


https://quarkus.io/guides/security-openid-connect-web-authentication


Spring Boot


https://docs.spring.io/spring-security/site/docs/current/reference/html5/#oauth2login
What about testing?
@mraible
Build with Docker
Create a Dockerfile




FROM openjdk:17-alpine


ARG JAR_FILE=target/*.jar


COPY ${JAR_FILE} app.jar


EXPOSE 8080


ENTRYPOINT ["java","-jar","/app.jar"]
@mraible
Build with Docker
Build your image


docker build -t <tag-name> .


Run your image


docker run -it -p8080:8080 <tag-name>
@mraible
Build with Docker: Jib
Get Jibby with it!


mvn verify jib:build


Or build directly to your Docker daemon


mvn verify jib:dockerBuild
https://github.com/GoogleContainerTools/jib
@mraible
Build with Docker
Micronaut uses Jib, but you must configure plugins


Quarkus generates three Docker-related files


Dockerfile.jvm


Dockerfile.legacy-jar


Dockerfile.native


Dockerfile.native-distroless


Quarkus + Jib


mvn quarkus:add-extension -Dextensions="container-image-jib"
@mraible
Build with Docker
Spring Boot 2.3+ has built-in support


mvn spring-boot:build-image


Uses layered JARs for for faster builds


dependencies


snapshot-dependencies


resources


application


https://spring.io/blog/2020/01/27/creating-docker-images-with-spring-boot-2-3-0-m1
@mraible
Use Micronaut CLI


mn create-app ...


mvn package -Dpackaging=native-image


gradle nativeImage


gradle dockerBuildNative
Go Native with GraalVM and Micronaut
https://docs.micronaut.io/latest/guide/#graal
@mraible
Go Native with GraalVM and Quarkus
Create an executable without GraalVM installed


mvn package -Pnative -Dquarkus.native.container-build=true


Then, build the image


docker build -f src/main/docker/Dockerfile.native -t 


<tag-name> .


And run it


docker run -it -p8080:8080 <tag-name>
https://quarkus.io/guides/building-native-image
@mraible
Use start.spring.io to get plugins and profiles


<plugin>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-maven-plugin</artifactId>


<configuration>


<classifier>${repackage.classifier}</classifier>


<image>


<builder>paketobuildpacks/builder:tiny</builder>


<env>


<BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>


</env>


</image>


</configuration>


</plugin>


<plugin>


<groupId>org.springframework.experimental</groupId>


<artifactId>spring-aot-maven-plugin</artifactId>


<version>${spring-native.version}</version>


<executions>
Go Native with GraalVM and Spring Boot
@mraible
Go Native with GraalVM and Spring Boot
Add milestone repositories to your pom.xml


<repositories>


<repository>


<id>spring-milestones</id>


<name>Spring Milestones</name>


<url>https://repo.spring.io/milestone</url>


</repository>


</repositories>


<pluginRepositories>


<pluginRepository>


<id>spring-milestones</id>


<name>Spring Milestones</name>


<url>https://repo.spring.io/milestone</url>


</pluginRepository>


</pluginRepositories>
@mraible
Go Native with GraalVM and Spring Boot
Add Spring Native dependency


<dependency>


<groupId>org.springframework.experimental</groupId>


<artifactId>spring-native</artifactId>


<version>0.11.0-RC1</version>


</dependency>


Build the native application


mvn spring-boot:build-image
@mraible
How we fixed the Okta Spring Boot Starter
https://youtu.be/8vY-9tXlCW4
@mraible
Native Startup Performance
Milliseconds
0
25
50
75
100
December 2, 2021
61.8
18.4
19.8
Micronaut Quarkus Spring Boot
@mraible
Native Memory Used (MB)
Milliseconds
0
25
50
75
100
December 2, 2021
58
32
78
Micronaut Quarkus Spring Boot
@mraible
Tests Run on a 2019 MacBook Pro
@mraible
Demo Time!
https://github.com/oktadev/native-java-examples
Community
@mraible
Stack Overflow Tags
0
32500
65000
97500
130000
December 2, 2021
61
114,122
2,171
1,242
Micronaut Quarkus Spring Boot Helidon
@mraible
GitHub Stars
0
18750
37500
56250
75000
December 3, 2021
2,500
58,500
8,900
5,100
Micronaut Quarkus Spring Boot Helidon
star-history.t9t.io/#micronaut-projects/micronaut-core&quarkusio/quarkus&spring-projects/spring-boot
GitHub Star Growth
@mraible
Jobs on Indeed (US)
0
3250
6500
9750
13000
December 3, 2021
11,333
198
166
Micronaut Quarkus Spring Boot
@mraible
Twitter Followers
0
25000
50000
75000
100000
December 3, 2021
3,322
80,200
13,100
10,900
Micronaut Quarkus Spring Boot Helidon
Hot Web Frameworks https://hotframeworks.com
@mraible
JHipster Support 🤓
Micronaut Blueprint - github.com/jhipster/generator-jhipster-micronaut


- v1.0.2, 18 releases, 16 contributors, 382 commits


// TODO: Micronaut 3, Reactive, Microservices, GraalVM native images


Quarkus Blueprint - github.com/jhipster/generator-jhipster-quarkus


- v2.0.0-beta.1, 6 releases, 16 contributors, 550 commits


// TODO: Quarkus 2.3, Dev Services, Reactive, Microservices
https://developer.okta.com/blog/2021/01/20/reactive-java-microservices
https://developer.okta.com/blog/2020/08/17/micronaut-jhipster-heroku
https://developer.okta.com/blog/2021/03/08/jhipster-quarkus-oidc
Summary of latest update
https://twitter.com/mraible/status/1466812781454368778
@mraible
Action!
developer.okta.com/blog/tags/java


@oktadev
git clone https://github.com/oktadeveloper/okta-spring-webflux-react-
example.git
https://github.com/oktadev/native-java-examples
Use the Source, Luke!
Thanks!


Keep in Touch


raibledesigns.com


@mraible


Presentations


speakerdeck.com/mraible


Code


github.com/oktadev
developer.okta.com
developer.okta.com

More Related Content

PDF
Front End Development for Backend Developers - GIDS 2019
PDF
Bootiful Development with Spring Boot and React - UberConf 2018
PDF
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
PDF
A Gentle Introduction to Angular Schematics - Angular SF 2019
PDF
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
PDF
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
PDF
Front End Development for Back End Java Developers - Jfokus 2020
PDF
How to Win at UI Development in the World of Microservices - THAT Conference ...
Front End Development for Backend Developers - GIDS 2019
Bootiful Development with Spring Boot and React - UberConf 2018
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
A Gentle Introduction to Angular Schematics - Angular SF 2019
A Gentle Introduction to Angular Schematics - Devoxx Belgium 2019
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Front End Development for Back End Java Developers - Jfokus 2020
How to Win at UI Development in the World of Microservices - THAT Conference ...

What's hot (20)

PPT
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
PDF
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
PPT
Os Johnson
PDF
Hybrid Apps (Native + Web) via QtWebKit
PDF
Seven Simple Reasons to Use AppFuse
PPT
Choosing a Java Web Framework
PDF
Front End Development for Back End Java Developers - NYJavaSIG 2019
PDF
Clojure Web Development
PDF
JAX-RS JavaOne Hyderabad, India 2011
PDF
Spark IT 2011 - Developing RESTful Web services with JAX-RS
PDF
Comparing JVM Web Frameworks - Rich Web Experience 2010
PDF
Front End Development for Back End Developers - vJUG24 2017
PDF
Spark IT 2011 - Java EE 6 Workshop
PDF
Java Web Application Security - UberConf 2011
PDF
Apache Roller, Acegi Security and Single Sign-on
PDF
Web App Security for Java Developers - UberConf 2021
PDF
Bootiful Development with Spring Boot and React - SpringOne 2017
PDF
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
PDF
What's New in Spring 3.1
PDF
JavaOne India 2011 - Running your Java EE 6 Apps in the Cloud
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Os Johnson
Hybrid Apps (Native + Web) via QtWebKit
Seven Simple Reasons to Use AppFuse
Choosing a Java Web Framework
Front End Development for Back End Java Developers - NYJavaSIG 2019
Clojure Web Development
JAX-RS JavaOne Hyderabad, India 2011
Spark IT 2011 - Developing RESTful Web services with JAX-RS
Comparing JVM Web Frameworks - Rich Web Experience 2010
Front End Development for Back End Developers - vJUG24 2017
Spark IT 2011 - Java EE 6 Workshop
Java Web Application Security - UberConf 2011
Apache Roller, Acegi Security and Single Sign-on
Web App Security for Java Developers - UberConf 2021
Bootiful Development with Spring Boot and React - SpringOne 2017
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
What's New in Spring 3.1
JavaOne India 2011 - Running your Java EE 6 Apps in the Cloud
Ad

Similar to Java REST API Framework Comparison - PWX 2021 (20)

PDF
Java REST API Framework Comparison - UberConf 2021
PDF
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
PDF
Comparing Native Java REST API Frameworks - Devoxx France 2022
PDF
Comparing Native Java REST API Frameworks - Seattle JUG 2022
PDF
Spring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
PPTX
Migration Spring Boot PetClinic REST to Quarkus 1.2.0
PPTX
Migration Spring PetClinic to Quarkus
PDF
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
PDF
Top 10 Kubernetes Native Java Quarkus Features
PDF
Let's be real. Quarkus in the wild.
PDF
Immediate download Quarkus Cookbook Kubernetes Optimized Java Solutions 1st E...
PDF
Download full Quarkus Cookbook Kubernetes Optimized Java Solutions 1st Editio...
PDF
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
PDF
Microservices for the Masses with Spring Boot and JHipster - RWX 2018
PDF
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
PDF
Microservices for the Masses with Spring Boot, JHipster and OAuth - GIDS 2019
PDF
Get Hip with JHipster - GIDS 2019
PDF
Secure your Quarkus applications | DevNation Tech Talk
PDF
Meetup 2022 - APIs with Quarkus.pdf
PDF
Java Microservices with Spring Boot and Spring Cloud - Denver JUG 2019
Java REST API Framework Comparison - UberConf 2021
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Comparing Native Java REST API Frameworks - Devoxx France 2022
Comparing Native Java REST API Frameworks - Seattle JUG 2022
Spring Boot to Quarkus: A real app migration experience | DevNation Tech Talk
Migration Spring Boot PetClinic REST to Quarkus 1.2.0
Migration Spring PetClinic to Quarkus
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Jforum S...
Top 10 Kubernetes Native Java Quarkus Features
Let's be real. Quarkus in the wild.
Immediate download Quarkus Cookbook Kubernetes Optimized Java Solutions 1st E...
Download full Quarkus Cookbook Kubernetes Optimized Java Solutions 1st Editio...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - South We...
Microservices for the Masses with Spring Boot and JHipster - RWX 2018
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Switzerl...
Microservices for the Masses with Spring Boot, JHipster and OAuth - GIDS 2019
Get Hip with JHipster - GIDS 2019
Secure your Quarkus applications | DevNation Tech Talk
Meetup 2022 - APIs with Quarkus.pdf
Java Microservices with Spring Boot and Spring Cloud - Denver JUG 2019
Ad

More from Matt Raible (20)

PDF
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
PDF
Micro Frontends for Java Microservices - Belfast JUG 2022
PDF
Micro Frontends for Java Microservices - Dublin JUG 2022
PDF
Micro Frontends for Java Microservices - Cork JUG 2022
PDF
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
PDF
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
PDF
Native Java with Spring Boot and JHipster - Garden State JUG 2021
PDF
Web App Security for Java Developers - PWX 2021
PDF
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
PDF
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
PDF
Native Java with Spring Boot and JHipster - SF JUG 2021
PDF
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
PDF
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
PDF
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
PDF
JHipster and Okta - JHipster Virtual Meetup December 2020
PDF
Security Patterns for Microservice Architectures - SpringOne 2020
PDF
Security Patterns for Microservice Architectures - ADTMag Microservices & API...
PDF
Security Patterns for Microservice Architectures - London Java Community 2020
PDF
Security Patterns for Microservice Architectures - Oktane20
PDF
Full Stack Reactive with React and Spring WebFlux - Switzerland JUG 2020
Keep Identities in Sync the SCIMple Way - ApacheCon NA 2022
Micro Frontends for Java Microservices - Belfast JUG 2022
Micro Frontends for Java Microservices - Dublin JUG 2022
Micro Frontends for Java Microservices - Cork JUG 2022
Reactive Java Microservices with Spring Boot and JHipster - Spring I/O 2022
Lock That Sh*t Down! Auth Security Patterns for Apps, APIs, and Infra - Devne...
Native Java with Spring Boot and JHipster - Garden State JUG 2021
Web App Security for Java Developers - PWX 2021
Mobile App Development with Ionic, React Native, and JHipster - Connect.Tech ...
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Joker...
Native Java with Spring Boot and JHipster - SF JUG 2021
Lock That Shit Down! Auth Security Patterns for Apps, APIs, and Infra - Sprin...
Reactive Java Microservices with Spring Boot and JHipster - Denver JUG 2021
Get Hip with JHipster - Colorado Springs Open Source User Group 2021
JHipster and Okta - JHipster Virtual Meetup December 2020
Security Patterns for Microservice Architectures - SpringOne 2020
Security Patterns for Microservice Architectures - ADTMag Microservices & API...
Security Patterns for Microservice Architectures - London Java Community 2020
Security Patterns for Microservice Architectures - Oktane20
Full Stack Reactive with React and Spring WebFlux - Switzerland JUG 2020

Recently uploaded (20)

PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
iTop VPN Free 5.6.0.5262 Crack latest version 2025
PPTX
Transform Your Business with a Software ERP System
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
medical staffing services at VALiNTRY
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PDF
Odoo Companies in India – Driving Business Transformation.pdf
PDF
top salesforce developer skills in 2025.pdf
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
L1 - Introduction to python Backend.pptx
PDF
Digital Strategies for Manufacturing Companies
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
iTop VPN Free 5.6.0.5262 Crack latest version 2025
Transform Your Business with a Software ERP System
Which alternative to Crystal Reports is best for small or large businesses.pdf
medical staffing services at VALiNTRY
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Odoo Companies in India – Driving Business Transformation.pdf
top salesforce developer skills in 2025.pdf
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
CHAPTER 2 - PM Management and IT Context
Wondershare Filmora 15 Crack With Activation Key [2025
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
Design an Analysis of Algorithms I-SECS-1021-03
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
How to Choose the Right IT Partner for Your Business in Malaysia
Operating system designcfffgfgggggggvggggggggg
Design an Analysis of Algorithms II-SECS-1021-03
L1 - Introduction to python Backend.pptx
Digital Strategies for Manufacturing Companies
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...

Java REST API Framework Comparison - PWX 2021