Re: Exception when caching a SelectQuery with prefetching [WAS: Caching]

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Thu May 20 2010 - 08:14:50 UTC

  • Next message: Evgeny Ryabitskiy: "Re: Exception while using #bind() in Raw SQL Query under SQL Server 2008"

    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 <garyjarre..mail.com>
    >
    >> 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 <garyjarre..mail.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
    >>
    >
    >
    >
    > --
    > Andrey



    This archive was generated by hypermail 2.0.0 : Thu May 20 2010 - 08:15:21 UTC