You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Jeff Awe <je...@gmail.com> on 2009/11/02 19:15:04 UTC
Query not getting evicted from QueryCache
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
Re: Query not getting evicted from QueryCache
Posted by Heather Sterling <hs...@us.ibm.com>.
I looked at how the CTS code in the stack trace is getting the RCS service
in their plugin. This is what they're doing. They're not using a service
tracker, like they should be.
/**
* private method to get handle of the ResourceCachingService from
context
*
* @return the ResourceCachingService instance
*/
private ResourceCachingService getResourceCachingService() {
if (rcsService == null) {
BundleContext ctx = Activator.getBundleContext();)
ServiceReference ref = ctx.getServiceReference
(ResourceCachingService.class.getName());
this.rcsService = (ResourceCachingService) ctx.getService(ref);
}
return rcsService;
}
Heather Sterling
Systems Management Development
Phone: 919-254-7163 T/L: 444-7163
Cell: 919-423-3143
Email: hsterl@us.ibm.com
|---------+---------------------------->
| | Jeff Awe |
| | <jeff1awe@gmail.c|
| | om> |
| | |
| | 11/03/2009 11:23 |
| | PM |
| | Please respond to|
| | users |
|---------+---------------------------->
>-----------------------------------------------------------------------------------------------------------------------------------|
| |
| To: users@openjpa.apache.org |
| cc: |
| Subject: Re: Query not getting evicted from QueryCache |
>-----------------------------------------------------------------------------------------------------------------------------------|
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 <ca...@gmail.com>
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 <je...@gmail.com> 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
> >
>
Re: Query not getting evicted from QueryCache
Posted by catalina wei <ca...@gmail.com>.
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 <je...@gmail.com> 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 <ca...@gmail.com>
> 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 <je...@gmail.com> 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
> > >
> >
>
Re: Query not getting evicted from QueryCache
Posted by Jeff Awe <je...@gmail.com>.
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 <ca...@gmail.com> 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 <je...@gmail.com> 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
> >
>
Re: Query not getting evicted from QueryCache
Posted by catalina wei <ca...@gmail.com>.
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 <je...@gmail.com> 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
>