Hi, Everyone. This is about the implementation of conditional Get in Roller 4.0.1.
As far as I see, Roller 4.0.1 supports conditional Get. Upon request, Roller checks the ‘If-Modified-Since’ field in the http header, and compares it with ‘Last-Modified’ attribute on server side. And then either responds with a fresh page with status code 200, or responds with a status code 304. What I feel concerned is the part retrieving ‘Last-Modified’. It is implemented in org.apache.roller.weblogger.ui.rendering.servlets.PageServlet. Attached you can see the sequence diagram, which depicts the related class. Every time a weblog entry is added or changed, the ‘last-modified’ field of corresponding website table will be updated. For any http request, PageServlet has to go through a JPA named query to get the ‘last-modified’ value. That value is not cached in memory, and it is not kind of way that the entities float across context (any how...). So as far as I can see, it is hard query. But for one page query, there are usually at least ten http query, including query for text/html file, css file, js file, images, and so on. So for 10000 simultaneous page requests, there will be at least 100000 simultaneous database queries. Furthermore, for any serious production environment, database and application server are on different tiers and the connection is encrypted with SSL. So the picture to me it that, for limited concurrent users it is fine, but when request volume goes up, the server may suddenly chocked up. I would appreciate if some one could respond and explain this, or provide some good advices Thank you very much. David