One thing to keep in mind here is that OSQueryCacheFactory is not tested with persistent cache... It works perfect with in-memory cache, but I always thought that persisting the data that is sort of already persisted in the DB doesn't buy us much, so that scenario never got any attention. E.g. I wouldn't be surprised if de-serialization of the cache causes even more issues.

Andrus


On May 20, 2010, at 10:03 AM, Andrey Razumovsky wrote:

Looks like a bug. Could you please open a ticket?

2010/5/20 Gary Jarrel <[email protected]>

Hi,
I managed to get the cache issue described below resolved, my error
with the DataContextFilter that I was using and it was overwriting the
modeler configuration when initializing shared config.

I've ran into another issue with the following code:

SelectQuery q = proto.queryWithParameters(params);
q.addPrefetch(RichProduct.MANUFACTURER_PROPERTY);
q.addPrefetch(RichProduct.RAW_PRODUCT_PROPERTY);
q.setCacheStrategy(QueryCacheStrategy.SHARED_CACHE);
q.setCacheGroups("products");

Upon execution of this query I get the following exception:

ERROR com.opensymphony.oscache.base.algorithm.AbstractConcurrentReadCache
[oscache] Exception persisting RichProduct/subCategory =
<ObjectId:SubCategory, category_id=1,
id=1>/categoryName/subCategoryName/cost
com.opensymphony.oscache.base.persistence.CachePersistenceException:
Unable to write
'/tmp/cache/application/0/0/5/005126BC80FABAA4C582919EDF0B9304.cache'
in the cache. Exception: java.io.NotSerializableException, Message:
org.apache.cayenne.access.ListWithPrefetches
      at
com .opensymphony .oscache .plugins .diskpersistence .AbstractDiskPersistenceListener .store(AbstractDiskPersistenceListener.java:376)
      at
com .opensymphony .oscache .plugins .diskpersistence .AbstractDiskPersistenceListener .store(AbstractDiskPersistenceListener.java:238)

<rest of stack trace removed>

If I however remove the prefetches then the caching works fine.

Looking at the source code for ListWithPrefetches it does not
implement Serializable, could this be the reason for it, or am I
missing something!

Thank you

Gary

On Wed, May 19, 2010 at 6:17 PM, Gary Jarrel <[email protected]> wrote:

Hi Guys,
I seem to full of questions today!
In the modeler I've got org.apache.cayenne.cache.OSQueryCacheFactory for
Query Cache Factory, 5000 objects and using shared cache.
I can see OSCache initializing in the logs and everything appears to be
fine.
However when I try to get the cache from the ObjectContext like so:
QueryCache cache = ((BaseContext) getObjectContext()).getQueryCache();
The cache that is being returned is
the org.apache.cayenne.cache.MapQueryCache
I've traced the calls and can see that the call got getQueryCache() goes
to MapQueryCacheFactory despite the fact that the modeler
specifies OSQueryCacheFactory
Am I doing something wrong here?
Thank you
Gary




--
Andrey

Reply via email to