openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ArjunReddy <interviewp...@yahoo.com>
Subject Re: 0penJPA QueryCaching
Date Mon, 20 Apr 2009 16:34:10 GMT

Hi Ravi,

Thanks a lot for replying. I tried doing what you have suggested.

This is what I have done.

final String queryString = "select P from Parents P";
javax.persistence.Query query = getEntityManager().createQuery(queryString);

QueryResultCacheImpl qcache = (QueryResultCacheImpl)
(OpenJPAPersistence.cast(EntityManager.getEntityManagerFactory())).getQueryResultCache();
// I have casted to QueryResultCacheImpl because
QueryResultCache.getDelegate() is deprecated and the API suggets using
QueryResultCacheImpl.

qcache.pin(query); //Pinning the query results to the cache

ConcurrentQueryCache cqc = (ConcurrentQueryCache)qcache.getDelegate();
CacheMap cmap = cqc.getCacheMap();

Iterator it = cmap.keySet().iterator();   //cmap.getPinnedKeys() is also
returning the same result.

while(it.hasNext())
{
System.out.println(it.next());
}
		

And this is the result I got:

org.apache.openjpa.datacache.QueryKey@28b16efe[query:[select P from Parents
P],access
path:[com.xyz.Parents],subs:true,ignoreChanges:false,startRange:0,endRange:9223372036854775807,timeout:-1]


It's returning back the query instead of the query results.:-( I just want
to be able to put my query results (Instances of the Parents Class which are
rows of the Parents table in the database) into the cache and retrieve it
back and see if I am getting them right. Any suggestions as what I should be
doing? Do I have to do something with the DataCache? I have these defined in
my persistence.xml file.

<property name="openjpa.DataCache" value="true"/>
<property name="openjpa.RemoteCommitProvider" value="sjvm"/>
<property name="openjpa.QueryCache" value="true"/>

Also in my Parents table, I have DataCache defined as follows.

@Entity
@DataCache
@Table(name = "PARENTS", schema = "SYSTEM")
public class Parents implements java.io.Serializable {

...
...

}


Thanks.



rpalache wrote:
> 
> Hi Arjun,
> 
>>>  I am trying to cache the query results generated and later on use the
>>> results from the cache instead of touching the database.
> 
> I think if you enable the querycache properly then openJPA has to do it
> for you.
> 
> Check this link which explains the same:
> http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_cache_query
> 
> To enable query cache add the following in the persistence.xml:
> 
> <property name="openjpa.DataCache" value="true"/>
> <property name="openjpa.RemoteCommitProvider" value="sjvm"/>
> <property name="openjpa.QueryCache" value="true"/>
> 
> I hope that answers your question.
> 
> If not, and you are still looking to get a key then may be the following
> will help:
> 
> CacheMap cmap =
> ((ConcurrentQueryCache)(OpenJPAPersistence.cast(EntityManager.getEntityManagerFactory()).getQueryResultCache().getDelegate())).getCacheMap();
> 
> The above will give you a map and MAY be cmap.keySet() or
> cmap.getPinnedKeys() should give you set of keys.
> 
> Regards,
> Ravi.
> 
> 
> 
> 
> 
> ArjunReddy wrote:
>> 
>> Hi All,
>> 
>> I am trying to cache the query results generated and later on use the
>> results from the cache instead of touching the database.
>> 
>> This is what I am doing to put/get the values from the cache.
>> 
>> 
>> **********
>> final String queryString = "select P from Parents P";
>> Query query = getEntityManager().createQuery(queryString);
>> 
>> OpenJPAEntityManagerFactory oemf =
>> OpenJPAPersistence.cast(EntityManagerHelper.getEmf());
>> QueryResultCacheImpl queryResultCache =
>> (QueryResultCacheImpl)oemf.getQueryResultCache();	
>> QueryCache qCache = queryResultCache.getDelegate();
>> 
>> qCache.put(key, (QueryResult)query.getResultList());  // Put into the
>> cache
>> QueryResult cachedItems = qCache.get(key);      // Get from the cache
>> 
>> **********
>> 
>> 
>> The thing I don't understand is how do I get the QueryKey (Referred to as
>> key here in my code) ?
>> 
>> I tried doing this
>> QueryKey key = QueryKey.newInstance(q); but the q here in this line of
>> code is supposed to be of type org.apache.openjpa.kernel.Query?
>> 
>> 
>> 
>> Can anybody help me with this please?
>> 
>> Thanks.
>> 
>> 
> 
> 

-- 
View this message in context: http://n2.nabble.com/0penJPA-QueryCaching-tp2653013p2664742.html
Sent from the OpenJPA Developers mailing list archive at Nabble.com.


Mime
View raw message