Hi, I am trying to build an adapter on top of CacheListener to create (to me useful) Pojo
notifications. Unfortunately, I cannot determine if a pojo is being multi-attached or
detached because PojoInstance's ref count is the same in local pre and post
notification (IMO a bug). The problem is in InternalHelper:
| /**
| * Increment reference count for the pojo. Note that this is not thread safe or
atomic.
| */
| int incrementRefCount(Fqn originalFqn, Fqn referencingFqn) throws CacheException
| {
| PojoInstance pojoInstance = getAopInstance(originalFqn);
| if (pojoInstance == null)
| throw new PojoCacheException("InternalDelegate.incrementRefCount(): null
pojoReference for fqn: " + originalFqn);
|
| int count = pojoInstance.incrementRefCount(referencingFqn);
| // need to update it.
| put(originalFqn, PojoInstance.KEY, pojoInstance);
| return count;
| }
|
It is stated that the method is not thread safe but the instance's incrementRefCount
and decrement methods are in fact synchronized. So, can I just clone the instance,
increment and put or do I need to synchronize the whole thing? Shouldn't it be locked
anyway, where does this happen? Are there any other effects that I should be aware of that
prevent us from doing:
| PojoInstance updatedInstance = (PojoInstance)pojoInstance.clone();
| int count = newInstance.incrementRefCount(referencingFqn);
| // need to update it.
| put(originalFqn, PojoInstance.KEY, updatedInstance);
|
Thanks,
Basil
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4035598#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...