• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Jeanne Boyarsky
  • Ron McLeod
  • Paul Clapham
  • Liutauras Vilda
Sheriffs:
  • paul wheaton
  • Rob Spoor
  • Devaka Cooray
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Carey Brown
  • Frits Walraven
  • Tim Moores
Bartenders:
  • Mikalai Zaikin

Caching objects in a session

 
Ranch Hand
Posts: 137
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi,
I've been doing a bit of reading about JSP and have a question about keeping objects in memory. Here goes...
I have an object which is created from a whole load of data in a database. The object is essentially content for the website, but because of the nature of the content, I need to load all of the content in order to get the necessary bits out that the user has specifically requested. There is a reason for this, so bear with me.
Anyway, the content does not change very often, but the requests for the object are obviously numerous (every page request in fact).
So here's my question: is there any way to cache the object so that it only goes back to the database when the content has been updated? Basically, I want to hold the object in memory so that it doesn't need to be re-created between page requests - only if the content has been changed. Ideally, also, I don't want the object to be related to a user session, but global read-only (if that makes sense).
The software is not built in J2EE and I can't move to J2EE to solve this problem.
Any help is much appreciated. I realise it's not a very specific question.
Thanks in advance,
Steve
 
Sheriff
Posts: 7001
6
Eclipse IDE Python C++ Debian Java Linux
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Servlet containers provide an "application" context for just this kind of purpose.
in your servlet you can use
getServletContext().setAttribute("name", theCachedObject);
to put the cached data into the "application context", and
getServletContext().getAttribute("name");
to fetch it back whenyou need it later.
There is one instance of this application context for each application loaded in the container.
If you are using JSP, you have an "application" variable already available to provide access to this context:
<%= application.getAttribute("name") %>
Is this the kind of thing you were looking for?
 
Ranch Hand
Posts: 662
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
You may have some wrapper facade object on top of data access object(DAO, the object that holds the DB connection and performs the DB SQL updates). The wrapper object may contain the "bits and pieces, which may be looked upon as facets of the DB info" as value objects (singletons, which have get/set methods for the info they hold). You can commit the updated value objects via the DAO to the database for every update, or as a batch, or at the time the application is being brought down, as per your requirement.
a little addition on similar lines to Frank. In J2EE, you may need to implement contextListener objects that listen to the context events like context being initialized and destroyed. That is where you load the DB connections and all that stuff. But i'm pretty certain that this doesn't address your concern as you will not be able to J2EE
Hope that helps.
 
Ranch Hand
Posts: 185
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
In any case that the database is updated, you must re-cache that data object.
 
Jayadev Pulaparty
Ranch Hand
Posts: 662
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
It depends on who all is updating the database. If it is only you, you can just keep the cache updated and commit at the end of it all. If the DB is distributed, then you need to re-cache as somebody else might be updating it, as you were.
 
Steve Wood
Ranch Hand
Posts: 137
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi guys,
Thanks a lot for the information - it's very helpful.
Basically, the database is updated by the users and can be done relatively frequently (ie. some users won't updated the material for months, though some may update within minutes - admittedly only in short spurts followed by long periods with no change). If it is updated, the whole dataset for the object is replaced with the new information.
To give a bit of background, the content comes through a web service and is published from a desktop application. The user will likely publish their content, check it on the site, correct any last changes, publish again, check and then leave it for some time (likely weeks or months).
I've not really played with the application scope and I'm not sure how you first instantiate the object. Also, I'm not sure how you'd notify the object that the dataset has changed.
Thanks again for your help. You've given me a lot to think about.
Cheers,
Steve
 
With a little knowledge, a cast iron skillet is non-stick and lasts a lifetime.
reply
    Bookmark Topic Watch Topic
  • New Topic