Return-Path: Delivered-To: apmail-openjpa-dev-archive@www.apache.org Received: (qmail 97598 invoked from network); 23 Apr 2009 19:36:18 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 23 Apr 2009 19:36:18 -0000 Received: (qmail 79647 invoked by uid 500); 23 Apr 2009 19:36:18 -0000 Delivered-To: apmail-openjpa-dev-archive@openjpa.apache.org Received: (qmail 79593 invoked by uid 500); 23 Apr 2009 19:36:18 -0000 Mailing-List: contact dev-help@openjpa.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@openjpa.apache.org Delivered-To: mailing list dev@openjpa.apache.org Received: (qmail 79583 invoked by uid 99); 23 Apr 2009 19:36:18 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Apr 2009 19:36:18 +0000 X-ASF-Spam-Status: No, hits=1.4 required=10.0 tests=FORGED_YAHOO_RCVD,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of lists+1214986235816-210739@n2.nabble.com designates 216.139.236.158 as permitted sender) Received: from [216.139.236.158] (HELO kuber.nabble.com) (216.139.236.158) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 23 Apr 2009 19:36:10 +0000 Received: from tervel.nabble.com ([192.168.236.150]) by kuber.nabble.com with esmtp (Exim 4.63) (envelope-from ) id 1Lx4i5-0005fz-C3 for dev@openjpa.apache.org; Thu, 23 Apr 2009 12:35:49 -0700 Message-ID: <1240515349367-2685502.post@n2.nabble.com> Date: Thu, 23 Apr 2009 12:35:49 -0700 (PDT) From: ArjunReddy To: dev@openjpa.apache.org Subject: Re: 0penJPA QueryCaching In-Reply-To: <1240331746706-2671124.post@n2.nabble.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Nabble-From: interviewprep@yahoo.com References: <1240003332506-2653013.post@n2.nabble.com> <1240197427813-2661607.post@n2.nabble.com> <1240245250957-2664742.post@n2.nabble.com> <1240288080036-2668021.post@n2.nabble.com> <1240331746706-2671124.post@n2.nabble.com> X-Virus-Checked: Checked by ClamAV on apache.org Hi Ravi and all, This is what my code looks like as of now, the retrieving data from the database part: final String queryString = "SELECT S FROM StaticContent S JOIN S.aadses Aads"; Query query = getEntityManager().createQuery(queryString); List abc = query.getResultList(); When I debug it, this is what I am getting. Please look at the image attached. http://n2.nabble.com/file/n2685502/QueryCache.jpg I am able to retrieve everything from the database but the QueryCache is null. My Persistence.xml file has the three lines >From this, maybe can anyone tell me what I am doing wrong? Thanks. ArjunReddy wrote: > > Hi Ravi, > > Thanks for replying. I will debug and see... right now I see null next to > QueryCache but I will check again because I might be doing something wrong > somewhere. I have two more questions actually. > > 1). When you said the below thing, I guess you were talking about the > Query Key right? and if you were, then you were right because I was able > to retrieve the Query key when I did the below thing. > > ************* > 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. > > ************* > > 2). In the link you gave me, it says that "The object id list is not > cached until the list returned at query execution time is fully traversed. > " Does that mean, I have to like Iterate through the list in order for the > object ids to get cached? > > Thanks. > > > rpalache wrote: >> >> Hi, >> >> Did you get a chance to go through the link I pasted in previous reply: >> http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_cache_query >> ? >> >> I this openJPA is already doing what ever you are trying to do. >> So, you do not need to do anything in your application. >> >> You can turn on debugging and see if the call is going to database or the >> results are returned from cache. >> >> Regards, >> Ravi. >> >> >> ArjunReddy wrote: >>> >>> 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. >>> >>> >>> >>> >>> >>> 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: >>>> >>>> >>>> >>>> >>>> >>>> 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-tp2653013p2685502.html Sent from the OpenJPA Developers mailing list archive at Nabble.com.