You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Arturo Perez <pe...@gsicommerce.com> on 2011/10/14 04:50:38 UTC
suggestions for integrating PostgreSQL Listen/Notify
Hi all,
The PostgreSQL database has a notification system built-in so that one
database-connected app can signal another. The mechanism is called
Listen/Notify. Some JDBC-centric docs here:
http://jdbc.postgresql.org/documentation/81/listennotify.html
How would I go about integrating that into Cayenne for certain types of
cache invalidations? I have several apps only some of which are
Cayenne-based so using JavaGroups and JMS for this sort of thing isn't
straightforward.
Is there any documentation on Cayenne's cross-vm cache synchronization
protocols?
tia,
arturo
Re: suggestions for integrating PostgreSQL Listen/Notify
Posted by Andrus Adamchik <an...@objectstyle.org>.
While there are many java-to-java messaging solutions (and all of them can be used without Cayenne), this PG mechanism is pretty cool, as "NOTIFY mymessage" can be sent from places like SQL scripts, etc. So yeah, it does make sense to look at Cayenne integration.
So... per http://cayenne.apache.org/doc/caching-and-fresh-data.html one of the key aspects of the current cache is a separation between the object cache and query cache. We have a plan to unify them at some point, probably in 3.2, but now they are separate caches, and are managed differently. In fact only query cache is really "manageable", so let's focus on the query cache.
Query cache is represented by DI-injectable (talking about Cayenne 3.1) org.apache.cayenne.cache.QueryCache instance. It defines general cache management methods needed for Cayenne to use the cache. The one that you are interested in is "removeGroup".
Your message "protocol" may consist of just a cache group name String. This is very simple (you don't have to send object snapshots or anything) and can be done even from a SQL script. Now in Cayenne you can decorate whatever QueryCache implementation you are using. The decorator would (1) fire a PG event when Cayenne calls "removeGroup", and (2) would run a listener in a separate thread, which itself would call "removeGroup" when a PG event arrives.
Pretty simple in theory :-)
Andrus
On Oct 14, 2011, at 5:50 AM, Arturo Perez wrote:
> Hi all,
>
> The PostgreSQL database has a notification system built-in so that one
> database-connected app can signal another. The mechanism is called
> Listen/Notify. Some JDBC-centric docs here:
> http://jdbc.postgresql.org/documentation/81/listennotify.html
>
> How would I go about integrating that into Cayenne for certain types of
> cache invalidations? I have several apps only some of which are
> Cayenne-based so using JavaGroups and JMS for this sort of thing isn't
> straightforward.
>
> Is there any documentation on Cayenne's cross-vm cache synchronization
> protocols?
>
> tia,
> arturo
>
>