89
DevDays 19 #RESTSecurity @dblevins @tomitribe #devdays2019 @JLouisMonteiro @tomitribe Lightweight Enterprise Java With MicroProfile Jean-Louis Monteiro Tomitribe

Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 19

#RESTSecurity @dblevins @tomitribe#devdays2019 @JLouisMonteiro @tomitribe

Lightweight Enterprise JavaWith MicroProfile

Jean-Louis Monteiro Tomitribe

Page 2: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Agenda• Microservices!

• What is MicroProfile?

• Specs Overview

• Demos

• MicroProfile Future

Page 3: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Microservices Anyone?

Page 4: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What do people mean by Microservices?• “Small autonomous services working together”

• “Small enough but not too small”

• “Can be wriCen in 2 weeks”

• “Single responsibility principle”

• “Domain-driven design”

Page 5: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What do others think?

Page 6: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What do others think?

Page 7: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What do others think?

Page 8: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Why Microservices?• Deliver new features quicker

• Smaller, agile teams

• Scale services independently

• Cloud

Page 9: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Microservices Challenges• Scalability

• Cost ReducLon

• Resilience

• Monitoring

• Security

Page 10: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What is MicroProfile?• hCp://microprofile.io/

• Enterprise Java for Microservices

• Open Source (Eclipse)

• 3 years old plaUorm

Page 11: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What is MicroProfile?• IniLal version 1.0 with CDI, JAX-RS, JSON-P in Sep 2016

• ApplicaLon portability across runLmes

• Currently at version 2.2 since Feb 2019

• ConfiguraLon, Fault Tolerance, JWT PropagaLon, Health Check, Metrics, Open Tracing, Open API and REST Client

• ReacLve Streams released standalone

Page 12: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What is MicroProfile?

Page 13: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Why MicroProfile?• Slowdown in Java EE innovaLon

• NegaLve percepLon towards the technology

• Not prepared for Microservices development

Page 14: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Why MicroProfile?

0

10

20

30

40

EE 5 Specs (2006) EE 6 Specs (2009) EE 7 Specs (2013) EE 8 Specs (2017)

3937

30

24

Page 15: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Why MicroProfile?• A set of “standards” were required to offer guidance in building

Microservices in Java

• These need to evolve very quickly to adjust to the fast moving Microservices world

• A community of individuals, organisaLons and vendors collaboraLng to make this a reality

Page 16: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile != EE (or Jakarta EE)

Page 17: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Who is involved in MicroProfile?

Page 18: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Implementations

Page 19: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

My first MicroProfile App

Page 20: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

CDI• Contexts and Dependency InjecLon

• Bean Lifecycle and Typesafe InjecLon

• Producers

• Interceptors

• Observers

Page 21: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

JAX-RS• RESTful Web Services

• AnnotaLon based

• HTTP Centric

Page 22: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

JSON-P• Parse, Generate Transform and Query JSON

• Streaming API

• Object Model API

Page 23: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Putting it all together@ApplicationScoped @Path("books") public class BookResource { @Inject private BookBean bookBean;

@GET @Path("{id}") public Response findById(@PathParam("id") final Long id) { final Book book = bookBean.find(id); final JsonObjectBuilder builder = Json.createObjectBuilder() .add(“id", book.getId()) .add("name", book.getTitle());

return Response.ok(builder.build().toString()).build();

} }

Page 24: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Evolving your MicroProfile App

Page 25: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

number-api

book-api

Architecture

Page 26: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Runtime• Raspberry PI v3 (HypriotOS)

• Package everything with Docker

• Local Docker Registry

• Push Docker Images with Ansible

Page 27: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Deployment

docker-repo Router

Microservices

Page 28: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Configuration

Page 29: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Configuration• ApplicaLons need configuraLon based on their running

environment

• It must be possible to change configuraLon without repacking the applicaLon

• Based on DeltaSpike Config, Apache Tamaya and Sabot

Page 30: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Configuration• Standalone or in a CDI Container

• Default Values

• Supports the most common Java Type (including OpLonal)

Page 31: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Configuration

@Inject@ConfigProperty(name="NUMBER_TARGET_API", defaultValue=“http://localhost:8081/number-api/numbers/generate")

private String numberApiTargetUrl;

Page 32: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Configuration

Config config = ConfigProvider.getConfig();

final String url = config.getValue("NUMBER_TARGET_API",

String.class);

Page 33: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Config Sources• META-INF/microprofile-config.properLes

• System properLes

• Environment variables

• Pluggable to allow custom config sources and providers through the ServiceLoader mechanism

Page 34: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Fault Tolerance

Page 35: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Fault Tolerance• Different strategies to guide the execuLon and result of some

logic

• Inspired by Hystrix and Failsafe

• Supports Sync and Async execuLon

Page 36: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Fault Tolerance• Depends on CDI

• Interceptor bindings

• Business method invocaLon

• Integrates with MP Config and Metrics

Page 37: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Timeout• Prevents the execuLon from waiLng forever

• Fail the execuLon if the Lmeout is hit

• Useful when calling other services

Page 38: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Retry• Invoke the same operaLon again

• Specify criteria on when to retry

• Recover from network glitchs

Page 39: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Fallback• Invoked when the original execuLon fails

• Specify when it fails

• Fallback to some other execuLon to prevent failures

Page 40: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Circuit Breaker• Prevent repeated failures

• Fail fast

• Can be open, half-open or closed

• Protect services

Page 41: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Bulkhead• Limit number of concurrent requests

• Access from mulLple contexts

• Prevent failures from cascading

Page 42: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Healthchecks

Page 43: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Healthchecks• Probe the state of a computer node

• Primary target cloud infrastructure

• Automated processes to maintain the state of nodes

Page 44: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Healthchecks• Simple API to specify health status

• /health JAX-RS endpoint reporLng server health

• Response status indicates if the health check passed

• Payload can include more detail

Page 45: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Healthchecks

@Health@ApplicationScopedpublic class CheckDiskSpace implements HealthCheck { public HealthCheckResponse call() { }}

Page 46: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

HealthchecksGET /health{ "outcome": "UP", "checks": [{ "name": "diskspace", "state": "UP", "data": { "key": "freebytes", "freebytes": "126000000000" } }]}

Page 47: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Healthcheck Demo

Page 48: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Metrics

Page 49: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Metrics• Monitor essenLal System Parameters

• Ensure reliable operaLon of soiware

• Monitoring endpoints to collect data

Page 50: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Metrics• Accessible via REST interface

• /metrics/base for MP compliant servers

• /metrics/applicaLon for ApplicaLon specific Metrics

• /metrics/vendor for Server specific metrics

• OPTIONS provides metadata, such as Unit of measure

Page 51: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

GET /metrics/base

{  "thread.count" : 33,  "thread.max.count" : 47,  "memory.maxHeap" : 3817863211,  "memory.usedHeap" : 16859081,  "memory.committedHeap" : 64703546}

Page 52: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

OPTIONS /metrics/base{  "fooVal": {    "unit": "milliseconds",    "type": "gauge",    "description": "The average duration of foo requests during last 5 minutes",    "displayName": "Duration of foo",    "tags": "app=webshop"  },  "barVal": {    "unit": "megabytes",    "type": "gauge",    "tags": "component=backend,app=webshop"  }}

Page 53: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Metrics• @Counted

• @Metered

• @Timed

• @Gauge

• Histogram

Page 54: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Application Metrics

@GET @Path(“/{id}“) @Metered(name = “BookResource.findById_meter”) @Timed(name = “BookResource.findById_timer”, unit = MetricUnits.MILLISECONDS, absolute = true) public Response findById(@PathParam(“id") final Long id) { ... }

Page 55: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

GET /metrics/application/{meter}

Meter

{ "{meter}": { "count": 1, "fifteenMinRate": 0.2, "fiveMinRate": 0.2, "meanRate": 0.015384615384615385, "oneMinRate": 0.2, "unit": "per_second" }}

Page 56: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

GET /metrics/application/{timer}

Timed

{ "{timer}": { "count": 1, "fifteenMinRate": 0.2, "fiveMinRate": 0.2, "max": 13644163, "mean": 13644163, "meanRate": 0.015384615384615385, "min": 13644163, "oneMinRate": 0.2, "p50": 13644163, "p75": 13644163, "p95": 13644163, "p98": 13644163, "p99": 13644163, "p999": 13644163, "stddev": 0 }}

Page 57: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

GET /metrics/application/{counter}

Counted

{ "{counter}": 156825}

Page 58: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Gauge

public class BookResource {

private AtomicLong booksAdded = new AtomicLong(); @Gauge(name="booksadded", unit = MetricUnits.NONE) public long count() { return booksAdded.get(); }}

Page 59: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

GET /metrics/application/{gauge}

Gauge

{ "{gauge}": 156825}

Page 60: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Histogram

public class BookResource { @Inject @Metric(name = "bookcount") private Histogram histo;

public void update(long count) { histo.update(count); }}

Page 61: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile OpenTracing

Page 62: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

OpenTracing• Trace the flow of a request across services

• OpenTracing is a distributed tracing standard for applicaLons

• Java Binding to OpenTracing ImplementaLon

Page 63: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

OpenTracing• JAX-RS calls are traced

• Context propagated to services called with REST client • X-B3-TraceId, X-B3-ParentSpanId, X-B3-SpanId

• Traces are collected and pushed to a database

Page 64: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

OpenTracing• OperaLons are measured in Spans

• Spans are grouped together into Traces

Page 65: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

@Traced@GET@Path(“/books")public Response findBooks() { }

Tracing CDI Calls

Page 66: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

@ApplicationScopedpublic class BookBean {

@Inject private Tracer tracer;

public Book create(final Book book) { final Span activeSpan = tracer.activeSpan(); final Tracer.SpanBuilder spanBuilder = tracer.buildSpan("create");

if (activeSpan != null) { spanBuilder.asChildOf(activeSpan.context()); }

final Span span = spanBuilder.withTag("created", true).start(); tracer.scopeManager().activate(span, true);

// do work span.finish();

return book; }}

OpenTracing

Page 67: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Zipkin Demo

Page 68: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile JWT Propagation

Page 69: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Challenges in security• Who is the caller?

• What can he do?

• How to propagate the security context?

Page 70: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

JWT Propagation• Security Tokens

• Most common: OAuth2, OpenID Connect JWT

• Lightweight way to propagate idenLLes across different services

Page 71: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

JWT Propagation• Role based access control

• Keys (JWKS)

• Standard configuraLon (MP Config)

Page 72: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Goals• Extract and verify the token

• IdenLfy the caller

• Enforce authorizaLon policies

Page 73: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

What is a JWT?• Pronounced “JOT”

• SAML like but less verbose

• Fancy JSON map

• BASE 64 URL encoded

• Digitally signed (RSA-SHA256, HMAC-SHA512, etc)

• Possibly encrypted

• Built-in expiraLon

Page 74: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

@LoginConfig(authMethod = "MP-JWT")public class ApplicationConfig extends Application { // let the server discover the endpoints}

——@Injectprivate JsonWebToken jwtPrincipal;

@Contextprivate SecurityContext securityContext;

@Inject@Claim("username")private ClaimValue<String> username;

@Inject@Claim("email")private ClaimValue<String> email;

——@RolesAllowed("create")public Response create(final Book book, @Context UriInfo uriInfo) {...}

Page 75: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile OpenAPI

Page 76: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Open API• Java API for the OpenAPI v3 specificaLon

• OpenAPI v3 is based on Swagger v2

• AnnotaLons should be similar

Page 77: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Configuration@GET@Path("/{id}")@Operation(summary = "Find a Book by Id")@APIResponse(responseCode = "200", content = {@Content(schema =

@Schema(implementation = Book.class))})public Response findById(@PathParam("id") final Long id) { return bookBean.findById(id) .map(Response::ok) .orElse(status(NOT_FOUND)) .build();}

Page 78: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

paths: /books/{id}: get: parameters: - name: "id" required: true style: "simple" schema: readOnly: false deprecated: false description: "The id of the Book" writeOnly: false deprecated: false summary: "Find a Book by Id" responses: 200: content: application/json: schema:

… description: "" operationId: "findById"

GET /openapi

Page 79: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

OpenAPI Demo

Page 80: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile REST Client

Page 81: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

REST Client• Microservices typically talk REST to other services

• Several JAX-RS implementaLons already support interface definiLon

• Consistent and easy to reuse

Page 82: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

REST Client• Type safe REST Service over HTTP

• Extends JAX-RS 2.0 API’s

• More natural code style

• Similar to Feign

Page 83: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Configuration@RegisterRestClient@Path(“/books")public interface BookService {@GET@Path("/{id}")Response findById(@PathParam("id") final Long id);

}

@ApplicationScopedpublic class BookStore { @Inject @RestClient private BookService client;}

Page 84: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Starter

https://start.microprofile.io

Page 85: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Future

Page 86: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

MicroProfile Roadmap• MicroProfile 3.0 by June 2019

• Major updates to Health and Metrics

• GraphQl, Long Running AcLons, Concurrency, ReacLve Messaging, Event Data, ReacLve RelaLonal DB Access

Page 87: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Get Involved

Page 88: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

@dblevins @tomitribe

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Resources• hCp://microprofile.io/

• hCp://tomee.apache.org

• hCps://github.com/radcortez/microprofile-samples

Page 89: Lightweight Enterprise Java · • Microservices! • What is ... • OpenTracing is a distributed tracing standard for applicaons ... Zipkin Demo. 2019 #devdays2019 @JLouisMonteiro

Dev

Day

s 201

9

#devdays2019 @JLouisMonteiro @tomitribe

Thank you!