I am really curious about how professional programmers scale up a web application. I have made significant research effort but failed to get information about stages of scaling, it might be related to the fact that server performance depends on many factors. However, i am pretty sure that some details can be laid down approximately.
For instance,
1.) How many concurrent request can a single Tomcat server handle with decent implementation and decent hardware?
2.) At what point should be a load-balancer server involved?
3.) When does full Java EE stack (JBoss/Glassfish) begin to make sense?
I feel that this is somewhat opinion based but, ultimately, "it depends".
For example, how much load can Tomcat handle? It depends. If you're sending a static HTML page for every request then the answer is "alot". If you're trying to compute the first 100,000 prime numbers every time then probably not so much.
In general, it is best to try to design your application for clustering/distributed use. Don't count on too much in the session - keeping the sessions in sync can be expensive. Do your best to have every method truly stateless. That can be hard sometimes as the consumer (i.e. a web site) may have to pass a bit more information on each call so that any of the clustered machines know the current state of a request. And so on.
I moved a web-app from Tomcat to Glassfish and then Wildfly when I wanted to take advantage of some additional Java EE functionality - specifically JMS, CDI, and JPA. I could have used TomEE and bolted it in but a unified environment with a unified management UI was a nice benefit too. You may never need to do that though. You can add parts that you want (i.e. CDI and JPA) fairly easily to Tomcat.
Note that I didn't move from Tomcat to a full EE server for performance - I wanted to take advantage of a larger part of the EE stack. While Wildfly has some management interfaces that make managing a cluster a bit easier I could have still used Tomcat with no problem.
So, again, "it depends". If you don't have the need for more of the EE stack than Tomcat provides a full EE server may very well be overkill. Putting a set of Tomcat servers behind an Apache HTTPD load balancer (or an Amazon one) on top of a database that also is clustered isn't too bad to implement. If that is sufficient for you then I'd stick with that. Don't jump to Wildfly, etc. for just performance as you will not likely see a huge change either direction.