JBoss AS or Tomcat for Seam Application? And why?
We're about to deploy a Java web application built using JBoss Seam as the application framework. We'll be deploying in a clustered setup, as this is an e-commerce application and we're concerned about both high-availability and performance. We've done all of our development and initial testing with the app deployed to JBoss 5.1, however we've recently become concerned about things like memory footprint and performance, and have debated moving to Tomcat.
Our application is an e-commerce application, using the typical multi-tiered app, using JSF for the view, EJB3 for the business layer, and JPA/Hibernate for persistence to a PostgreSQL database. We also heavily utilize JBoss Cache 2.x for caching support, and Hibernate Search (Lucene) for search support.
I'd love to hear the opinion of the community on which app server is best for Seam-based applications. I realize that we'll have to make some changes to our application architecture (no EJBs, timer service->Quartz scheduler, JBoss Cache->ehCache, etc.) to support the migration. We're comfortable with making those changes, provided they are comparable to what we would get with JBoss.
With JBoss, it seems as though the clustered setup is much easier. Would we be able to do a clustered setup with Quartz? ehCache? As I mentioned, we're currently deploying to JBoss 5.1. Would JBoss 7 give us better performance and a smaller memory footprint? If we opt for Tomcat, we're leaning towards Tomcat 7. Is there any compelling reason to opt for Tomcat 6.x instead?
I'd love to hear your opinions and experience with this type of setup. We've read the documentation. We've done some proof-of-concept testing with all of the various platforms. But, it's hard to know what we should run with in production, and don't want to make the wrong choice and then need to re-architect and test everything again because we've made the wrong choice. Thanks for any opinions and advice you can provide!
I don't think anyone can give a definite answer to your question with such a broad definition of your system.
I'm currently using Seam/JBoss 5 in a similar setup (oracle instead of postgres) mainly due to one reason: support. Having RedHat professional services support in the tightly integrated world of JBoss and Seam is in itself something you should not disregard. Especially in a production environment. Even if you don't have it now, it allows you the comfort to know that you can do so in the future (if needed).
That said, opting for one or the other setup will probably require that you performance test your application first in order to discover where exactly you've got a problem (assuming you do). After all, is session size to the server's implementation or you storing too much information on the session? Are you using session replication or not? Do you do AJAX?
Most of the times, performance improvement comes from the implementation -> performance testing -> implementation cycle rather than from changing implementation technologies. Hey, even Facebook uses MySQL for something everyone would immediately consider it unsuitable for (public profiles - 600+ million of them).
The answer is - 'It depends'.
You can consider the following aspects for making an informed decision:
- Whether you want to code using only standard API (Java EE) or depend on implementation-specific features
- Ease of configuration and maintenance of your infrastructure
From my personal experience - we deploy complex apps on JBoss and simple one on Tomcat/Jetty.
Quartz supports clustering as well as Ehcache do.
For most of JBoss's servlet container service is managed by an internal tomcat container, this is until JBoss 6.
JBoss is a application server while tomcat is a servlet container. I hardly think you should make drastic change to your existing codes to adapt to Tomcat for this reason.