= httpwizard

HttpWizard is a
link:http://dropwizard.io[Dropwizard]
application built with
link:http://groovy-lang.org[Groovy]
which represents my current thinking for what an "ideal web application stack"
looks like at this point in time (late-2016).



== Tools


* link:http://dropwizard.io[Dropwizard] - Itself using "the best" libraries for
  implementing RESTful APIs on the JVM, e.g. Jersey and Jackson
* link:http://groovy-lang.org[Groovy] - Concise and easy to write, support for
  many dynamic language behaviors (closures, collection enumerations, dynamic
  dispatch, etc).
* link:http://gradle.org[Gradle] - Fast and easy to use build and dependency
  declaration tool. Easily extended in Groovy, with a myriad of
  link:http://plugins.gradle.org[plugins] to support various additional
  use cases (e.g. building containers, invoking link:http://bower.io[Bower],
  etc)
* link:http://openjdk.java.net[OpenJDK] <<jvm, see below>>


=== In-progress


* link:http://hibernate.org/[Hibernate] - Mature, sometimes arcane, Java
  persistence (DB) layer
* link:https://facebook.github.io/react/[React] - Solid JavaScript library for
  building user interfaces
* link:http://docker.io[Docker] - A deployment packaging mechanism which can
  deliver the app easily to a container service such as
  link:http://kubernetes.io[Kubernetes].

[[jvm]]
=== Java Virtual Machine

Based on my _current thinking_, I believe the JVM serves as an ideal base for a
modern web application. This is assuming Java Runtime Environment (JRE) 8 or
higher. I believe the reasons for the JVM are fairly self-evident but in short:

* High-performance threading and parallelism implementation
* Supports numerous languages, with "Java" being the primitive language to
  implement extensions which require additional speed
* Library support for *practically* any protocol, format, etc
* Easily tuned and monitored using off-the-shelf tools

