Hi, I am for the first time facing the developpement of large-scale application that will have the following requirements:
- 24/7 service with no interruption at any time (even during updates)
- a constantly increasing number of users and therefore increasing load on the application server
- development of a web service (used by a mobile application)
- many automated tasks
- fast-growing application with future development of many new modules and other client applications interacting with the core components of the systen
I have been investigating and reading tons of tutorials and articles I could find on the web, but technology is evolving fast and the choice of framework for every tier of my application is vast, so here is what I could put together, I would like to know if I am heading in the right direction or in wall.
Business tier:
=======================
I chose EJB3.1 running on a
J2EE server for the following reasons:
- EJB3 is a standard
- easy to scale/cluster (load balancing) the system to handle higher load
- easy to turn an EJB interface into a web service
- use of EJB Timers for automated tasks
a few things are still unclear to me however, if you could help me to understand:
- I could also balance the load separating the web application from the business logic on 2 different servers, but in this case I would need to use remote interfaces for my EJBs? which from what I understand is a loss of performance compared to using local interfaces if the web app resides on the same machine/JVM. Using local interfaces and keep the web and business tier on the same JVM seems to me the most efficient solution, what do you think? and I would use remote interfaces only for any future distributed client application.
Data tier
=======================
I chose JPA 2.0 with Hibernate because I already have knowledge and many in-house tools developed.
Presentation tier
=======================
I am still undecided for the web tier, there are so many different frameworks.
Which web framework is mostly used for the web tier? I read that
Struts is not a good option anymore, and there are many others like Spring, Tapestry, Wicket,
JSF... I have knowledge in Spring3, can it be used only for the web tier to take advantages of Spring Security, Spring Social and many other Spring features. I think I should be easily able to call EJBs from my Spring controllers? Is it good practice to do that?
So my current orientation for now is a Spring + EJB3 + Hibernate system running on a J2EE server (Glassfish or
JBoss). The application's availabilty, scalability and performance is critical in this project as the load will quickly increase.
I am not very experienced with such big scale projects, but I am really eager to learn and I hope I could use your experience to guide me in the right direction.
Thanks a lot for your precious help!