Query not getting evicted from QueryCache

4 messages Options
Embed this post
Permalink
Jeff Awe

Query not getting evicted from QueryCache

Reply Threaded More More options
Print post
Permalink
I'm running on OpenJPA 1.2.1

The following query is added to the QueryCache:

Query: org.apache.openjpa.kernel.QueryImpl@3afe3afe;
candidate class: class com.ibm.usmi.datamodel.system.OperatingSystem;
query: SELECT distinct
OPERATINGSYSTEM1.OID,OPERATINGSYSTEM1.Guid,OPERATINGSYSTEM1.ObjectType,OPERATINGSYSTEM1.Name,REMOTESERVICEACCESSPOINT1.OID,REMOTESERVICEACCESSPOINT1.Guid,REMOTESERVICEACCESSPOINT1.ObjectType,REMOTESERVICEACCESSPOINT1.Name
FROM OperatingSystem
OPERATINGSYSTEM1,System_accessedVia_RemoteServiceAccessPoint
SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1,RemoteServiceAccessPoint
REMOTESERVICEACCESSPOINT1,RelationshipInfo RELATIONSHIPINFO1 WHERE
OPERATINGSYSTEM1.OID = SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.sourceId
AND REMOTESERVICEACCESSPOINT1.OID =
SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.targetId AND
(OPERATINGSYSTEM1.Guid = ?1) AND (OPERATINGSYSTEM1.OID = ?2) AND
((OPERATINGSYSTEM1.BuildNumber = ?3)) AND (REMOTESERVICEACCESSPOINT1.Guid =
?4) AND (REMOTESERVICEACCESSPOINT1.OID = ?5) AND
((REMOTESERVICEACCESSPOINT1.Port = ?6)) AND RELATIONSHIPINFO1.changedDate >
?7 and RELATIONSHIPINFO1.sourceOID=OPERATINGSYSTEM1.OID and
RELATIONSHIPINFO1.relationshipType = ?8 and
RELATIONSHIPINFO1.targetOID=REMOTESERVICEACCESSPOINT1.OID

Later on, a record in RelationshipInfo is changed, which changes what should
be returned from this query.  I'd expect this to cause the cached query to
get evicted from the QueryCache, but it is not.  If I get the
QueryResultCache, and evictAll RelationshipInfo.class, it still doesn't get
removed.  This seems to be because the AccessPath only contains
OperatingSystem.  I'd expect this to contain all entities that this query
deals with:
                 {OperatingSystem,
System_accessedVia_RemoteServiceAccessPoint, RemoteServiceAccessPoint,
RelationshipInfo}
But the AccessPath only seems to contain the entity of what is returned from
the query.

What do I need to do so this query gets evicted like I'd expect.

Thanks - Jeff
catalina wei-2

Re: Query not getting evicted from QueryCache

Reply Threaded More More options
Print post
Permalink
Jeff,
Could you provide more info :
1. in persistence.xml, show us how you enable DataCache and QueryCache.
2. the updates to RelationshipInfo, is that done by the same application
that issued the query ? or some other application ?
3. Could you show the code fragment that issues em.createQuery ?

Thanks.
Catalina

On Mon, Nov 2, 2009 at 10:15 AM, Jeff Awe <[hidden email]> wrote:

> I'm running on OpenJPA 1.2.1
>
> The following query is added to the QueryCache:
>
> Query: org.apache.openjpa.kernel.QueryImpl@3afe3afe;
> candidate class: class com.ibm.usmi.datamodel.system.OperatingSystem;
> query: SELECT distinct
>
> OPERATINGSYSTEM1.OID,OPERATINGSYSTEM1.Guid,OPERATINGSYSTEM1.ObjectType,OPERATINGSYSTEM1.Name,REMOTESERVICEACCESSPOINT1.OID,REMOTESERVICEACCESSPOINT1.Guid,REMOTESERVICEACCESSPOINT1.ObjectType,REMOTESERVICEACCESSPOINT1.Name
> FROM OperatingSystem
> OPERATINGSYSTEM1,System_accessedVia_RemoteServiceAccessPoint
> SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1,RemoteServiceAccessPoint
> REMOTESERVICEACCESSPOINT1,RelationshipInfo RELATIONSHIPINFO1 WHERE
> OPERATINGSYSTEM1.OID =
> SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.sourceId
> AND REMOTESERVICEACCESSPOINT1.OID =
> SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.targetId AND
> (OPERATINGSYSTEM1.Guid = ?1) AND (OPERATINGSYSTEM1.OID = ?2) AND
> ((OPERATINGSYSTEM1.BuildNumber = ?3)) AND (REMOTESERVICEACCESSPOINT1.Guid =
> ?4) AND (REMOTESERVICEACCESSPOINT1.OID = ?5) AND
> ((REMOTESERVICEACCESSPOINT1.Port = ?6)) AND RELATIONSHIPINFO1.changedDate >
> ?7 and RELATIONSHIPINFO1.sourceOID=OPERATINGSYSTEM1.OID and
> RELATIONSHIPINFO1.relationshipType = ?8 and
> RELATIONSHIPINFO1.targetOID=REMOTESERVICEACCESSPOINT1.OID
>
> Later on, a record in RelationshipInfo is changed, which changes what
> should
> be returned from this query.  I'd expect this to cause the cached query to
> get evicted from the QueryCache, but it is not.  If I get the
> QueryResultCache, and evictAll RelationshipInfo.class, it still doesn't get
> removed.  This seems to be because the AccessPath only contains
> OperatingSystem.  I'd expect this to contain all entities that this query
> deals with:
>                 {OperatingSystem,
> System_accessedVia_RemoteServiceAccessPoint, RemoteServiceAccessPoint,
> RelationshipInfo}
> But the AccessPath only seems to contain the entity of what is returned
> from
> the query.
>
> What do I need to do so this query gets evicted like I'd expect.
>
> Thanks - Jeff
>
Jeff Awe

Re: Query not getting evicted from QueryCache

Reply Threaded More More options
Print post
Permalink
Catalina,

1.  This is how I enabled DataCache and QueryCache:
            <property name="openjpa.QueryCache" value="true"/>
            <property name="openjpa.DataCache" value="true"/>
2.  The same application that updates RelationshipInfo also issues the
query.
3.  This is how the Query is created:

Query query = entityManager.createQuery(queryStmt);

Here is the stacktrace:

org.apache.openjpa.kernel.QueryImpl.<init>(org.apache.openjpa.kernel.Broker,
java.lang.String, org.apache.openjpa.kernel.StoreQuery) line: 132
org.apache.openjpa.kernel.FinalizingBrokerImpl(org.apache.openjpa.kernel.BrokerImpl).newQueryImpl(java.lang.String,
org.apache.openjpa.kernel.StoreQuery) line: 3519
org.apache.openjpa.kernel.FinalizingBrokerImpl(org.apache.openjpa.kernel.BrokerImpl).newQuery(java.lang.String,
java.lang.Object) line: 3496
org.apache.openjpa.kernel.DelegatingBroker.newQuery(java.lang.String,
java.lang.Object) line: 1225
org.apache.openjpa.persistence.EntityManagerImpl.createQuery(java.lang.String,
java.lang.String) line: 870
org.apache.openjpa.persistence.EntityManagerImpl.createQuery(java.lang.String)
line: 865
org.apache.openjpa.persistence.EntityManagerImpl.createQuery(java.lang.String)
line: 1

queryStmt =
"SELECT distinct
OPERATINGSYSTEM1.OID,OPERATINGSYSTEM1.Guid,OPERATINGSYSTEM1.ObjectType,OPERATINGSYSTEM1.Name,REMOTESERVICEACCESSPOINT1.OID,REMOTESERVICEACCESSPOINT1.Guid,REMOTESERVICEACCESSPOINT1.ObjectType,REMOTESERVICEACCESSPOINT1.Name
FROM OperatingSystem
OPERATINGSYSTEM1,System_accessedVia_RemoteServiceAccessPoint
SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1,RemoteServiceAccessPoint
REMOTESERVICEACCESSPOINT1,RelationshipInfo RELATIONSHIPINFO1 WHERE
OPERATINGSYSTEM1.OID = SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.sourceId
AND REMOTESERVICEACCESSPOINT1.OID =
SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.targetId AND
(OPERATINGSYSTEM1.Guid = ?1) AND (OPERATINGSYSTEM1.OID = ?2) AND
((OPERATINGSYSTEM1.BuildNumber = ?3)) AND (REMOTESERVICEACCESSPOINT1.Guid =
?4) AND (REMOTESERVICEACCESSPOINT1.OID = ?5) AND
((REMOTESERVICEACCESSPOINT1.Port = ?6)) AND RELATIONSHIPINFO1.changedDate >
?7 and RELATIONSHIPINFO1.sourceOID=OPERATINGSYSTEM1.OID and
RELATIONSHIPINFO1.relationshipType = ?8 and
RELATIONSHIPINFO1.targetOID=REMOTESERVICEACCESSPOINT1.OID"

Then parameters are set on the Query after it is created.

Thanks,

Jeff

On Mon, Nov 2, 2009 at 2:01 PM, catalina wei <[hidden email]> wrote:

> Jeff,
> Could you provide more info :
> 1. in persistence.xml, show us how you enable DataCache and QueryCache.
> 2. the updates to RelationshipInfo, is that done by the same application
> that issued the query ? or some other application ?
> 3. Could you show the code fragment that issues em.createQuery ?
>
> Thanks.
> Catalina
>
> On Mon, Nov 2, 2009 at 10:15 AM, Jeff Awe <[hidden email]> wrote:
>
> > I'm running on OpenJPA 1.2.1
> >
> > The following query is added to the QueryCache:
> >
> > Query: org.apache.openjpa.kernel.QueryImpl@3afe3afe;
> > candidate class: class com.ibm.usmi.datamodel.system.OperatingSystem;
> > query: SELECT distinct
> >
> >
> OPERATINGSYSTEM1.OID,OPERATINGSYSTEM1.Guid,OPERATINGSYSTEM1.ObjectType,OPERATINGSYSTEM1.Name,REMOTESERVICEACCESSPOINT1.OID,REMOTESERVICEACCESSPOINT1.Guid,REMOTESERVICEACCESSPOINT1.ObjectType,REMOTESERVICEACCESSPOINT1.Name
> > FROM OperatingSystem
> > OPERATINGSYSTEM1,System_accessedVia_RemoteServiceAccessPoint
> > SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1,RemoteServiceAccessPoint
> > REMOTESERVICEACCESSPOINT1,RelationshipInfo RELATIONSHIPINFO1 WHERE
> > OPERATINGSYSTEM1.OID =
> > SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.sourceId
> > AND REMOTESERVICEACCESSPOINT1.OID =
> > SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.targetId AND
> > (OPERATINGSYSTEM1.Guid = ?1) AND (OPERATINGSYSTEM1.OID = ?2) AND
> > ((OPERATINGSYSTEM1.BuildNumber = ?3)) AND (REMOTESERVICEACCESSPOINT1.Guid
> =
> > ?4) AND (REMOTESERVICEACCESSPOINT1.OID = ?5) AND
> > ((REMOTESERVICEACCESSPOINT1.Port = ?6)) AND RELATIONSHIPINFO1.changedDate
> >
> > ?7 and RELATIONSHIPINFO1.sourceOID=OPERATINGSYSTEM1.OID and
> > RELATIONSHIPINFO1.relationshipType = ?8 and
> > RELATIONSHIPINFO1.targetOID=REMOTESERVICEACCESSPOINT1.OID
> >
> > Later on, a record in RelationshipInfo is changed, which changes what
> > should
> > be returned from this query.  I'd expect this to cause the cached query
> to
> > get evicted from the QueryCache, but it is not.  If I get the
> > QueryResultCache, and evictAll RelationshipInfo.class, it still doesn't
> get
> > removed.  This seems to be because the AccessPath only contains
> > OperatingSystem.  I'd expect this to contain all entities that this query
> > deals with:
> >                 {OperatingSystem,
> > System_accessedVia_RemoteServiceAccessPoint, RemoteServiceAccessPoint,
> > RelationshipInfo}
> > But the AccessPath only seems to contain the entity of what is returned
> > from
> > the query.
> >
> > What do I need to do so this query gets evicted like I'd expect.
> >
> > Thanks - Jeff
> >
>
catalina wei-2

Re: Query not getting evicted from QueryCache

Reply Threaded More More options
Print post
Permalink
Hi Jeff,
JIRA issue OPENJPA-1380 is open for this problem.
Fix will be available soon.

Catalina

On Tue, Nov 3, 2009 at 8:23 PM, Jeff Awe <[hidden email]> wrote:

> Catalina,
>
> 1.  This is how I enabled DataCache and QueryCache:
>            <property name="openjpa.QueryCache" value="true"/>
>            <property name="openjpa.DataCache" value="true"/>
> 2.  The same application that updates RelationshipInfo also issues the
> query.
> 3.  This is how the Query is created:
>
> Query query = entityManager.createQuery(queryStmt);
>
> Here is the stacktrace:
>
>
> org.apache.openjpa.kernel.QueryImpl.<init>(org.apache.openjpa.kernel.Broker,
> java.lang.String, org.apache.openjpa.kernel.StoreQuery) line: 132
>
> org.apache.openjpa.kernel.FinalizingBrokerImpl(org.apache.openjpa.kernel.BrokerImpl).newQueryImpl(java.lang.String,
> org.apache.openjpa.kernel.StoreQuery) line: 3519
>
> org.apache.openjpa.kernel.FinalizingBrokerImpl(org.apache.openjpa.kernel.BrokerImpl).newQuery(java.lang.String,
> java.lang.Object) line: 3496
> org.apache.openjpa.kernel.DelegatingBroker.newQuery(java.lang.String,
> java.lang.Object) line: 1225
>
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(java.lang.String,
> java.lang.String) line: 870
>
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(java.lang.String)
> line: 865
>
> org.apache.openjpa.persistence.EntityManagerImpl.createQuery(java.lang.String)
> line: 1
>
> queryStmt =
> "SELECT distinct
>
> OPERATINGSYSTEM1.OID,OPERATINGSYSTEM1.Guid,OPERATINGSYSTEM1.ObjectType,OPERATINGSYSTEM1.Name,REMOTESERVICEACCESSPOINT1.OID,REMOTESERVICEACCESSPOINT1.Guid,REMOTESERVICEACCESSPOINT1.ObjectType,REMOTESERVICEACCESSPOINT1.Name
> FROM OperatingSystem
> OPERATINGSYSTEM1,System_accessedVia_RemoteServiceAccessPoint
> SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1,RemoteServiceAccessPoint
> REMOTESERVICEACCESSPOINT1,RelationshipInfo RELATIONSHIPINFO1 WHERE
> OPERATINGSYSTEM1.OID =
> SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.sourceId
> AND REMOTESERVICEACCESSPOINT1.OID =
> SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.targetId AND
> (OPERATINGSYSTEM1.Guid = ?1) AND (OPERATINGSYSTEM1.OID = ?2) AND
> ((OPERATINGSYSTEM1.BuildNumber = ?3)) AND (REMOTESERVICEACCESSPOINT1.Guid =
> ?4) AND (REMOTESERVICEACCESSPOINT1.OID = ?5) AND
> ((REMOTESERVICEACCESSPOINT1.Port = ?6)) AND RELATIONSHIPINFO1.changedDate >
> ?7 and RELATIONSHIPINFO1.sourceOID=OPERATINGSYSTEM1.OID and
> RELATIONSHIPINFO1.relationshipType = ?8 and
> RELATIONSHIPINFO1.targetOID=REMOTESERVICEACCESSPOINT1.OID"
>
> Then parameters are set on the Query after it is created.
>
> Thanks,
>
> Jeff
>
> On Mon, Nov 2, 2009 at 2:01 PM, catalina wei <[hidden email]>
> wrote:
>
> > Jeff,
> > Could you provide more info :
> > 1. in persistence.xml, show us how you enable DataCache and QueryCache.
> > 2. the updates to RelationshipInfo, is that done by the same application
> > that issued the query ? or some other application ?
> > 3. Could you show the code fragment that issues em.createQuery ?
> >
> > Thanks.
> > Catalina
> >
> > On Mon, Nov 2, 2009 at 10:15 AM, Jeff Awe <[hidden email]> wrote:
> >
> > > I'm running on OpenJPA 1.2.1
> > >
> > > The following query is added to the QueryCache:
> > >
> > > Query: org.apache.openjpa.kernel.QueryImpl@3afe3afe;
> > > candidate class: class com.ibm.usmi.datamodel.system.OperatingSystem;
> > > query: SELECT distinct
> > >
> > >
> >
> OPERATINGSYSTEM1.OID,OPERATINGSYSTEM1.Guid,OPERATINGSYSTEM1.ObjectType,OPERATINGSYSTEM1.Name,REMOTESERVICEACCESSPOINT1.OID,REMOTESERVICEACCESSPOINT1.Guid,REMOTESERVICEACCESSPOINT1.ObjectType,REMOTESERVICEACCESSPOINT1.Name
> > > FROM OperatingSystem
> > > OPERATINGSYSTEM1,System_accessedVia_RemoteServiceAccessPoint
> > > SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1,RemoteServiceAccessPoint
> > > REMOTESERVICEACCESSPOINT1,RelationshipInfo RELATIONSHIPINFO1 WHERE
> > > OPERATINGSYSTEM1.OID =
> > > SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.sourceId
> > > AND REMOTESERVICEACCESSPOINT1.OID =
> > > SYSTEM_ACCESSEDVIA_REMOTESERVICEACCESSPOINT1.targetId AND
> > > (OPERATINGSYSTEM1.Guid = ?1) AND (OPERATINGSYSTEM1.OID = ?2) AND
> > > ((OPERATINGSYSTEM1.BuildNumber = ?3)) AND
> (REMOTESERVICEACCESSPOINT1.Guid
> > =
> > > ?4) AND (REMOTESERVICEACCESSPOINT1.OID = ?5) AND
> > > ((REMOTESERVICEACCESSPOINT1.Port = ?6)) AND
> RELATIONSHIPINFO1.changedDate
> > >
> > > ?7 and RELATIONSHIPINFO1.sourceOID=OPERATINGSYSTEM1.OID and
> > > RELATIONSHIPINFO1.relationshipType = ?8 and
> > > RELATIONSHIPINFO1.targetOID=REMOTESERVICEACCESSPOINT1.OID
> > >
> > > Later on, a record in RelationshipInfo is changed, which changes what
> > > should
> > > be returned from this query.  I'd expect this to cause the cached query
> > to
> > > get evicted from the QueryCache, but it is not.  If I get the
> > > QueryResultCache, and evictAll RelationshipInfo.class, it still doesn't
> > get
> > > removed.  This seems to be because the AccessPath only contains
> > > OperatingSystem.  I'd expect this to contain all entities that this
> query
> > > deals with:
> > >                 {OperatingSystem,
> > > System_accessedVia_RemoteServiceAccessPoint, RemoteServiceAccessPoint,
> > > RelationshipInfo}
> > > But the AccessPath only seems to contain the entity of what is returned
> > > from
> > > the query.
> > >
> > > What do I need to do so this query gets evicted like I'd expect.
> > >
> > > Thanks - Jeff
> > >
> >
>