Follow up to this earlier thread... Using the JBC classloader registration API won't work right now due to http://jira.jboss.com/jira/browse/JBCACHE-876. With the query cache, a user class can end up as part of an Fqn; JBC doesn't deal with this yet.
The RH stacks people are looking for a solution this week; one workaround idea I had was to use persistence.xml to replace the StandardQueryCacheFactory with a custom one. This custom QueryCache would use the JBC Option API to make all writes to JBC for the query cache local only (i.e. non-replicated). The entity cache and update timestamps cache would still replicate. Do you guys see any problem with such an approach (besides ugliness); e.g. any problems with the non-replicated query caches falling out of sync with the entities? - Brian Brian Stansberry wrote: > Steve Ebersole wrote: >> (1) >> >> The FQN is exactly the regionName value passed in to >> CacheProvider.buildCache(). The structure of the region names are >> determined by the callers of this method, and it is different based >> on the intended usage of the built region. >> >> For entity caches the region name follows the pattern: >> {prefix.}rootEntityName >> >> For collection caches the pattern is: >> {prefix.}owningEntityName.collectionPropertyName >> >> For query caches, there is a default which is named: >> {prefix.}org.hibernate.cache.StandardQueryCache >> >> although users can specify additional query cache regions: >> {prefix.}userSuppliedRegionName >> > > Carlo, for an EJB3 entity deployment where the query cache is > enabled, is there a separate query cache region set up for > that deployment? Or is the default one used? If the former, > we can register the proper classloader for each query cache > region. If the latter, there is no single correct > classloader for the default region and we have a problem. > >> The dots are transformed to slashes for TreeCache based providers; >> although note that there was a bug in how this was done early which >> caused a very flat structure. The nodes were named correctly, but >> apparently we were not constructing the actual FQN correctly causing >> all regions to be created flat off of the root node. >> >> >> (2) >> >> The vast majority of cache regions are built when the SessionFactory >> is being built. So this is probably done during deployment. I >> assume EJB3 deployer properly sets up a context classloader, though >> not certain. But regardless, the classloader used would need access >> to the entity classes as they would be need during construction of >> the SessionFactory anyway. Typically deployers in JBoss are pretty >> smart and switch to the *deployment's* classloader before invoking >> on the deployment... > > Yeah, I figured that's the case. > >> -----Original Message----- >> From: Brian Stansberry >> Sent: Tuesday, November 14, 2006 11:23 AM >> To: Steve Ebersole; Max Andersen >> Subject: FW: Replication problems with query cache and JBoss Cache >> >> Guys, >> >> I've tried sending the following to hibernate-dev a couple times and >> it rejects me (I registered), so I'll just send it to you directly. >> >> Brian Stansberry wrote: >>> There are some classloader issues with JBoss Cache's deserialization >>> of replicated query cache entries (see >>> http://jira.jboss.com/jira/browse/JBCLUSTER-150). I'm hoping these >>> will be pretty easy to resolve using some JBC APIs meant for this >>> kind of problem, but need confirmation on a couple points: >>> >>> 1) What's the structure of the Fqn where query cache entries are >>> stored in JBC? Specifically, how does it relate to the regionName >>> parameter that's passed to CacheProvider.buildCache(String >>> regionName, Properties properties)? Logically, is it something >>> like: >>> >>> /somepath/regionName/queryCache/entry >>> /somepath/regionName/entityCache/entry >>> >>> or.. >>> >>> /somepath/queryCache/regionName/entry >>> /somepath/entityCache/regionName/entry >>> >>> or (I hope not) >>> >>> /somepath/queryCache/entry >>> /somepath/entityCache/regionName/entry >>> >>> 2) What's the thread context class loader when >>> CacheProvider.buildCache() is invoked? (I'm thinking here about an >>> EJB3 entity bean deployment. Probably better asked on the JBoss >>> EJB3 forum, but I'll start here.) >>> >>> If all the query cache entries for a region are segregated under >>> particular fqn, and the thread context class loader has visibility >>> to the entity classes, this problem should be easily solved using >>> the JBC activate/inactivateRegion API. >>> >>> Sorry for the basic questions. >>> >>> Brian Stansberry >>> Lead, AS Clustering >>> JBoss, a division of Red Hat >>> Ph: 510-396-3864 >>> skype: bstansberry Brian Stansberry Lead, AS Clustering JBoss, a division of Red Hat Ph: 510-396-3864 skype: bstansberry IT executives: Red Hat still #1 for value http://www.redhat.com/promo/vendor/ _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev