Tom - these query cache hits should show up in
the QueryMonitor shouldnt they ?
the ...getBaseCurrencyPairByArea below is (should) be using the
query-results-cache hint....
the hint is applied to the query returned from
em.createQuery(namedQueryName)
[3/14/12 15:48:14:205 UTC] 0000007a SystemOut O Query
Monitor:1331740094203
Query Cache Database
biz.wss.interfaces.entities.area.bookarea.BookArea-findByPrimaryKey
122858 11
biz.wss.interfaces.entities.currency.CurrencyImpl-findByPrimaryKey
596188 13
biz.wss.interfaces.entities.currency.CurrencyPairImpl-CurrencyPair.getBaseCurrencyPairByArea
0 14318
biz.wss.interfaces.entities.currency.CurrencyPairImpl-findAll
0 32899
biz.wss.interfaces.entities.currency.CurrencyPairImpl-findByPrimaryKey
419774 364775
On 12/03/2012 18:14, Tom Ware wrote:
sorry.
I misunderstood the question.
To clear the full set of query results you'll have to call some
EclipseLink native API - i.e. there is no JPA hint.
Unwrap the query using JpaHelper.getDatabaseQuery(Query), cast it
to a org.eclipse.persistence.queries.ReadQuery and call:
clearQueryResults(AbstractSession session). You can get the
session using the JpaHelper API as well.
-Tom
On 12/03/2012 11:56 AM, Tim Martin wrote:
mmm, but I think that only refreshes the
results for the returned objects ? Is
that a correct assumption ?
it wouldnt remove all results for all param values from the
cache for that named
query - meaning that the caller thats creating the named query
would need to
know to force a refresh - but it doesnt know as its not
responsible for doing
the updates...
our current scenario is :
static data updated generically in one ejb
when real business processing logic needs to get a piece of
static data it's
read by entity specific dao's
when a static data entity is updated I want to clear the caches
(I'm happy to
completely clear all caches at this point as it's very
infrequent).
so I was hoping to call a short helper function that would do
that - initially
by calling something like this here which would invalidate
everything
genericUpdateDao.clearQueryCaches(){
List<String> qNames = Helper.getCachedQueryNames();
for each qName {
Query q = em.createQuery(qName)
q.query.setHint("eclipselink.query-results-cache.size",1)
q.getResultList();
}
On 12/03/2012 15:38, Tom Ware wrote:
I suggest you use the refresh query
hint. That should refresh the cache.
On 12/03/2012 11:09 AM, Tim Martin wrote:
Is there anyway to force a cache clear
- I can see that
query.setHint(""eclipselink.query-results-cache.size",1)
and then calling the query with parameters that would never
return a result
would clear the cache, BUT is there a better way ?
On 12/03/2012 13:12, Tom Ware wrote:
The query cache will not know to
refresh when a different persistence
operation changes one of the results held in the cache.
-Tom
On 12/03/2012 4:58 AM, Tim Martin wrote:
Tom - one further question re
queryResults caching -
if I run queryA which returns object X,Y,Z which are
cached
and then and update one of those objects, does the query
results cache know or
get told enough to clear the results for queryA so re
running it will go to
the
database instead of returning a stale result ?
thanks
http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_%28ELUG%29#How_to_Cache_Query_Results_in_the_Query_CacheHow
to Cache Query Results in the Query Cache
In addition to EclipseLink's object cache, EclipseLink
also supports a query
cache. There is the following distinction between the
two:
* The /object cache/ indexes objects by their primary
key, allowing primary
key queries to obtain cache hits. By using the
object cache, queries that
access the data source can avoid the cost of
building the objects and
their
relationships if the object is already present.
* The /query cache/ is distinct from the object cache.
The query cache is
indexed by the query and the query parameters–not
the object's primary
key.
This allows for any query executed with the same
parameters to obtain a
query cache hit and return the same result set.
On 09/03/2012 14:14, Tom Ware wrote:
The hint can be added to all
queries. Obviously it will improve performance
more for queries that are executed more often. (named
queries are a good
candidate here)
Queries are actually cloned before we apply query
hints to them, so the
SessionCustomizer option listed below may be what you
want for certain
queries. (since it will affect the query every time it
is looked up rather
than just the instance you get from em.createQuery()).
BTW: Some doc:
http://wiki.eclipse.org/Introduction_to_EclipseLink_Queries_(ELUG)#How_to_Cache_Query_Results_in_the_Query_Cache
-Tom
On 09/03/2012 8:49 AM, Tim Martin wrote:
Just to check - the hint can
only be added to named ? not those built on
the fly
(which of course we are doing are best to avoid :)
On 09/03/2012 13:45, Tom Ware wrote:
There is no setting to do
this universally for a whole persistence unit. It
should be possible to do this using
EclipseLink-native API in a
SessionCustomizer by iterating through the queries
defined in the query
manager and calling the required native API to set
it up. The timeouts
could
be set in the same code.
The reason there is no universal setting is that
it is not clear that this
would be desirable in most use-cases. EclipseLink
already has a cache that
provides quite a bit of performance boost and the
query results cache is
intended to provide an additional performance
boost for selected queries.
Using the query cache requires an understanding
about the degree to which
results may be stale when they come back.
-Tom
On 09/03/2012 8:16 AM, Tim Martin wrote:
Hi - anyone know if there
is a valid property to use in the
persistence.xml to
cache all query results by name and parameter
values.
So rather than putting a hint on the queries we
can do something like
<property
name="eclipselink.query-results-cache"
value="true"/>
I've come across it searching in google - but
not come across anything
defintive...
If so - how would we configure expiration of the
cache ? something simple
like
expire everything every x minutes would do to
start with..
Thanks
Tim
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users
|