SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Ratpack	
  Web	
  Framework	
  
Dan	
  Woods	
  
Senior	
  Engineer	
  at	
  	
  
The	
  Groundwork	
  
@danveloper	
  on	
  
Twi.er	
  
/danveloper	
  on	
  
GitHub	
  
Learning	
  Ratpack	
  
	
  
	
  
	
  	
  
publica=on	
  Fall	
  2015	
  
Shameless	
  Self	
  Promo=on…	
  
Quick	
  Overview	
  
•  A	
  high-­‐throughput,	
  reac=ve	
  web	
  framework	
  
for	
  the	
  JVM	
  
•  Built	
  on	
  Java	
  8	
  (required)	
  and	
  comes	
  with	
  a	
  
Groovy	
  DSL	
  
•  Great	
  support	
  for	
  microservices	
  /	
  Twelve	
  
Factor	
  apps	
  
•  Rapid	
  produc=vity	
  
Quick	
  Start	
  
•  Groovy	
  DSL	
  is	
  the	
  path	
  of	
  least	
  resistance	
  
•  App	
  can	
  be	
  built	
  into	
  a	
  standalone,	
  runnable	
  
Groovy	
  script	
  
•  Rapid	
  prototyping	
  
What	
  is	
  this	
  doing?	
  
•  Imports	
  the	
  DSL	
  via	
  
ratpack.groovy.Groovy.ratpack	
  
•  The	
  closure	
  supplied	
  is	
  the	
  defini3on	
  
•  Defini=on	
  consists	
  of	
  serverConfig,	
  bindings,	
  
and	
  handlers	
  
•  App	
  defini=on	
  infers	
  reasonable	
  defaults	
  for	
  
serverConfig	
  and	
  bindings	
  
What	
  is	
  this	
  doing?	
  
Handler	
  Chain	
  
•  A	
  pipeline	
  for	
  request	
  processing	
  
•  The	
  “edge”	
  of	
  an	
  applica=on	
  
•  Defines	
  request	
  flow	
  and	
  terminal	
  handlers	
  
•  Handlers	
  can	
  be	
  thought	
  of	
  in	
  equivalent	
  
terms	
  to	
  servlets	
  and	
  servlet	
  filters	
  
Handler	
  Chain	
  
Diagram	
  courtesy	
  of	
  Andrey	
  Adamovich:	
  h_ps://twi_er.com/codingandrey	
  
	
  
Handlers	
  
•  Two	
  types	
  of	
  handlers:	
  request	
  flow	
  and	
  
terminal	
  
•  Request	
  flow	
  handlers	
  provide	
  flow	
  control	
  in	
  
processing	
  
•  Terminal	
  handlers	
  process	
  and	
  respond	
  to	
  a	
  
request	
  
Terminal	
  Handlers	
  
•  Bound	
  to	
  HTTP	
  verb(s)	
  and	
  request	
  path	
  
•  Chain	
  API	
  provides	
  seman=c	
  methods	
  for	
  
binding	
  to	
  verb	
  
Method	
   Descrip.on	
   Usage	
  
all	
   Handler	
  is	
  executed	
  for	
  all	
  requests	
  
within	
  its	
  chain	
  
all	
  {	
  
	
  	
  render	
  “Hello	
  World!”	
  
}	
  
get(path)	
   Handler	
  for	
  HTTP	
  GET	
  requests.	
  Path	
  
op=onal.	
  
get(“foo”)	
  {	
  
	
  	
  render	
  “Hello	
  Foo!”	
  
}	
  
	
  
post(path)	
   Handler	
  for	
  HTTP	
  POST	
  requests.	
  Path	
  
op=onal.	
  
post(“foo”)	
  {	
  
	
  	
  def	
  json	
  =	
  request.body.text	
  
	
  	
  …	
  
}	
  
	
  
put(path)	
   Handler	
  for	
  HTTP	
  PUT	
  requests.	
  Path	
  
op=onal.	
  
	
  
put(“foo”)	
  {	
  
	
  	
  def	
  json	
  =	
  request.body.text	
  
	
  	
  …	
  
}	
  
	
  
patch(path)	
   Handler	
  for	
  HTTP	
  PATCH	
  requests.	
  Path	
  
op=onal.	
  
	
  
patch(“foo”)	
  {	
  
	
  	
  def	
  json	
  =	
  request.body.text	
  
	
  	
  ...	
  
}	
  
	
  
delete(path)	
   Handler	
  for	
  HTTP	
  DELETE	
  requests.	
  
Path	
  op=onal.	
  
	
  
delete(“:id”)	
  {	
  
	
  	
  def	
  id	
  =	
  request.pathTokens.id	
  
	
  	
  ...	
  
}	
  
A	
  Caveat	
  to	
  Handlers	
  
•  Only	
  a	
  single	
  handler	
  can	
  be	
  bound	
  for	
  any	
  
given	
  HTTP	
  request	
  path	
  
•  You	
  must	
  use	
  request	
  flow	
  mechanisms	
  to	
  
bind	
  mul=ple	
  handlers	
  for	
  a	
  path	
  
Request	
  Flow	
  Handlers	
  
•  Terminal	
  handlers	
  get	
  nested	
  
•  Allow	
  host	
  binding,	
  prefix	
  binding,	
  decision	
  
rou=ng,	
  method	
  rou=ng,	
  content	
  type	
  
nego=a=on	
  
•  Can	
  be	
  defined	
  within	
  the	
  handler	
  chain	
  or	
  
handlers	
  themselves	
  
Prefix	
  Handler	
  
•  Creates	
  a	
  sub-­‐chain	
  bound	
  to	
  a	
  prefixed	
  
request	
  path	
  
•  Allows	
  handlers	
  to	
  be	
  defined	
  within	
  the	
  
context	
  of	
  the	
  prefix	
  
•  Makes	
  it	
  easy	
  to	
  scope	
  a	
  handler	
  chain	
  
The	
  when	
  Handler	
  
•  Creates	
  a	
  sub-­‐chain	
  bound	
  to	
  a	
  prefixed	
  
request	
  path	
  
•  Allows	
  handlers	
  to	
  be	
  defined	
  within	
  the	
  
context	
  of	
  the	
  prefix	
  
•  Makes	
  it	
  easy	
  to	
  scope	
  a	
  handler	
  chain	
  
Method	
  Rou=ng	
  
•  Nested	
  handler	
  type	
  (handlers	
  within	
  a	
  
handler)	
  
•  Uses	
  the	
  byMethod	
  call	
  within	
  a	
  handler	
  
•  Must	
  be	
  bound	
  within	
  an	
  all	
  handler	
  type	
  
Content	
  Type	
  Nego=a=on	
  
•  Nested	
  handler	
  type	
  (handlers	
  within	
  a	
  
handler)	
  
•  Uses	
  the	
  byContent	
  call	
  within	
  a	
  handler	
  
•  Routed-­‐to	
  according	
  to	
  request’s	
  Accept	
  
header	
  
•  Chain	
  for	
  content	
  type	
  handlers	
  
•  Seman=cs	
  for	
  common	
  content	
  types	
  (json,	
  
xml,	
  html,	
  plainText)	
  
Method	
   Descrip.on	
  
json	
   Called	
  when	
  application/json	
  is	
  specified	
  in	
  Accept	
  
header	
  
xml	
   Called	
  when	
  application/xml	
  is	
  specified	
  in	
  Accept	
  header	
  
html	
   Called	
  when	
  text/html	
  is	
  specified	
  in	
  Accept	
  header	
  
plainText	
   Called	
  when	
  text/plain	
  is	
  specified	
  in	
  Accept	
  header	
  
	
  
type(String)	
   Called	
  when	
  the	
  provided	
  string	
  matches	
  the	
  Accept	
  header	
  
	
  
noMatch	
   Called	
  when	
  the	
  Accept	
  header	
  is	
  specified,	
  but	
  no	
  handler	
  is	
  
bound	
  for	
  the	
  given	
  type	
  
	
  
•  Caveat:	
  the	
  first	
  handler	
  in	
  the	
  byContent	
  chain	
  is	
  favored	
  
when	
  no	
  Accept	
  header	
  is	
  present	
  
	
  
Content	
  Type	
  Nego=a=on	
  
Project	
  Structure	
  
•  OOTB	
  Support	
  for	
  Gradle	
  build	
  system	
  
•  App	
  structure	
  follows	
  Java	
  conven=ons	
  
•  Groovy	
  apps	
  can	
  s=ll	
  be	
  built	
  as	
  scripts	
  
•  Apps	
  can	
  be	
  defined	
  from	
  within	
  a	
  main	
  class	
  
Gradle	
  Support	
  
•  Add	
  the	
  io.ratpack:ratpack-­‐gradle:<version>	
  to	
  your	
  
buildscript	
  classpath	
  
•  Apply	
  the	
  io.ratpack.ratpack-­‐{groovy,java}	
  plugin	
  
to	
  your	
  buildscript	
  
•  ./gradlew	
  run	
  to	
  see	
  your	
  app	
  in	
  ac=on!	
  
Framework	
  Dependencies	
  
•  Use	
  the	
  plugin	
  helper	
  method	
  to	
  bring	
  in	
  
framework	
  deps	
  
•  Framework	
  deps	
  are	
  resolved	
  by	
  their	
  
unqualified	
  name	
  
•  As	
  simple	
  as	
  specifying	
  ratpack.dependency(name)	
  in	
  
dependencies	
  block	
  
Main	
  Class	
  Apps	
  
•  Any	
  project	
  can	
  build	
  a	
  main	
  class	
  and	
  use	
  
that	
  as	
  the	
  entry	
  point	
  
•  Use	
  the	
  ratpack.server.RatpackServer	
  factory	
  to	
  
define	
  your	
  applica=on	
  
•  Java	
  8	
  apps	
  must	
  use	
  a	
  main	
  class	
  
Dependency	
  Injec=on	
  
•  DI	
  in	
  Ratpack	
  is	
  abstracted	
  through	
  the	
  
Registry	
  
•  Request	
  handling	
  code	
  is	
  FP	
  style,	
  so	
  should	
  
remain	
  stateless	
  
•  The	
  Context	
  given	
  to	
  each	
  handler	
  allows	
  
resolu=on	
  of	
  components	
  
Dependency	
  Injec=on	
  
•  OOTB	
  support	
  for	
  Guice	
  and	
  Spring	
  Boot	
  
•  Groovy	
  DSL	
  has	
  Guice	
  fixtures	
  pre-­‐baked	
  
•  The	
  bindings	
  block	
  allows	
  you	
  to	
  bind	
  
components	
  in	
  your	
  app	
  
Dependency	
  Injec=on	
  
•  Groovy	
  DSL:	
  Components	
  injected	
  into	
  
handlers	
  through	
  varargs	
  
•  Java	
  API:	
  components	
  are	
  resolved	
  through	
  
Context.get(Class)	
  
•  Note	
  that	
  non-­‐Groovy	
  apps	
  need	
  to	
  include	
  
the	
  ratpack-­‐guice	
  framework	
  dependency	
  
Registries	
  
•  Registries	
  can	
  be	
  built	
  on-­‐the-­‐fly	
  within	
  the	
  
handler	
  chain	
  
•  Latest	
  binding	
  will	
  be	
  resolved	
  first	
  
•  Allows	
  apps	
  to	
  register	
  and	
  resolve	
  
components	
  according	
  to	
  proper=es	
  of	
  a	
  
request	
  
Tes=ng	
  
•  Ratpack	
  provides	
  fixtures	
  for	
  func=onal,	
  
integra=on,	
  and	
  unit	
  tes=ng	
  
•  Can	
  quickly	
  get	
  high	
  test	
  coverage	
  with	
  li_le	
  
effort	
  
•  EmbeddedApp	
  fixture	
  can	
  be	
  integrated	
  to	
  
ameliorate	
  hard-­‐to-­‐test	
  or	
  legacy	
  apps	
  
Non-­‐Blocking	
  Paradigm	
  
•  Ratpack	
  uses	
  NIO	
  to	
  garner	
  high	
  throughput	
  
•  Maintains	
  discrete	
  request-­‐taking	
  and	
  
blocking	
  thread	
  pools	
  
•  Request-­‐taking	
  threads	
  must	
  not	
  block	
  
•  Blocking	
  APIs	
  are	
  able	
  to	
  be	
  made	
  async	
  
through	
  the	
  Context.blocking()	
  mechanism	
  
Building	
  Async	
  APIs	
  
•  Build	
  your	
  APIs	
  around	
  Ratpack	
  Promise	
  types	
  
•  This	
  gives	
  you	
  flexibility	
  in	
  determining	
  in	
  
processing	
  capacity	
  (blocking/computa=on)	
  
•  Promises	
  ensure	
  that	
  the	
  Ratpack	
  knows	
  when	
  
your	
  app	
  is	
  async	
  processing	
  
Reac=ve	
  Programming	
  
Reac3ve	
  programming	
  is	
  a	
  technique	
  by	
  a	
  
processing	
  func3on	
  requests	
  data	
  from	
  a	
  
producing	
  func3on,	
  a	
  single	
  element	
  at	
  a	
  3me.	
  
Mul3ple	
  elements	
  are	
  delivered	
  through	
  a	
  
pipeline,	
  wherein	
  one	
  or	
  many	
  func3ons	
  can	
  
affect	
  the	
  flow	
  and	
  form	
  of	
  data.	
  
Reac=ve	
  Programming	
  
The	
  request	
  for	
  data	
  starts	
  here	
  
Transforming	
  func=on	
  
Call	
  for	
  a	
  data	
  element	
  	
  
Call	
  for	
  a	
  data	
  element	
  	
  
Call	
  for	
  a	
  data	
  element	
  	
  
Filtering	
  func=on	
  
Producing	
  func=on	
  (will	
  send	
  elements	
  
down	
  the	
  pipeline	
  when	
  requested)	
  
Reac=ve	
  Programming	
  
•  Data	
  is	
  not	
  “observed”	
  by	
  down-­‐pipeline	
  
func=ons	
  un=l	
  the	
  above-­‐pipeline	
  func=ons	
  
supply	
  it	
  
•  Push	
  vs.	
  Pull	
  data	
  element	
  retrieval	
  
methodology	
  
•  Best	
  suited	
  for	
  async	
  processing,	
  where	
  data	
  is	
  
gathered	
  on-­‐demand	
  (not	
  in	
  advance)	
  
Reac=ve	
  Programming	
  
•  Promises	
  are	
  reac=ve,	
  in	
  that	
  they	
  send	
  data	
  
only	
  when	
  it	
  is	
  requested	
  
•  Promises	
  will	
  only	
  ever	
  “emit”	
  a	
  single	
  item	
  
into	
  the	
  processing	
  pipeline	
  (whether	
  it	
  be	
  a	
  
list	
  of	
  data	
  elements	
  or	
  a	
  single	
  data	
  element	
  
itself)	
  
Reac=ve	
  Programming	
  
•  Ratpack	
  has	
  extensive	
  support	
  for	
  
interopera=ng	
  with	
  RxJava	
  
•  Provides	
  RxJava	
  with	
  a	
  scheduler	
  for	
  
processing	
  work	
  from	
  Observables	
  
•  Observables	
  can	
  emit	
  one	
  or	
  more	
  data	
  
elements	
  through	
  the	
  pipeline	
  to	
  cons=tute	
  a	
  
“stream”	
  of	
  data	
  
•  Ideal	
  for	
  robust	
  async	
  API	
  layers	
  
Configura=on	
  
•  Support	
  for	
  building	
  typed	
  configura=on	
  
models	
  from	
  a	
  variety	
  of	
  sources	
  
•  Configura=on	
  can	
  come	
  from	
  JSON,	
  YAML,	
  
Java	
  Proper=es	
  
•  Microservice	
  and	
  produc=on	
  configs	
  can	
  pull	
  
configura=on	
  from	
  sys	
  props	
  and	
  environment	
  
variables	
  
Addi=onal	
  Framework	
  Features	
  
•  Non-­‐blocking/Async	
  HTTP	
  client	
  
•  Support	
  for	
  Hystrix	
  for	
  fault	
  tolerance	
  across	
  
microservices	
  
•  Database	
  connec=on	
  pooling	
  (HikariCP)	
  
•  Sessions	
  and	
  Cookies	
  
•  Security	
  (Pac4j)	
  
•  Content	
  serving	
  (built-­‐in	
  and	
  Asset	
  Pipeline)	
  
•  Metrics	
  (CodaHale)	
  
•  Asynchronous	
  health	
  checks	
  
Packaging	
  
•  Builds	
  leverage	
  the	
  Gradle	
  applica=on	
  plugin	
  
•  Na=ve	
  support	
  for	
  crea=ng	
  tar	
  or	
  zip	
  
distribu=on	
  packages	
  for	
  deployment	
  
•  Can	
  be	
  overlayed	
  with	
  the	
  Shadow	
  Jar	
  plugin	
  
to	
  build	
  “fat	
  jars”	
  
•  Perfect	
  for	
  cloud-­‐na=ve	
  microservice	
  
deployments	
  
So	
  Why	
  Should	
  I	
  Care?	
  
•  Ratpack	
  is	
  FAST	
  
•  A	
  single	
  instance	
  of	
  Ratpack	
  can	
  support	
  up	
  to	
  
800,000	
  concurrent	
  requests	
  per	
  second*	
  
–  h_ps://gist.github.com/danveloper/db888be3519966976368	
  
•  Provides	
  applica=on	
  structure	
  to	
  non-­‐blocking	
  
underpinnings	
  
•  App	
  packages	
  are	
  standalone,	
  runnable,	
  and	
  
small	
  
Ques=ons?	
  

Weitere ähnliche Inhalte

Was ist angesagt?

javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonDomingo Suarez Torres
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Controlindiver
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Ryan Cuprak
 
Building a Scalable CI Platform using Docker, Drone and Rancher
Building a Scalable CI  Platform using Docker, Drone and RancherBuilding a Scalable CI  Platform using Docker, Drone and Rancher
Building a Scalable CI Platform using Docker, Drone and RancherShannon Williams
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Martin Bergljung
 
Creando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUGCreando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUGCésar Hernández
 
JavaOne 2015: 12 Factor App
JavaOne 2015: 12 Factor AppJavaOne 2015: 12 Factor App
JavaOne 2015: 12 Factor AppJoe Kutner
 
7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer DayKimihiko Kitase
 
Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020César Hernández
 
Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020César Hernández
 
Hadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoopHadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoopWisely chen
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developersDmitry Guyvoronsky
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache CamelClaus Ibsen
 
Jenkins vs. AWS CodePipeline
Jenkins vs. AWS CodePipelineJenkins vs. AWS CodePipeline
Jenkins vs. AWS CodePipelineSteffen Gebert
 
Continuous Integration for Spark Apps by Sean McIntyre
Continuous Integration for Spark Apps by Sean McIntyreContinuous Integration for Spark Apps by Sean McIntyre
Continuous Integration for Spark Apps by Sean McIntyreSpark Summit
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Provectus
 

Was ist angesagt? (20)

javerosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparison
 
Geb Best Practices
Geb Best PracticesGeb Best Practices
Geb Best Practices
 
Make It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version ControlMake It Cooler: Using Decentralized Version Control
Make It Cooler: Using Decentralized Version Control
 
Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]Faster java ee builds with gradle [con4921]
Faster java ee builds with gradle [con4921]
 
Building a Scalable CI Platform using Docker, Drone and Rancher
Building a Scalable CI  Platform using Docker, Drone and RancherBuilding a Scalable CI  Platform using Docker, Drone and Rancher
Building a Scalable CI Platform using Docker, Drone and Rancher
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 
Creando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUGCreando microservicios con Java y Microprofile - Nicaragua JUG
Creando microservicios con Java y Microprofile - Nicaragua JUG
 
JavaOne 2015: 12 Factor App
JavaOne 2015: 12 Factor AppJavaOne 2015: 12 Factor App
JavaOne 2015: 12 Factor App
 
7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day7 Apache Process Cloudstack Developer Day
7 Apache Process Cloudstack Developer Day
 
Spring GraphQL
Spring GraphQLSpring GraphQL
Spring GraphQL
 
Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020Its easy! contributing to open source - Devnexus 2020
Its easy! contributing to open source - Devnexus 2020
 
Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020Es fácil contribuir al open source - Bolivia JUG 2020
Es fácil contribuir al open source - Bolivia JUG 2020
 
Hadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoopHadoop Summit 2013 : Continuous Integration on top of hadoop
Hadoop Summit 2013 : Continuous Integration on top of hadoop
 
Introduction to Git for developers
Introduction to Git for developersIntroduction to Git for developers
Introduction to Git for developers
 
Microservices with Apache Camel
Microservices with Apache CamelMicroservices with Apache Camel
Microservices with Apache Camel
 
Implementing your own Google App Engine
Implementing your own Google App Engine Implementing your own Google App Engine
Implementing your own Google App Engine
 
Jenkins vs. AWS CodePipeline
Jenkins vs. AWS CodePipelineJenkins vs. AWS CodePipeline
Jenkins vs. AWS CodePipeline
 
Apache Lucene for Java EE Developers
Apache Lucene for Java EE DevelopersApache Lucene for Java EE Developers
Apache Lucene for Java EE Developers
 
Continuous Integration for Spark Apps by Sean McIntyre
Continuous Integration for Spark Apps by Sean McIntyreContinuous Integration for Spark Apps by Sean McIntyre
Continuous Integration for Spark Apps by Sean McIntyre
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"
 

Andere mochten auch

Dropwizard and Friends
Dropwizard and FriendsDropwizard and Friends
Dropwizard and FriendsYun Zhi Lin
 
Sold! Event March 22, 2011
Sold! Event   March 22, 2011Sold! Event   March 22, 2011
Sold! Event March 22, 2011SoldEvents
 
Social Networking: The nuts and bolts of Facebook, Twitter and Google+
Social Networking:  The nuts and bolts of Facebook, Twitter and Google+Social Networking:  The nuts and bolts of Facebook, Twitter and Google+
Social Networking: The nuts and bolts of Facebook, Twitter and Google+Mary Thengvall
 
How to become a UX Designer
How to become a UX DesignerHow to become a UX Designer
How to become a UX DesignerGlen Lipka
 
El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...
El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...
El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...Gusstock Concha Flores
 
Hacking Your Head - Managing Information Overload (45 mix)
Hacking Your Head  - Managing Information Overload (45 mix)Hacking Your Head  - Managing Information Overload (45 mix)
Hacking Your Head - Managing Information Overload (45 mix)Jo Hanna Pearce
 
Quotes by philosophers
Quotes by philosophersQuotes by philosophers
Quotes by philosophersRaja Kishor D
 
Greek philosophers quotes333333
Greek philosophers quotes333333Greek philosophers quotes333333
Greek philosophers quotes333333Gopalakrishna Bk
 
3a secundariacte2016
3a secundariacte20163a secundariacte2016
3a secundariacte2016Pablo Cortez
 
Презентация нового Фонда АРТ Активный
Презентация нового Фонда АРТ АктивныйПрезентация нового Фонда АРТ Активный
Презентация нового Фонда АРТ Активныйkya.artcapital
 
How effective is the combination of your main and acillary ...
How effective is the combination of your main and acillary ...How effective is the combination of your main and acillary ...
How effective is the combination of your main and acillary ...emilynock
 
Commit to the Crazy
Commit to the CrazyCommit to the Crazy
Commit to the CrazyWebVisions
 
How effective is the combination of your main product and ur axcillery texts
How effective is the combination of your main product and ur axcillery textsHow effective is the combination of your main product and ur axcillery texts
How effective is the combination of your main product and ur axcillery textsKishan Ruda
 
Multiple streams-of-income
Multiple streams-of-incomeMultiple streams-of-income
Multiple streams-of-incomemooru
 
Universidad nacional de chimborazo drive trabajo colavorativo
Universidad nacional de chimborazo drive trabajo colavorativoUniversidad nacional de chimborazo drive trabajo colavorativo
Universidad nacional de chimborazo drive trabajo colavorativoUNACH
 
#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle
#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle
#CultureCode ESCOOL Thinkers & Makers for Food and Healthy LifestyleMontse Monllau
 

Andere mochten auch (20)

Dropwizard and Friends
Dropwizard and FriendsDropwizard and Friends
Dropwizard and Friends
 
Sold! Event March 22, 2011
Sold! Event   March 22, 2011Sold! Event   March 22, 2011
Sold! Event March 22, 2011
 
Social Networking: The nuts and bolts of Facebook, Twitter and Google+
Social Networking:  The nuts and bolts of Facebook, Twitter and Google+Social Networking:  The nuts and bolts of Facebook, Twitter and Google+
Social Networking: The nuts and bolts of Facebook, Twitter and Google+
 
How to become a UX Designer
How to become a UX DesignerHow to become a UX Designer
How to become a UX Designer
 
El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...
El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...
El proceso urbano arquitectónico en la sociedad andina y los centros ceremoni...
 
Report
ReportReport
Report
 
Hacking Your Head - Managing Information Overload (45 mix)
Hacking Your Head  - Managing Information Overload (45 mix)Hacking Your Head  - Managing Information Overload (45 mix)
Hacking Your Head - Managing Information Overload (45 mix)
 
Quotes by philosophers
Quotes by philosophersQuotes by philosophers
Quotes by philosophers
 
Activity 3 Image Deck
Activity 3 Image DeckActivity 3 Image Deck
Activity 3 Image Deck
 
Greek philosophers quotes333333
Greek philosophers quotes333333Greek philosophers quotes333333
Greek philosophers quotes333333
 
3a secundariacte2016
3a secundariacte20163a secundariacte2016
3a secundariacte2016
 
Презентация нового Фонда АРТ Активный
Презентация нового Фонда АРТ АктивныйПрезентация нового Фонда АРТ Активный
Презентация нового Фонда АРТ Активный
 
53 ginga brasil
53 ginga brasil53 ginga brasil
53 ginga brasil
 
How effective is the combination of your main and acillary ...
How effective is the combination of your main and acillary ...How effective is the combination of your main and acillary ...
How effective is the combination of your main and acillary ...
 
Commit to the Crazy
Commit to the CrazyCommit to the Crazy
Commit to the Crazy
 
How effective is the combination of your main product and ur axcillery texts
How effective is the combination of your main product and ur axcillery textsHow effective is the combination of your main product and ur axcillery texts
How effective is the combination of your main product and ur axcillery texts
 
Multiple streams-of-income
Multiple streams-of-incomeMultiple streams-of-income
Multiple streams-of-income
 
Universidad nacional de chimborazo drive trabajo colavorativo
Universidad nacional de chimborazo drive trabajo colavorativoUniversidad nacional de chimborazo drive trabajo colavorativo
Universidad nacional de chimborazo drive trabajo colavorativo
 
#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle
#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle
#CultureCode ESCOOL Thinkers & Makers for Food and Healthy Lifestyle
 
Actividad6 algoritmos
Actividad6 algoritmosActividad6 algoritmos
Actividad6 algoritmos
 

Ähnlich wie Ratpack Web Framework

Servlet.ppt
Servlet.pptServlet.ppt
Servlet.pptkstalin2
 
Servlet and JSP
Servlet and JSPServlet and JSP
Servlet and JSPGary Yeh
 
Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...Lohika_Odessa_TechTalks
 
Tech talk microservices debugging
Tech talk microservices debuggingTech talk microservices debugging
Tech talk microservices debuggingAndrey Kolodnitsky
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postvamsitricks
 
Training Slides: 205 - Installing and Configuring Tungsten Dashboard
Training Slides: 205 - Installing and Configuring Tungsten DashboardTraining Slides: 205 - Installing and Configuring Tungsten Dashboard
Training Slides: 205 - Installing and Configuring Tungsten DashboardContinuent
 
Java Servlet Programming under Ubuntu Linux by Tushar B Kute
Java Servlet Programming under Ubuntu Linux by Tushar B KuteJava Servlet Programming under Ubuntu Linux by Tushar B Kute
Java Servlet Programming under Ubuntu Linux by Tushar B KuteTushar B Kute
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postvamsi krishna
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postvamsitricks
 
Distributed & Highly Available server applications in Java and Scala
Distributed & Highly Available server applications in Java and ScalaDistributed & Highly Available server applications in Java and Scala
Distributed & Highly Available server applications in Java and ScalaMax Alexejev
 
AWS Best Practices Version 2
AWS Best Practices Version 2AWS Best Practices Version 2
AWS Best Practices Version 2Kenichi Shibata
 
Rails Request & Middlewares
Rails Request & MiddlewaresRails Request & Middlewares
Rails Request & MiddlewaresSantosh Wadghule
 
Enjoying the Move from WCF to the Web API
Enjoying the Move from WCF to the Web APIEnjoying the Move from WCF to the Web API
Enjoying the Move from WCF to the Web APIKevin Hazzard
 
Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsJava colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsSagara Gunathunga
 
Lecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptxLecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptxSaziaRahman
 
Middleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeMiddleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeCale Hoopes
 

Ähnlich wie Ratpack Web Framework (20)

Servlet.ppt
Servlet.pptServlet.ppt
Servlet.ppt
 
Servlet.ppt
Servlet.pptServlet.ppt
Servlet.ppt
 
Servlet1.ppt
Servlet1.pptServlet1.ppt
Servlet1.ppt
 
JAVA Servlets
JAVA ServletsJAVA Servlets
JAVA Servlets
 
Servlet and JSP
Servlet and JSPServlet and JSP
Servlet and JSP
 
Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...Debugging Microservices - key challenges and techniques - Microservices Odesa...
Debugging Microservices - key challenges and techniques - Microservices Odesa...
 
Tech talk microservices debugging
Tech talk microservices debuggingTech talk microservices debugging
Tech talk microservices debugging
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
 
Training Slides: 205 - Installing and Configuring Tungsten Dashboard
Training Slides: 205 - Installing and Configuring Tungsten DashboardTraining Slides: 205 - Installing and Configuring Tungsten Dashboard
Training Slides: 205 - Installing and Configuring Tungsten Dashboard
 
Java Servlet Programming under Ubuntu Linux by Tushar B Kute
Java Servlet Programming under Ubuntu Linux by Tushar B KuteJava Servlet Programming under Ubuntu Linux by Tushar B Kute
Java Servlet Programming under Ubuntu Linux by Tushar B Kute
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
 
Servletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,postServletarchitecture,lifecycle,get,post
Servletarchitecture,lifecycle,get,post
 
Servlets
ServletsServlets
Servlets
 
Distributed & Highly Available server applications in Java and Scala
Distributed & Highly Available server applications in Java and ScalaDistributed & Highly Available server applications in Java and Scala
Distributed & Highly Available server applications in Java and Scala
 
AWS Best Practices Version 2
AWS Best Practices Version 2AWS Best Practices Version 2
AWS Best Practices Version 2
 
Rails Request & Middlewares
Rails Request & MiddlewaresRails Request & Middlewares
Rails Request & Middlewares
 
Enjoying the Move from WCF to the Web API
Enjoying the Move from WCF to the Web APIEnjoying the Move from WCF to the Web API
Enjoying the Move from WCF to the Web API
 
Java colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rsJava colombo-deep-dive-into-jax-rs
Java colombo-deep-dive-into-jax-rs
 
Lecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptxLecture 2_ Intro to laravel.pptx
Lecture 2_ Intro to laravel.pptx
 
Middleware in Golang: InVision's Rye
Middleware in Golang: InVision's RyeMiddleware in Golang: InVision's Rye
Middleware in Golang: InVision's Rye
 

Mehr von Daniel Woods

Continuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStackContinuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStackDaniel Woods
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootDaniel Woods
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the CloudDaniel Woods
 
Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015Daniel Woods
 
Microservices: The Right Way
Microservices: The Right WayMicroservices: The Right Way
Microservices: The Right WayDaniel Woods
 
Facilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at ScaleFacilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at ScaleDaniel Woods
 
Continuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSSContinuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSSDaniel Woods
 
Server-Side JavaScript with Nashorn
Server-Side JavaScript with NashornServer-Side JavaScript with Nashorn
Server-Side JavaScript with NashornDaniel Woods
 
Groovy for System Administrators
Groovy for System AdministratorsGroovy for System Administrators
Groovy for System AdministratorsDaniel Woods
 
Message Driven Architecture in Grails
Message Driven Architecture in GrailsMessage Driven Architecture in Grails
Message Driven Architecture in GrailsDaniel Woods
 
Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012Daniel Woods
 

Mehr von Daniel Woods (12)

Continuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStackContinuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStack
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring Boot
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the Cloud
 
Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015
 
Microservices: The Right Way
Microservices: The Right WayMicroservices: The Right Way
Microservices: The Right Way
 
Facilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at ScaleFacilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at Scale
 
Continuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSSContinuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSS
 
Server-Side JavaScript with Nashorn
Server-Side JavaScript with NashornServer-Side JavaScript with Nashorn
Server-Side JavaScript with Nashorn
 
Future of Grails
Future of GrailsFuture of Grails
Future of Grails
 
Groovy for System Administrators
Groovy for System AdministratorsGroovy for System Administrators
Groovy for System Administrators
 
Message Driven Architecture in Grails
Message Driven Architecture in GrailsMessage Driven Architecture in Grails
Message Driven Architecture in Grails
 
Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012
 

Kürzlich hochgeladen

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 

Kürzlich hochgeladen (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 

Ratpack Web Framework

  • 1. Ratpack  Web  Framework   Dan  Woods  
  • 2. Senior  Engineer  at     The  Groundwork   @danveloper  on   Twi.er   /danveloper  on   GitHub  
  • 3. Learning  Ratpack           publica=on  Fall  2015   Shameless  Self  Promo=on…  
  • 4. Quick  Overview   •  A  high-­‐throughput,  reac=ve  web  framework   for  the  JVM   •  Built  on  Java  8  (required)  and  comes  with  a   Groovy  DSL   •  Great  support  for  microservices  /  Twelve   Factor  apps   •  Rapid  produc=vity  
  • 5. Quick  Start   •  Groovy  DSL  is  the  path  of  least  resistance   •  App  can  be  built  into  a  standalone,  runnable   Groovy  script   •  Rapid  prototyping  
  • 6. What  is  this  doing?   •  Imports  the  DSL  via   ratpack.groovy.Groovy.ratpack   •  The  closure  supplied  is  the  defini3on   •  Defini=on  consists  of  serverConfig,  bindings,   and  handlers   •  App  defini=on  infers  reasonable  defaults  for   serverConfig  and  bindings  
  • 7. What  is  this  doing?  
  • 8. Handler  Chain   •  A  pipeline  for  request  processing   •  The  “edge”  of  an  applica=on   •  Defines  request  flow  and  terminal  handlers   •  Handlers  can  be  thought  of  in  equivalent   terms  to  servlets  and  servlet  filters  
  • 9. Handler  Chain   Diagram  courtesy  of  Andrey  Adamovich:  h_ps://twi_er.com/codingandrey    
  • 10. Handlers   •  Two  types  of  handlers:  request  flow  and   terminal   •  Request  flow  handlers  provide  flow  control  in   processing   •  Terminal  handlers  process  and  respond  to  a   request  
  • 11. Terminal  Handlers   •  Bound  to  HTTP  verb(s)  and  request  path   •  Chain  API  provides  seman=c  methods  for   binding  to  verb  
  • 12. Method   Descrip.on   Usage   all   Handler  is  executed  for  all  requests   within  its  chain   all  {      render  “Hello  World!”   }   get(path)   Handler  for  HTTP  GET  requests.  Path   op=onal.   get(“foo”)  {      render  “Hello  Foo!”   }     post(path)   Handler  for  HTTP  POST  requests.  Path   op=onal.   post(“foo”)  {      def  json  =  request.body.text      …   }     put(path)   Handler  for  HTTP  PUT  requests.  Path   op=onal.     put(“foo”)  {      def  json  =  request.body.text      …   }     patch(path)   Handler  for  HTTP  PATCH  requests.  Path   op=onal.     patch(“foo”)  {      def  json  =  request.body.text      ...   }     delete(path)   Handler  for  HTTP  DELETE  requests.   Path  op=onal.     delete(“:id”)  {      def  id  =  request.pathTokens.id      ...   }  
  • 13. A  Caveat  to  Handlers   •  Only  a  single  handler  can  be  bound  for  any   given  HTTP  request  path   •  You  must  use  request  flow  mechanisms  to   bind  mul=ple  handlers  for  a  path  
  • 14. Request  Flow  Handlers   •  Terminal  handlers  get  nested   •  Allow  host  binding,  prefix  binding,  decision   rou=ng,  method  rou=ng,  content  type   nego=a=on   •  Can  be  defined  within  the  handler  chain  or   handlers  themselves  
  • 15. Prefix  Handler   •  Creates  a  sub-­‐chain  bound  to  a  prefixed   request  path   •  Allows  handlers  to  be  defined  within  the   context  of  the  prefix   •  Makes  it  easy  to  scope  a  handler  chain  
  • 16. The  when  Handler   •  Creates  a  sub-­‐chain  bound  to  a  prefixed   request  path   •  Allows  handlers  to  be  defined  within  the   context  of  the  prefix   •  Makes  it  easy  to  scope  a  handler  chain  
  • 17. Method  Rou=ng   •  Nested  handler  type  (handlers  within  a   handler)   •  Uses  the  byMethod  call  within  a  handler   •  Must  be  bound  within  an  all  handler  type  
  • 18. Content  Type  Nego=a=on   •  Nested  handler  type  (handlers  within  a   handler)   •  Uses  the  byContent  call  within  a  handler   •  Routed-­‐to  according  to  request’s  Accept   header   •  Chain  for  content  type  handlers   •  Seman=cs  for  common  content  types  (json,   xml,  html,  plainText)  
  • 19. Method   Descrip.on   json   Called  when  application/json  is  specified  in  Accept   header   xml   Called  when  application/xml  is  specified  in  Accept  header   html   Called  when  text/html  is  specified  in  Accept  header   plainText   Called  when  text/plain  is  specified  in  Accept  header     type(String)   Called  when  the  provided  string  matches  the  Accept  header     noMatch   Called  when  the  Accept  header  is  specified,  but  no  handler  is   bound  for  the  given  type     •  Caveat:  the  first  handler  in  the  byContent  chain  is  favored   when  no  Accept  header  is  present     Content  Type  Nego=a=on  
  • 20. Project  Structure   •  OOTB  Support  for  Gradle  build  system   •  App  structure  follows  Java  conven=ons   •  Groovy  apps  can  s=ll  be  built  as  scripts   •  Apps  can  be  defined  from  within  a  main  class  
  • 21. Gradle  Support   •  Add  the  io.ratpack:ratpack-­‐gradle:<version>  to  your   buildscript  classpath   •  Apply  the  io.ratpack.ratpack-­‐{groovy,java}  plugin   to  your  buildscript   •  ./gradlew  run  to  see  your  app  in  ac=on!  
  • 22. Framework  Dependencies   •  Use  the  plugin  helper  method  to  bring  in   framework  deps   •  Framework  deps  are  resolved  by  their   unqualified  name   •  As  simple  as  specifying  ratpack.dependency(name)  in   dependencies  block  
  • 23. Main  Class  Apps   •  Any  project  can  build  a  main  class  and  use   that  as  the  entry  point   •  Use  the  ratpack.server.RatpackServer  factory  to   define  your  applica=on   •  Java  8  apps  must  use  a  main  class  
  • 24. Dependency  Injec=on   •  DI  in  Ratpack  is  abstracted  through  the   Registry   •  Request  handling  code  is  FP  style,  so  should   remain  stateless   •  The  Context  given  to  each  handler  allows   resolu=on  of  components  
  • 25. Dependency  Injec=on   •  OOTB  support  for  Guice  and  Spring  Boot   •  Groovy  DSL  has  Guice  fixtures  pre-­‐baked   •  The  bindings  block  allows  you  to  bind   components  in  your  app  
  • 26. Dependency  Injec=on   •  Groovy  DSL:  Components  injected  into   handlers  through  varargs   •  Java  API:  components  are  resolved  through   Context.get(Class)   •  Note  that  non-­‐Groovy  apps  need  to  include   the  ratpack-­‐guice  framework  dependency  
  • 27. Registries   •  Registries  can  be  built  on-­‐the-­‐fly  within  the   handler  chain   •  Latest  binding  will  be  resolved  first   •  Allows  apps  to  register  and  resolve   components  according  to  proper=es  of  a   request  
  • 28. Tes=ng   •  Ratpack  provides  fixtures  for  func=onal,   integra=on,  and  unit  tes=ng   •  Can  quickly  get  high  test  coverage  with  li_le   effort   •  EmbeddedApp  fixture  can  be  integrated  to   ameliorate  hard-­‐to-­‐test  or  legacy  apps  
  • 29. Non-­‐Blocking  Paradigm   •  Ratpack  uses  NIO  to  garner  high  throughput   •  Maintains  discrete  request-­‐taking  and   blocking  thread  pools   •  Request-­‐taking  threads  must  not  block   •  Blocking  APIs  are  able  to  be  made  async   through  the  Context.blocking()  mechanism  
  • 30. Building  Async  APIs   •  Build  your  APIs  around  Ratpack  Promise  types   •  This  gives  you  flexibility  in  determining  in   processing  capacity  (blocking/computa=on)   •  Promises  ensure  that  the  Ratpack  knows  when   your  app  is  async  processing  
  • 31. Reac=ve  Programming   Reac3ve  programming  is  a  technique  by  a   processing  func3on  requests  data  from  a   producing  func3on,  a  single  element  at  a  3me.   Mul3ple  elements  are  delivered  through  a   pipeline,  wherein  one  or  many  func3ons  can   affect  the  flow  and  form  of  data.  
  • 32. Reac=ve  Programming   The  request  for  data  starts  here   Transforming  func=on   Call  for  a  data  element     Call  for  a  data  element     Call  for  a  data  element     Filtering  func=on   Producing  func=on  (will  send  elements   down  the  pipeline  when  requested)  
  • 33. Reac=ve  Programming   •  Data  is  not  “observed”  by  down-­‐pipeline   func=ons  un=l  the  above-­‐pipeline  func=ons   supply  it   •  Push  vs.  Pull  data  element  retrieval   methodology   •  Best  suited  for  async  processing,  where  data  is   gathered  on-­‐demand  (not  in  advance)  
  • 34. Reac=ve  Programming   •  Promises  are  reac=ve,  in  that  they  send  data   only  when  it  is  requested   •  Promises  will  only  ever  “emit”  a  single  item   into  the  processing  pipeline  (whether  it  be  a   list  of  data  elements  or  a  single  data  element   itself)  
  • 35. Reac=ve  Programming   •  Ratpack  has  extensive  support  for   interopera=ng  with  RxJava   •  Provides  RxJava  with  a  scheduler  for   processing  work  from  Observables   •  Observables  can  emit  one  or  more  data   elements  through  the  pipeline  to  cons=tute  a   “stream”  of  data   •  Ideal  for  robust  async  API  layers  
  • 36. Configura=on   •  Support  for  building  typed  configura=on   models  from  a  variety  of  sources   •  Configura=on  can  come  from  JSON,  YAML,   Java  Proper=es   •  Microservice  and  produc=on  configs  can  pull   configura=on  from  sys  props  and  environment   variables  
  • 37. Addi=onal  Framework  Features   •  Non-­‐blocking/Async  HTTP  client   •  Support  for  Hystrix  for  fault  tolerance  across   microservices   •  Database  connec=on  pooling  (HikariCP)   •  Sessions  and  Cookies   •  Security  (Pac4j)   •  Content  serving  (built-­‐in  and  Asset  Pipeline)   •  Metrics  (CodaHale)   •  Asynchronous  health  checks  
  • 38. Packaging   •  Builds  leverage  the  Gradle  applica=on  plugin   •  Na=ve  support  for  crea=ng  tar  or  zip   distribu=on  packages  for  deployment   •  Can  be  overlayed  with  the  Shadow  Jar  plugin   to  build  “fat  jars”   •  Perfect  for  cloud-­‐na=ve  microservice   deployments  
  • 39. So  Why  Should  I  Care?   •  Ratpack  is  FAST   •  A  single  instance  of  Ratpack  can  support  up  to   800,000  concurrent  requests  per  second*   –  h_ps://gist.github.com/danveloper/db888be3519966976368   •  Provides  applica=on  structure  to  non-­‐blocking   underpinnings   •  App  packages  are  standalone,  runnable,  and   small