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: hst...@us.ibm.com |---------+----------------------------> | | Jeff Awe | | | <jeff1...@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 <catalina....@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 <jeff1...@gmail.com> wrote: > > > I'm running on OpenJPA 1.2.1 > > > > The following query is added to the QueryCache: > > > > Query: org.apache.openjpa.kernel.queryi...@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 > > >