But there are some clear characteristics for one:
- Loosely coupled
- Doing a small task/single-purpose
- Clear API and preferably language-agnostic API
- Transaction (you want your business code to run in one transaction, e.g. 1. select (does object exists or fetch data), 2. insert, 3. maybe more insert for complex object insert)
- Operation & Management
- And maybe you need Security or Asynchronous behaviour
But how fast are these containers? To really answer this question you should of course performance test them. But a quick test would be to merely compare boot up time on my slow laptop.
Spring Boot. Followed Hello World example https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started-first-application.html.
Started Example in 3.959 seconds
Dropwizard. Followed Hello World example http://www.dropwizard.io/0.9.2/docs/getting-started.html.
JBoss EAP 6.4. Created a simple Hello World example with JAX-RS.
JBoss EAP 6.4.0.GA (AS 7.5.0.Final-redhat-21) started in 3987ms
So dropwizard started really fast, but not amazingly fast compared with JBoss, so the question arise how much better are these alternative container compared with classical Java EE container? And also be aware you are locking your code into a specific framework stack.