I listend to the discussion/argument about deploying apps with everything baked in vs into a container - I have noticed a trend towards self containment.
Recently we (cloudbees) only did container stuff for "cloud" hosting apps - but now host pretty much anything, and the self contained stuff is exploding. (thanks to play2 for a large part).
Jetty seems to be popular as a way to bake things in - you know how it will work etc, and really, it isn't much bigger - app containers/servers tend to have lots in the case you use it, but often you don't.
I have put up a few "quick start" stacks that people can use - occasionally juggling the order of them (http://developer.cloudbees.com
) - but still the non container ones grow over the container ones (at least for new apps).
Pros of self contained apps:
* often smaller total footprint
* can use non servlet tech (eg async, long running, non thread based)
* integration testing is a better reflection of the reality
* control freaks !
* can't easily augment them at runtime with instramentation, monitoring (java agent can help here)
* wrapping things around like authorization and more is a tad harder at the process level
* errors/behaviour not always as obvious to track down.
My preference is for self contained apps always - because it is just another process. I like to think about design at the unix level - everything is just packages after all.