Kirstan Vandersluis wrote: > I thought initially that the cache idea could be valuable in the > integration/mediation layer. But you have to worry about keeping > the cache consistent, which can be complicated and risky. In > addition, a typical RIA environment will let you cache retrieved > data to some extent already. For example, you might call a data > service to retrieve a customer record, which you then display in a > multi-tabbed view. The user sees only a subsection at once, when in > fact the entire customer record is available on the client side. > The cache conherency problem is isolated and manageable in this > case, and a straightforward optimistic concurrency strategy can be > used if updates are required. Seems like a viable strategy to > accomodate RIA without stretching the SOA too much.
We created a distributed data synchronization layer in a recent project that lets everyone have a consistent view of data as it changes over time, without having to "look" for changes. It uses a transactional delivery system that only updates everyone as the transaction on the change commits. It uses a GUID operation identification system that allows things to broadcast around and things only get seen once. This allowed us to use postgres as a backing store, and have clients connect to "any" server to make their edits (and observations) with everyone staying in sync. We have a "key" generation service too for inserts that allows domain tables to be used and the keys into those tables to be guaranteed unique as well. Works flawlessly. It's written in Java and exploits cool features such as InvocationHandlers and dynamic proxies to put the GUID filtering on top of objects without having to redesign everything to make it work. And of course Jini is in the mix for transactions, leasing and service discovery. Gregg Wonderly