|
YOUR FEEDBACK
Did you read today's front page stories & breaking news?
SYS-CON.TV |
TOP THREE LINKS YOU MUST CLICK ON Weblogic Clustering Implementing a Cluster-Aware Cache Using WebLogic
A lazily reconstructable cache system that notifies cluster members of deletes
By: Bahar Limaye
Jun. 21, 2005 12:00 PM
Caching information on the WebLogic tier can significantly increase performance and reduce the number of external system calls needed for data retrieval. This is especially true when an application wants to store bits of information that rarely change, such as a list of countries or catalog entries. Nowadays, memory is so cheap that application architectures can benefit from caching data on the Web/EJB tiers.
For example, suppose you're building an e-commerce storefront application that sells clothing. The product information such as the item name, description, SKU, price, and image can be stored in memory on the application tier. The benefit of storing the data in memory is faster page loading and a reduction in database calls. Now, what happens when your business user wants to change the price or description of the catalog item? How would you notify all of the members of the cluster of this "delta" change? Remember, you probably still want the data to be stored in memory if possible for performance reasons. Also, you probably want the information to be updated in close real-time and don't want to reload all of the data if it hasn't changed. This article illustrates a simple technique for implementing a "lazily reconstructable" cache system that notifies cluster members of invalidations (deletes). For example, look at the following code: A simple java.util.Hashtable stores the list of products indexed by the product identifier in a static cache. Products are retrieved from the database and added to the cache lazily if they don't already exist. This code snippet demonstrates how to retrieve a product by looking into cache and grabbing it if it doesn't exist. What happens if a product description changes for a specific product? Look at this code: The code behind the ProductDAO.changeDescription method updates the product ID in the database with the new description. The ClusterNotifier.notify method (see Listing 2) will delete the product from the local cache and send an invalidation event to the cluster members to delete the product from its local cache. Once this is done, all of the members in the cluster will have the product removed from memory. If a user requests this product on any node, it becomes lazily initialized with the new description that was set. See the snippet below from getProduct() example: This will reinitialize the product from the database and insert the information back into cache. How does this work? Well, let's take a look.
Deep Dive into the Classes
Command Interface (Generic) The Command interface is used to do the work that needs to be done in the cluster. Notice that it is Serializable. It contains the logic to do a task when it reaches each cluster member. This interface is generic enough to do any operation. This article discusses how this interface can be used to invalidate keys in a cache across the cluster.
InvalidateCacheCommand Concrete Implementation (Specific) BEA WEBLOGIC LATEST STORIES
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
|
SYS-CON FEATURED WHITEPAPERS MOST READ THIS WEEK BREAKING NEWS FROM THE WIRES
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||