cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Jarrel <garyjar...@gmail.com>
Subject Exception when caching a SelectQuery with prefetching [WAS: Caching]
Date Thu, 20 May 2010 04:22:21 GMT
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 <garyjarrel@gmail.com> 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

Mime
View raw message