What's Missing?
The things you don't get in a single C++ shrink-wrapped box include:
- Session handling.
- Database access.
- Security (authentification, exploit safeness).
- Easy distributed Computing support (such as with EJB).
However, thin and usable class libraries are available for most of these tasks. That said, it will cost you some coding to integrate, debug, and the like, and you'll not find all desired modules as readily packed as in a JEE application server. You won't, however, find a simple solution for clustering (with session replication). But in most cases you don't need it. An application layer load balancer will spread the jobs over a number of machines.
The Reality (Daily Life)
Based on my experience with the project mentioned at the beginning of this article, daily work on a JEE project differs from that in C++ projects. For C++ projects, the problems (in most cases) involved your own code. The problems to solve in JEE projects are more in the realm of configuration and maintenance of third-party modules. In retrospect we would have been better off to hire an experienced JEE administrator (although they can be hard to find).
Every component we used introduced its own (sometimes serious) problems: Eclipse with its numerous plug-ins did not work as expected, Struts required up to four files being changed if we modified a form page, and I am pretty sure that Hibernate introduced more problems than it solved.
Of course, there are poorly written C++ modules too.
Thesis: JEE is better suited for writing server applications.
Many mistakes can be avoided by the language, and much work is already done for you. Average programmers will make average mistakes. Thereby for an average and not highly demanding application, things like a garbage collector or prevention from pointers are an advantage.
Antithesis: C++ is better suited for writing server applications.
It gives you more control, more flexibility, and much more performance. Good developers will with ease take care of the problems of memory management, and they will be happy to manage pointers sometimes. C++ is not sophisticated, not simple, and there are deep pitfalls.
Synthesis
If you plan on large server applications that you expect will be used for a long time, you might be better of writing it in C++ if you have good C++ developers. For instance, consider Apache, written (of course) in C. In other cases, you might rather use JEE, but get a experienced administrator.
Conclusion
I still wonder why there are so few approaches for Web frameworks/toolkits or application servers written in C++. C++ is made for such a task. If you are in the situation of planning such a system, consider starting such a framework yourself. It might cost (much) more in the short term, at least until you have a working application. But in mid and long term, you (and maybe others too) will have many advantages. I think it will pay of.