Developing, managing and opening the hood of JVM REST services - L Pfannenschmidt

Preview:

DESCRIPTION

Most modern applications targeting web or mobile use cases rely heavily on REST API backends. Being able to document, develop, deploy and scale such APIs has therefore become an essential capability in software development. In particular for agile teams aiming for continuous deployment and continuous monitoring such a setup is crucial. Swookiee (derived from “shaved wookiee” - http://swookiee.com is a shining new open source runtime environment that was built with the main intention to reduce the architectural burden of developers and therefore enabling them to focus [even more] on the implementation of features, be they implemented in Java, Groovy or Scala. This presentation introduces swookiee and shows how it provides JVM-based REST services powered by JAX-RS 2 with Jersey, Jetty and Jackson on top of the Equinox OSGi runtime. How clients and colleagues can understand and consume these services using swagger documentation. How a lightweight implementation of the OSGi RFC-182 enables remote management of swookiee instances through REST. How to increase introspection by feeding log output into logstash and kibana. And how to achieve total introspection into every aspect of your application using metrics from the number of calls by HTTP status code to measurements deep in the application like queue sizes or execution times. It even sports a basic OAuth2 provider, which enables you to provide customers out of the box with a modern authentication mechanism that isn't a pain. Bio: Lars is interested in Mobile Applications, Smart Home, Domain Specific Languages, Machine Learning, Big Data and agile development methodologies such as Scrum and Kanban. Lars is currently a Senior Software Engineer at Intuit (through Level Up Analytics acquisition) and is Founder of mobile.cologne.

Citation preview

OSGi DevCon / QCon New York 2014

Developing,managing andopening thehood of JVMREST services

/ Lars Pfannenschmidt @leastangle

What isswookiee?

/ Lars Pfannenschmidt @leastangle

Pfannen-what?Fun-an-schmidtData Products @ Intuit Data Engineering & AnalyticsFounder of User Group

★★★ @mobilecgn★@leastangle

What is swookiee?OSGi Runtime for REST ServicesJAX-RS 2Jersey, Jetty, JacksonServices in Java, Groovy, ScalaSwagger integrationMetrics / Graphite SupportJSON Logging SupportRemote Controllable (RFC-182)EPL

★★★★★★★★★

10(-6+1) - Services

AgendaBuilding REST ServicesSwagger documentationMetricsJSON LoggingRemote Control

★★★★★

Fizz Buzzhttps://flic.kr/p/6ae8KK by Luis Linero - Some rights reserved CC BY 2.0

Any number divisible by three is replaced by the wordfizz and any divisible by five by the word buzz.

Numbers divisible by three and five become fizz buzz.

FizzBuzz v1

FizzBuzz v2

Documentationhttps://flic.kr/p/dELbZF Books HD by Abhi Sharma - Some rights reserved CC BY 2.0

FizzBuzz v3

AlternativesGood old WADL? [ ]Apiary (http://apiary.io/)RAML (http://raml.org/)...

★ here★★★

MetricsOpening the hood

https://flic.kr/p/byHbPG Broken down by orangebrompton - Some rights reserved CC BY-NC-SA 2.0

FizzBuzz v4

Logginghttps://flic.kr/p/fE5Wgb Pitt River Logs by James Wheeler - Some rights reserved CC BY-NC-SA 2.0

Enabling JSON LoggingproductionLogging = true

loggingDirectory = logs

Generated logs can be found in logs/osgi-log.json

Sample Log Entry{ "timestamp":"1402051840211", "level":"INFO", "thread":"Component Resolve Thread (Bundle 48)", "logger":"com.swookiee.runtime.metrics.MetricsToGraphiteReporter", "message":"Graphite Reporter started using configuration: GraphiteReporterConfiguration [graphiteHost=localhost, graphitePort=2003, reportingIntervalInSeconds=10, reportingEnabled=true, reportingPrefix=Demo]" "context":"default"}

Messages in JSON?Map<String, Object> map = new HashMap<>();map.put("limit", limit);map.put("result", result);logger.info("{}", map);

{ "timestamp":"1401544478570", "level":"INFO", "thread":"qtp1201555453-33", "logger":"com.swookiee.demo.logging.impl.FizzBuzzService", "message":{ "result":[ "1", "2", "Fizz", "4", "Buzz" ], "limit":5 }, "context":"default"}

Remotehttps://flic.kr/p/hm8mFS

Chernobyl NPP - Control Room No. 2 by Michael Kötter - Some rights reserved CC BY-NC-SA 2.0

Some REST calls

Deployprivate SwookieeClient getSwookieeClient() throws SwookieeClientException { SwookieClientBuilder swookieClientBuilder = SwookieClientBuilder .newTarget("localhost") .withPort(8080) .withUsernamePassword("admin", "admin123"); return swookieClientBuilder.create();}

try ( SwookieeClient swookieeClient = getSwookieeClient() ) { String installedBundle = swookieeClient.installBundle(file, true); swookieeClient.startBundle(installedBundle);} catch (SwookieeClientException ex) { logger.error("Could not install/start bundle: '{}'", ex.getMessage(), ex);}

FutureRelease versionJVM languages?OAuth2 providerIntegration testing

★★★★

Thank You!swookiee.com

/ Lars Pfannenschmidt @leastangle

Recommended