SlideShare a Scribd company logo
An introduction to the MicroProfile
A L E X 	 S O T O
R E D 	 H A T 	 E N G I N E E R
O P E N 	 S O U R C E 	 A D V O C A T E
@ A L E X S O T O B
	alexsotob		lordofthejars
Q U E S T I O N S
	alexsotob		lordofthejars
	alexsotob		lordofthejars
S E P T 	 2 0 1 6 	 R E L E A S E 	 1 . 0
JAX-RS
	alexsotob		lordofthejars
S E P T 	 2 0 1 6 	 R E L E A S E 	 1 . 0
JAX-RS
CDI
	alexsotob		lordofthejars
S E P T 	 2 0 1 6 	 R E L E A S E 	 1 . 0
JAX-RS
CDI
JSON-P
	alexsotob		lordofthejars
@Informal@Informal
publicpublic		classclass		InformalGreetingInformalGreeting		extendsextends		GreetingGreeting		{{
				publicpublic	String		String	greetgreet((String	nameString	name))		{{
								returnreturn		"Hi,	""Hi,	"		++	name		name	++		"!""!";;
				}}
}}
C D I 	 E X A M P L E
	alexsotob		lordofthejars
@Informal@Informal
publicpublic		classclass		InformalGreetingInformalGreeting		extendsextends		GreetingGreeting		{{
				publicpublic	String		String	greetgreet((String	nameString	name))		{{
								returnreturn		"Hi,	""Hi,	"		++	name		name	++		"!""!";;
				}}
}}
publicpublic		classclass		PrinterPrinter		{{
		@Inject	@Informal	Greeting	greeting		@Inject	@Informal	Greeting	greeting;;
}}
C D I 	 E X A M P L E
	alexsotob		lordofthejars
@@PathPath(("/""/"))
publicpublic		classclass		GreetingResourceGreetingResource		{{
		@Inject	@Informal	Greeting	greeting		@Inject	@Informal	Greeting	greeting;;
				
		@GET		@GET
		@		@PathPath(("greeting/{name}""greeting/{name}"))
		@		@ProducesProduces((MediaTypeMediaType..TEXT_PLAINTEXT_PLAIN))
				publicpublic	Response		Response	getMessageByUsergetMessageByUser((@@PathParamPathParam(("name""name"))	String	name	String	name))		{{
								returnreturn	Response	Response..okok((greetinggreeting..greetgreet((namename))))..buildbuild(());;
				}}
}}
J A X - R S 	 E X A M P L E
	alexsotob		lordofthejars
JsonObject	value	JsonObject	value	==		newnew		JsonBuilderJsonBuilder(())		
		..beginObjectbeginObject(())		
						..addadd(("firstName""firstName",,		"John""John"))		
						..addadd(("lastName""lastName",,		"Smith""Smith"))		
						..addadd(("age""age",,		2525))
		..endObjectendObject(())
..buildbuild(());;
J S O N - P 	 E X A M P L E
	alexsotob		lordofthejars
JsonObject	value	JsonObject	value	==		newnew		JsonBuilderJsonBuilder(())		
		..beginObjectbeginObject(())		
						..addadd(("firstName""firstName",,		"John""John"))		
						..addadd(("lastName""lastName",,		"Smith""Smith"))		
						..addadd(("age""age",,		2525))
		..endObjectendObject(())
..buildbuild(());;
String	json	String	json	==		"...""...";;
JsonReader	reader	JsonReader	reader	==		newnew		JsonReaderJsonReader((newnew		StringReaderStringReader((jsonjson))));;
JsonValue	value	JsonValue	value	==	reader	reader..readObjectreadObject(());;
readerreader..closeclose(());;
J S O N - P 	 E X A M P L E
	alexsotob		lordofthejars
JsonObject	value	JsonObject	value	==		newnew		JsonBuilderJsonBuilder(())		
		..beginObjectbeginObject(())		
						..addadd(("firstName""firstName",,		"John""John"))		
						..addadd(("lastName""lastName",,		"Smith""Smith"))		
						..addadd(("age""age",,		2525))
		..endObjectendObject(())
..buildbuild(());;
String	json	String	json	==		"...""...";;
JsonReader	reader	JsonReader	reader	==		newnew		JsonReaderJsonReader((newnew		StringReaderStringReader((jsonjson))));;
JsonValue	value	JsonValue	value	==	reader	reader..readObjectreadObject(());;
readerreader..closeclose(());;
JsonWriter	jsonWriter	JsonWriter	jsonWriter	==		newnew		JsonWriterJsonWriter((newnew		FileWriterFileWriter((......))));;
JsonObject	jsonObject	JsonObject	jsonObject	==		newnew		JsonBuilderJsonBuilder(())
..buildbuild(());;
jsonWriterjsonWriter..writeObjectwriteObject((jsonObjectjsonObject));;
jsonWriterjsonWriter..closeclose(());;
J S O N - P 	 E X A M P L E
	alexsotob		lordofthejars
R A P I D L Y 	 I T E R A T E	A N D 	 I N N O V A T E
	alexsotob		lordofthejars
B U I L D 	 C O N S E N S U S
	alexsotob		lordofthejars
S T A N D A R D I Z E
	alexsotob		lordofthejars
	alexsotob		lordofthejars
R E F E R E N C E 	 A R C H I T E C T U R E
	alexsotob		lordofthejars
	alexsotob		lordofthejars
S E S S I O N 	 S E R V I C E
Session
CRUD(Session)
	alexsotob		lordofthejars
S E S S I O N 	 S E R V I C E
Session
CRUD(Session)
List<>
search(Session)
	alexsotob		lordofthejars
S E S S I O N 	 S E R V I C E
Session
CRUD(Session)
List<>
search(Session)
List<>
sessionForSpeaker(Speaker)
	alexsotob		lordofthejars
S E S S I O N 	 S E R V I C E
Session
CRUD(Session)
List<>
search(Session)
List<>
sessionForSpeaker(Speaker)
List<>
speakersForSession(Session)
	alexsotob		lordofthejars
W I L D F L Y 	 S W A R M
Jar
size
~65mb,
startup
~6s,
heap
usage
~40mb
	alexsotob		lordofthejars
W I L D F L Y 	 S W A R M
Jar
size
~65mb,
startup
~6s,
heap
usage
~40mb
Uber
jar
with
bootstrap
layer
	alexsotob		lordofthejars
W I L D F L Y 	 S W A R M
Jar
size
~65mb,
startup
~6s,
heap
usage
~40mb
Uber
jar
with
bootstrap
layer
Fractions,
Java
EE
+
WildFly
	alexsotob		lordofthejars
W I L D F L Y 	 S W A R M
Jar
size
~65mb,
startup
~6s,
heap
usage
~40mb
Uber
jar
with
bootstrap
layer
Fractions,
Java
EE
+
WildFly
Non-EE(Service
Registry,
Circtuit-Breaker,
Configuration)
	alexsotob		lordofthejars
	alexsotob		lordofthejars
V O T I N G 	 S E R V I C E
Attendee
CRUD(Attendee)
	alexsotob		lordofthejars
V O T I N G 	 S E R V I C E
Attendee
CRUD(Attendee)
SessionRating
rateSession(SessionRating)
	alexsotob		lordofthejars
V O T I N G 	 S E R V I C E
Attendee
CRUD(Attendee)
SessionRating
rateSession(SessionRating)
SessionRating
updateSession(SessionRating)
	alexsotob		lordofthejars
V O T I N G 	 S E R V I C E
Attendee
CRUD(Attendee)
SessionRating
rateSession(SessionRating)
SessionRating
updateSession(SessionRating)
List<>
allSessionVotes(SessionId)
	alexsotob		lordofthejars
V O T I N G 	 S E R V I C E
Attendee
CRUD(Attendee)
SessionRating
rateSession(SessionRating)
SessionRating
updateSession(SessionRating)
List<>
allSessionVotes(SessionId)
Double
sessionRatingAverage(SessionId)
	alexsotob		lordofthejars
V O T I N G 	 S E R V I C E
Attendee
CRUD(Attendee)
SessionRating
rateSession(SessionRating)
SessionRating
updateSession(SessionRating)
List<>
allSessionVotes(SessionId)
Double
sessionRatingAverage(SessionId)
List<>
votesByAttendee(Attendee)
	alexsotob		lordofthejars
L I B E R T Y
Jar
size
~35mb,
startup
~7s,
heap
usage
~21mb
	alexsotob		lordofthejars
L I B E R T Y
Jar
size
~35mb,
startup
~7s,
heap
usage
~21mb
Uber
jar
with
unzip
	alexsotob		lordofthejars
L I B E R T Y
Jar
size
~35mb,
startup
~7s,
heap
usage
~21mb
Uber
jar
with
unzip
Liberty,
Java
EE
	alexsotob		lordofthejars
L I B E R T Y
Jar
size
~35mb,
startup
~7s,
heap
usage
~21mb
Uber
jar
with
unzip
Liberty,
Java
EE
Extras
for
production
	alexsotob		lordofthejars
	alexsotob		lordofthejars
S C H E D U L E 	 S E R V I C E
Schedule
CRUD(Schedule)
	alexsotob		lordofthejars
S C H E D U L E 	 S E R V I C E
Schedule
CRUD(Schedule)
List<>
allForVenue(Venue)
	alexsotob		lordofthejars
S C H E D U L E 	 S E R V I C E
Schedule
CRUD(Schedule)
List<>
allForVenue(Venue)
List<>
activeAtTime(time)
	alexsotob		lordofthejars
S C H E D U L E 	 S E R V I C E
Schedule
CRUD(Schedule)
List<>
allForVenue(Venue)
List<>
activeAtTime(time)
List<>
allForDay(date)
	alexsotob		lordofthejars
P A Y A R A
Jar
size
~33mb,
startup
~5s,
heap
usage
~20mb
	alexsotob		lordofthejars
P A Y A R A
Jar
size
~33mb,
startup
~5s,
heap
usage
~20mb
Uber
jar
using
CLI
	alexsotob		lordofthejars
P A Y A R A
Jar
size
~33mb,
startup
~5s,
heap
usage
~20mb
Uber
jar
using
CLI
Glassfish,
Java
EE
	alexsotob		lordofthejars
P A Y A R A
Jar
size
~33mb,
startup
~5s,
heap
usage
~20mb
Uber
jar
using
CLI
Glassfish,
Java
EE
Hazelcast
cluster
CDI
	alexsotob		lordofthejars
	alexsotob		lordofthejars
S P E A K E R 	 S E R V I C E
Speaker
CRUD(Speaker)
	alexsotob		lordofthejars
S P E A K E R 	 S E R V I C E
Speaker
CRUD(Speaker)
Set<>
search(Speaker)
	alexsotob		lordofthejars
A P A C H E 	 T O M E E
Jar
size
~35mb,
startup
~3s,
heap
usage
~75mb
	alexsotob		lordofthejars
A P A C H E 	 T O M E E
Jar
size
~35mb,
startup
~3s,
heap
usage
~75mb
Uber
jar
bootstrap
layer
	alexsotob		lordofthejars
A P A C H E 	 T O M E E
Jar
size
~35mb,
startup
~3s,
heap
usage
~75mb
Uber
jar
bootstrap
layer
It
is
a
Tomcat,
Java
EE
	alexsotob		lordofthejars
https://github.com/microprofile/microprofile-conference
	alexsotob		lordofthejars
N E X T 	 F E A T U R E S
Persistence
	alexsotob		lordofthejars
N E X T 	 F E A T U R E S
Persistence
Security
via
JWT
	alexsotob		lordofthejars
N E X T 	 F E A T U R E S
Persistence
Security
via
JWT
Standard
Configuration
	alexsotob		lordofthejars
N E X T 	 F E A T U R E S
Persistence
Security
via
JWT
Standard
Configuration
OpenAPI/Swagger
	alexsotob		lordofthejars
N E X T 	 F E A T U R E S
Persistence
Security
via
JWT
Standard
Configuration
OpenAPI/Swagger
Service
Discovery
	alexsotob		lordofthejars
N E X T 	 F E A T U R E S
Persistence
Security
via
JWT
Standard
Configuration
OpenAPI/Swagger
Service
Discovery
Caching
	alexsotob		lordofthejars
W H E R E 	 I S 	 M Y 	 F E A T U R E ?
	alexsotob		lordofthejars
https://groups.google.com/forum/#!forum/microprofile
https://github.com/microprofile/evolution
	alexsotob		lordofthejars
	alexsotob		lordofthejars
L E T ' S 	 W I N D 	 D O W N
	alexsotob		lordofthejars
C O N C L U S I O N S
Community
is
the
most
important
	alexsotob		lordofthejars
C O N C L U S I O N S
Community
is
the
most
important
EE
and
non-EE
	alexsotob		lordofthejars
C O N C L U S I O N S
Community
is
the
most
important
EE
and
non-EE
It
is
not
a
split
	alexsotob		lordofthejars
	alexsotob		lordofthejars

http://bit.ly/2c6MWqf

asotobu@gmail.com
	alexsotob		lordofthejars

More Related Content

PDF
Jenkins 20
PDF
Docker Testing
PDF
Continuous Delivery As Code
PDF
Geb for browser automation
PDF
Mocks, Stubs and Fakes. ¿What Else?
PDF
A Modest Introduction To Swift
PDF
GraphQL, l'avenir du REST ?
PDF
C++ The Principles of Most Surprise
Jenkins 20
Docker Testing
Continuous Delivery As Code
Geb for browser automation
Mocks, Stubs and Fakes. ¿What Else?
A Modest Introduction To Swift
GraphQL, l'avenir du REST ?
C++ The Principles of Most Surprise

What's hot (18)

PDF
Publishing a Perl6 Module
PDF
Git::Hooks
PDF
[Perforce] Tasks - The Holy Hand Grenade of Branching
PDF
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
PDF
GitGot: The Swiss Army Chainsaw of Git Repo Management
PDF
Game Day in Action for Chaos Engineering - 윤석찬 (AWS 테크에반젤리스트) :: 한국 카오스엔지니어링 밋업
PDF
Monitoring using Sensu
PDF
Software Vulnerabilities in C and C++ (CppCon 2018)
PDF
الحياة اتصال - هاني المنيعي
PDF
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
PDF
تحديد و تحقيق الأهداف - هاني المنيعي
PDF
Isolating GPU Access in its Own Process
PDF
Thoughts On Learning A New Programming Language
PDF
Secure Programming Practices in C++ (NDC Oslo 2018)
PDF
BlueHat Seattle 2019 || Modern Binary Analysis with ILs
PDF
Testing Grails 3, the goob (unit), the bad (integration) and the ugly (functi...
PPT
Happy porting x86 application to android
PDF
BlueHat Seattle 2019 || Don't forget to SUBSCRIBE.
Publishing a Perl6 Module
Git::Hooks
[Perforce] Tasks - The Holy Hand Grenade of Branching
JDD 2016 - Bartosz Majsak - Meet The Assertable Chaos Monkeys
GitGot: The Swiss Army Chainsaw of Git Repo Management
Game Day in Action for Chaos Engineering - 윤석찬 (AWS 테크에반젤리스트) :: 한국 카오스엔지니어링 밋업
Monitoring using Sensu
Software Vulnerabilities in C and C++ (CppCon 2018)
الحياة اتصال - هاني المنيعي
Chaos Engineering on Microservices - 윤석찬, AWS 테크에반젤리스트
تحديد و تحقيق الأهداف - هاني المنيعي
Isolating GPU Access in its Own Process
Thoughts On Learning A New Programming Language
Secure Programming Practices in C++ (NDC Oslo 2018)
BlueHat Seattle 2019 || Modern Binary Analysis with ILs
Testing Grails 3, the goob (unit), the bad (integration) and the ugly (functi...
Happy porting x86 application to android
BlueHat Seattle 2019 || Don't forget to SUBSCRIBE.

Viewers also liked (17)

DOC
DK Resume desk and dev
PDF
Japanese Introduction to Oracle JET
PPTX
Oracleがnode.jsをやり始めたというのだが!
PPT
Implementación de un sistema 3D de información de servicios en el subsuelo en...
PPTX
Cover crops & soil compaction
PPTX
Building a Pluggable Analytics Stack with Cassandra (Jim Peregord, Element Co...
PDF
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
PDF
Cyber resilient infrastructure infographic
PDF
Responsible Pain Management with Theramine
PPTX
Hormones & Fertility
PPTX
1.4 Million Google Featured Snippets Tested - Here's What We Found
PDF
Container World 2017 - Characterizing and Contrasting Container Orchestrators
PPTX
Oracle Code Keynote with Thomas Kurian
PPTX
Passme CoP meeting customised interiors A. Castro Nov.2016
PDF
Classes inversées ... "classes à l'envers" ? Enseigner et apprendre à l’endroit
PDF
Programme d'Emmanuel Macron
PDF
From Desktop to Home: Optimizing for Voice
DK Resume desk and dev
Japanese Introduction to Oracle JET
Oracleがnode.jsをやり始めたというのだが!
Implementación de un sistema 3D de información de servicios en el subsuelo en...
Cover crops & soil compaction
Building a Pluggable Analytics Stack with Cassandra (Jim Peregord, Element Co...
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Cyber resilient infrastructure infographic
Responsible Pain Management with Theramine
Hormones & Fertility
1.4 Million Google Featured Snippets Tested - Here's What We Found
Container World 2017 - Characterizing and Contrasting Container Orchestrators
Oracle Code Keynote with Thomas Kurian
Passme CoP meeting customised interiors A. Castro Nov.2016
Classes inversées ... "classes à l'envers" ? Enseigner et apprendre à l’endroit
Programme d'Emmanuel Macron
From Desktop to Home: Optimizing for Voice

Similar to An introduction to the MicroProfile (20)

PDF
Jenkins Docker
PDF
Poster: Comparing ATS and VeriFast on RTOS system state
PDF
Fast api
PDF
Organizacion noviembre
PDF
Grand vs swift
PDF
Data Natives Amsterdam v 9.0 | "Point in Time Labeling at Scale" - Timothy Th...
PDF
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
PDF
Nginx Scripting - Extending Nginx Functionalities with Lua
PDF
Devinsampa nginx-scripting
PDF
Regexp Master
PDF
The Power of CSS
PDF
PDF
Svelte (adjective): Attractively thin, graceful, and stylish
PDF
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
PDF
WebCamp: Developer Day: The Big, the Small and the Redis - Андрей Савченко
PDF
Asynchronous data processing
PDF
Analyzing Log Data With Apache Spark
PDF
Real-time OS system state captured by ATS language
PDF
Os Fetterupdated
PDF
Functional Pe(a)rls - the Purely Functional Datastructures edition
Jenkins Docker
Poster: Comparing ATS and VeriFast on RTOS system state
Fast api
Organizacion noviembre
Grand vs swift
Data Natives Amsterdam v 9.0 | "Point in Time Labeling at Scale" - Timothy Th...
Designing a Horizontally Scalable Event-Driven Big Data Architecture with Apa...
Nginx Scripting - Extending Nginx Functionalities with Lua
Devinsampa nginx-scripting
Regexp Master
The Power of CSS
Svelte (adjective): Attractively thin, graceful, and stylish
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
WebCamp: Developer Day: The Big, the Small and the Redis - Андрей Савченко
Asynchronous data processing
Analyzing Log Data With Apache Spark
Real-time OS system state captured by ATS language
Os Fetterupdated
Functional Pe(a)rls - the Purely Functional Datastructures edition

More from Alex Soto (20)

PDF
Kubernetes Native Java
PDF
Reactive Programming for Real Use Cases
PDF
Chaos Engineering Kubernetes
PDF
Chaos Engineering Kubernetes
PDF
Microservices testing and automation
PDF
Testing in Production: From DevTestOops to DevTestOps
PDF
Supersonic Subatomic Java
PDF
From DevTestOops to DevTestOps
PDF
Istio service mesh & pragmatic microservices architecture
PDF
Zero Downtime Deployment in Microservices era
PDF
Service Mesh Patterns
PDF
Supersonic, Subatomic Java
PDF
Zero Downtime Deployment in Microservices era
PDF
Long Live and Prosper To Monolith
PDF
Sail in the cloud - An intro to Istio commit
PDF
KubeBoot - Spring Boot deployment on Kubernetes
PDF
Sail in the Cloud - An intro to Istio
PDF
Testing XXIst Century
PDF
Arquillian Constellation
PDF
Testing for Unicorns
Kubernetes Native Java
Reactive Programming for Real Use Cases
Chaos Engineering Kubernetes
Chaos Engineering Kubernetes
Microservices testing and automation
Testing in Production: From DevTestOops to DevTestOps
Supersonic Subatomic Java
From DevTestOops to DevTestOps
Istio service mesh & pragmatic microservices architecture
Zero Downtime Deployment in Microservices era
Service Mesh Patterns
Supersonic, Subatomic Java
Zero Downtime Deployment in Microservices era
Long Live and Prosper To Monolith
Sail in the cloud - An intro to Istio commit
KubeBoot - Spring Boot deployment on Kubernetes
Sail in the Cloud - An intro to Istio
Testing XXIst Century
Arquillian Constellation
Testing for Unicorns

Recently uploaded (20)

PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Approach and Philosophy of On baking technology
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Electronic commerce courselecture one. Pdf
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
NewMind AI Monthly Chronicles - July 2025
Reach Out and Touch Someone: Haptics and Empathic Computing
Approach and Philosophy of On baking technology
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
MYSQL Presentation for SQL database connectivity
Mobile App Security Testing_ A Comprehensive Guide.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Dropbox Q2 2025 Financial Results & Investor Presentation
Electronic commerce courselecture one. Pdf
Empathic Computing: Creating Shared Understanding
Digital-Transformation-Roadmap-for-Companies.pptx
Understanding_Digital_Forensics_Presentation.pptx
NewMind AI Weekly Chronicles - August'25 Week I
Network Security Unit 5.pdf for BCA BBA.
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Diabetes mellitus diagnosis method based random forest with bat algorithm
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Spectral efficient network and resource selection model in 5G networks
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication

An introduction to the MicroProfile