* REST architectural style over HTTP protocol using JSON data format.
* RESTful Web services frameworks eg Jersey (the JAX-RS reference implementation) for REST. It allows us to write clean, testable classes which gracefully map HTTP requests to simple Java objects. It supports streaming output, matrix URI parameters, conditional GET requests and more. Furthermore, the Apache HttpClient and Jersey client libraries allow for both low- and high-level interaction with other web services.
*Web containers eg Jetty embedded HTTP server allowing to run our services as a simple process eliminating a number of unsavory aspects of Java in production (no PermGen issues, no application server configuration and maintenance, no arcane deployment tools, noClassLoader troubles, no hidden application logs, no trying to tune a single garbage collector to work with multiple application workloads) and allows you to use all of the existing Unix process management tools instead.
*Dependency injection frameworks eg Guice.
*Testing frameworks eg JUnit is a simple framework to write repeatable tests.
Database migrations frameworks eg Liquibase is a great way to keep your database schema in check throughout your development and release cycles, applying high-level database refactorings instead of one-off DDL scripts.
Java project lifecycle management tools eg Maven. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information.
*Distributed revision control eg Git: a distributed source code management (SCM) system with an emphasis on speed.
Nice-to-have (but we know its not a perfect world...):
*Shiro is a powerful and easy-to-use Java security framework that performs authentication and authorization.
*The Thrift type system is intended to allow programmers to use native types as much as possible, no matter what programming language they are working in. The Thrift IDL provides descriptions of the types which are used to generate code for each target language. The Thrift Protocol abstraction defines a mechanism to map in-memory data structures to a wire-format. In other words, a protocol specifies how datatypes use the underlying Transport to encode/decode themselves. Thus the protocol implementation governs the encoding scheme and is responsible for (de)serialization. We use the Thrift JSON and Simple JSON forms of the protocol.
*Netflix OSS components as:
*Archaius is a library for configuration management API.
*Eureka is a AWS Service registry for resilient mid-tier load balancing and failover.
*EvCache is a distributed in-memory data store for the cloud.
*Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.
*Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.
*Dropwizard is a Java framework for developing ops-friendly, high-performance, RESTful web services.
*Logback and slf4j for performant logging.