Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Microservice Patterns - Implemented by Eclipse MicroProfile

Microservice Patterns - Implemented by Eclipse MicroProfile

Eclipse MicroProfile provides specifications for the most commonly used microservice patterns. This session presents a group of patterns that will be explained and demoed live in a down-to-earth and easily understandable way.

Patterns covered include Service per Container, Externalized Configuration, Health Check API, Application Metrics, Circuit Breaker, Access Token, Distributed Tracing.

There will be live coding and demo of all technologies implementing the patterns.

ivargrimstad

January 09, 2020
Tweet

More Decks by ivargrimstad

Other Decks in Programming

Transcript

  1. COPYRIGHT (C) 2020 ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Microservice Patterns Implemented by Eclipse MicroProfile Ivar Grimstad
 Jakarta EE Developer Advocate, Eclipse Foundation
  2. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Eclipse MicroProfile
  3. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile
  4. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile M icroProfile 3.2 Novem ber 1, 2019
  5. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile Open Liberty
  6. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) java -jar dukes.jar
  7. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile
  8. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Getting Started
  9. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile
  10. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Microservice Patterns
  11. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) 1. Health Check API 2. Application Metrics 3. Externalized Configuration 4. Circuit Breaker 5. Access Token 6. Distributed Tracing 7. API Description
  12. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Health Check API
  13. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) How to detect that a running service instance is unable to handle requests?
  14. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) MicroProfile Health API
  15. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  16. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  17. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Application Metrics
  18. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) How to understand the behavior of an application and troubleshoot problems?
  19. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) MicroProfile Metrics
  20. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  21. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  22. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Externalized Configuration
  23. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) How to enable a service to run in multiple environments without modification?
  24. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Configuration for MicroProfile
  25. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile System Properties System.getProperties() Environment Variables System.getenv() Application Configuration META-INF/microprofile-config.properties
  26. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  27. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  28. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Circuit Breaker
  29. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) How to prevent a network or service failure from cascading to other services?
  30. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile
  31. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  32. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  33. location http://localhost:8484/data/location Response in Sandusky day http://localhost:8080/data/day Thursday time http://localhost:8383/data/time

    15:30 Response conference http://localhost:8282/data/conference Response CodeMash Talk greeting http://localhost:8181/data/hello You have a CodeMash Talk in Sandusky Thursday at 15:30 Response Ope Open Liberty Fallback Fallback Fallback
  34. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Access Token
  35. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) How to communicate the identity of the requestor to the services that handle the request?
  36. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Basic Authentication
  37. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Basic c25vb3850nBhc3M= User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  38. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) OAuth 2.0
  39. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer 2YotnF2FEjrlzCsidMWpAA User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”} POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Basic c25vb3850nBhc3M= User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”} POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer 2YotnF2FEjrlzCsidMWpAA User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  40. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) JSON Web Token (JWT)
  41. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiQ mVhcmVyIiwiYXVkIjoic2ltcGxlYXBwIiwic3ViIjoiYm9iIiwidXBuIjo iYm9iIiwiY3VzdG9tQ2xhaW0iOiJjdXN0b21WYWx1ZSIsImdyb3VwcyI6W yJhZG1pbiIsInVzZXIiXSwiaXNzIjoiaHR0cDovL29wZW5saWJlcnR5Lml vIiwiZXhwIjoxNTI1MzM5MjU5LCJpYXQiOjE1MjUyNTI4NTl9.nDDpCR2w MWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz9vc ptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowgJHwdvv7hMZvrK1loNrPfb yv727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1 _y351lp2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5r m0MMGIuAXdgUiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0 i31YRhLpYHfbzh_NlRrRPjGPNgzOIN1RInwPC8jdg_g User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  42. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiQ mVhcmVyIiwiYXVkIjoic2ltcGxlYXBwIiwic3ViIjoiYm9iIiwidXBuIjo iYm9iIiwiY3VzdG9tQ2xhaW0iOiJjdXN0b21WYWx1ZSIsImdyb3VwcyI6W yJhZG1pbiIsInVzZXIiXSwiaXNzIjoiaHR0cDovL29wZW5saWJlcnR5Lml vIiwiZXhwIjoxNTI1MzM5MjU5LCJpYXQiOjE1MjUyNTI4NTl9.nDDpCR2w MWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz9vc ptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowgJHwdvv7hMZvrK1loNrPfb yv727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1 _y351lp2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5r m0MMGIuAXdgUiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0 i31YRhLpYHfbzh_NlRrRPjGPNgzOIN1RInwPC8jdg_g User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  43. @ivar_grimstad #MicroProfile ✦Header ✦ JSON, Base64 URL Encoded ✦ Algorithm,

    Type ✦Payload ✦ JSON, Base64 URL Encoded ✦ Standard + Custom entries ✦Signature ✦ Binary, Base64 URL Encoded ✦ The actual signature
  44. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile POST /hello HTTP/1.1 Host: localhost:8080 Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiQ mVhcmVyIiwiYXVkIjoic2ltcGxlYXBwIiwic3ViIjoiYm9iIiwidXBuIjo iYm9iIiwiY3VzdG9tQ2xhaW0iOiJjdXN0b21WYWx1ZSIsImdyb3VwcyI6W yJhZG1pbiIsInVzZXIiXSwiaXNzIjoiaHR0cDovL29wZW5saWJlcnR5Lml vIiwiZXhwIjoxNTI1MzM5MjU5LCJpYXQiOjE1MjUyNTI4NTl9.nDDpCR2w MWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz9vc ptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowgJHwdvv7hMZvrK1loNrPfb yv727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1 _y351lp2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5r m0MMGIuAXdgUiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0 i31YRhLpYHfbzh_NlRrRPjGPNgzOIN1RInwPC8jdg_g User-Agent: HTTPie/0.9.9 Accept: */* Content-Type: application/json Content-Length: 26 {“message”:“Hello, Duke!”}
  45. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile { “alg”: “RS256”, “typ”: “JWT} { “token-type: “access-token”, “username”: “duke”, “scopes”: [ “java”: “everywhere” ], “exp”: 1474280963, “iat”: 1474279163 “jti”: “66881b068b249ad9” } nDDpCR2wMWsENaDGORQblErOCJ6ii1R-N6iSzVsAz2RoUlvM2PrST2qT6kje-Nz 9vcptbSpOSlF1OuJydvP8Tg3puJKI5vGyL4RMowg-JHwdvv7hMZvrK1loNrPfby v727L9UwJSZMdzL_sibiXDuj-bIBIr6yGjVF86aQnh-PWBV8HHM1iW8l1_y351l p2CAPkfjKwLU91iIT1jO1QCwItF8Dv-zAzmhd_rOIF58eB809_5rm0MMGIuAXdg UiU2bdEJQCkTWJKNNaSu5oddZzlKaCX4hIgBdrVV6447DM0i31YRhLpYHfbzh_N lRrRPjGPNgzOIN1RInwPC8jdg_g
  46. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  47. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  48. greeting location conference Fallback http://localhost:8181/data/hello http://localhost:8282/data/conference http://localhost:8484/data/location You have a

    CodeMash Talk in Sandusky Thursday at 15:30 Response Response Response Ope Open Liberty CodeMash Talk in Sandusky day http://localhost:8080/data/day time http://localhost:8383/data/time 15:30 Thursday Response Response Fallback Fallback Secured JWT
  49. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Distributed Tracing
  50. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) How to understand the behavior of an application and troubleshoot problems?
  51. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  52. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  53. greeting location conference Fallback http://localhost:8181/data/hello http://localhost:8282/data/conference http://localhost:8484/data/location You have a

    CodeMash Talk in Sandusky Thursday at 15:30 Response Response Response Ope Open Liberty CodeMash Talk in Sandusky day http://localhost:8080/data/day time http://localhost:8383/data/time 15:30 Thursday Response Response Fallback Fallback Secured JWT traced
 greeting
  54. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) API Description
  55. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Which knowledge should be shared between an API provider and its clients? How should this knowledge be documented?
  56. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0)
  57. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) DEMO
  58. COPYRIGHT (C) 2020 ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) Summary
  59. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile https://microservice-api-patterns.org/
  60. @ivar_grimstad #MicroProfile COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE

    AVAILABLE UNDER THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) 1. Health Check API 2. Application Metrics 3. Externalized Configuration 4. Circuit Breaker 5. Access Token 6. Distributed Tracing 7. API Description
  61. COPYRIGHT (C) 2020, ECLIPSE FOUNDATION, INC. | MADE AVAILABLE UNDER

    THE ECLIPSE PUBLIC LICENSE 2.0 (EPL-2.0) @ivar_grimstad #MicroProfile Microservice Patterns http://microservices.io
 https://microservice-api-patterns.org/ Samples https://github.com/ivargrimstad Microprofile http://microprofile.io Jakarta EE https://jakarta.ee