I am working on an application with Spring, hibernate and JBoss Tree cache. This
application is deployed on a WEBLOGIC cluster environment. I am using tree cache to store
only the SELECTED domain objects in tree cache with mode INVALIDATION_ASYNC (i also tried
INVALIDATION_SYNC).
What I understood from the INVALIDATION cache is "Whenever data is changed in a
cache, ohter caches in a cluster receive an invalidation message, which means their data
is now state and should be evicted from cache".
This is what I am doing and I noticed while using Tree cache Invalidation_async cache:
1. I am using an interceptor (Hibernate Interceptor) to check the object to be cached. If
that element is already exist in tree cache then cache object will be returned, otherwise
it will continue with the normal process (step 2).
2. Here, hibernate calls goes to database and return the domain object, which are
programatically put in the tree cache for later use and when a request comes for that
particular object, STEP 1 is being executed.
3. My application can receive updates for the domain objects, when this updates comes,
[B] I update the cache with updated object and save the new value to database.
The above steps works fine in cluster environment for REPLICATION mode and I can see the
object are replicated on each and every nodes.
But when I change cache mode to "INVALIDATION_ASYNC" the problem starts:
Here is my usecase:
1. I send a request goes to node 1 of a weblogic cluster, this is what happens:
Domain object (lets say domain1) are created and put in to cache.
2. I send the same request to node 2 of weblogic cluster, this is what happens:
Domain objects [same as in request 1, domain1] are created and put in cache
on node 2.
3. Then I receive an update on node 1 for Domain Object [domain1]:
Here, I put that updated domain object to cache. Now I assume it will send an
invalidation message to node 2 and domain object (domain1)is eviceted from the cache on
node2.
4. Now I Send the same request to node 2 of weblogic cluster (where domain1 is evicted
from cache due to invalidation message from node 1's cache):
Here, I notice that cache item is not available and request is going to the
database, construct the object and again put in to cache at node 2 ---------------->
Absolutely RIGHT
5. Now Send the same request to node 1 of weblogic cluster (where cache item domain1 is
updated]:
What I am seeing : "Cache item domain1 doesn't exist here and call
is going to the database". ----------> WRONG
This might be possible that node 2 has sent an invalidation message when it has put the
domain1 object in its cache and it invalidates the cache item on node 1 [for domain1] and
again the call for same object from node 1 is going to database.
Am I doing something wrong OR INVALIDATION_ASYNC is not yet supported by Treecache with
hibernate????
Your response will be highly appreciated !!
Thanks,
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3983572#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...