So lately, a lot of people in my circle is talking about why java application server is dead. The reason why is explained in the slides here.
Basically what I get is that because nowdays people only deploy one artifact in one application server, it beats the point of the application server. It's more like that the application server is already part of the application. So, it would be better to treat the application server as part of the application and ship them together as a package.
I would have to agree that it's true. In most cases, people don't need an application server, so why make life harder by using an application server (because you need to maintain more code)? And in the case we need it, only one artifact will be deployed in one application server and it's version binded, so we should just ship them together.
Then I remembered about docker, it's the virtualization that use the OS namespace which is trending right now. It's cool and good. But, as with application server, if we're going to just ship one application in one docker image, and just deploy one docker image in one VM. Then we might as well as don't use docker! Hey, we can just use the VM directly, why docker on top? Create a VM image, and deploy it. Then it's done.
I have nothing against docker. I'm just pointing out, if we use docker the same way as we use java application server in production, then we run into the same problem. For me it would make sense, if we deploy three docket images in a VM and group them together, or maybe run docker directly on top of the hypervisor (which might be possible in the future), totally bypassing the VM.
And back the Java application server, imho although I agree with the point in the presentation, I still don't think it's dead, there will be still be many use cases where we will need the enterprise magic of Java EE. Still many use cases also don't need that, so we can just use bind tomcat and hibernate as example. Although we won't have all the goodies of an application server, we also won't have all the baddies of it either. On a plus side, we have the goodies of a far JAR.
Fat JAR is a cool thing. Just imagine your artifact can be like jenkins, if you want to run it, you just need to do java -jar jenkins.war