Hi all, I was asked to do a project. Which is basically report kind of stuff. Totally there are 18 screens . And i am following the MVC Architecture,View - JSP;controller-Servlet(jus for dispatching the request);model- i am going for Business Objects and DAO's. And I am using a ConnectionManager Class for Connection pooling.And this is the architecture in my mind. Some the requirements of the project are : 1) All the operations are Read-Only (Select type) (Considering this i have eliminated the EJB's as there are no Transactions involved) 2) At the Database side i am calling Stored procedures which fetches data from tables which contains millions of records. 3) At peaktime this application is used by 1000 users. 4) I have to tune the performance.( My architecture should improve the performance). 5) I am also using VO's.
Now my request is based on the above requirements please suggest me a good architecture and different performance parameters that can be applied to tune the application for performance.
I've never done a project like this so take my advice "with a grain of salt" Since database queries are so very expensive in terms of cpu time and tying up connections, it seems to me that you should expend serious effort to avoid unnecessary queries by making as much use as possible of cached results. You might look at the Whirlycache project. It seems to be actively supported. The following questions occur to me: How much does the underlying database change with time? Can you get notified when it does change? Are the users likely to be doing similar queries? Bill
Your topic is titled "How to control concurrency?" but if you are only doing read operations, you really shouldn't be worried abou concurrency, right? Concurrency becomes a problem when you have the possability for more than one write operation being performed on the same piece of data at the same time. There's more to performance than will fit in this topic. The most basic things: Make sure you have the server and network hardware to support 1000 users. You can optimize software until you are blue in the face and it won't run fast on a slow server. There's a book, Java Platform Performance, available online which covers the best practices of the Java language. It doesn't cover JDBC or networking, but JavaPerformanceTuning does. Be advised, a lot of the advice on that website may be dated, given recent JVM advances.