[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [ecf-dev] Is ECF suitable for this project?

Hi Paul,

Paul Woodward wrote:
Hi Guys,
I've been following ECF for a little while now, and I've noticed a lot of emphasis on VOIP/chat/IM.
I've got a to develop a support application for managing multiple compute grids, this will be an RCP app based on the eclipse workbench. I plan to have an object model that represents each grid and its status. For a couple of reasons I would be very nice to be able to share this model 'live' between all of the support personnel:
1. There is a cost to the compute grid associated with getting real-time information - if one client gets it, I would like to share that everywhere
2. For some operations, optimistic locking will not be appropiate and I will want to pessimistically lock objects in all clients.

A part of ECF has the concept of a 'shared object'. A 'shared object' or set of shared objects can represent an arbitary model that is dynamically replicated among a group of processes. The shared object(s) can then send messages among the replicas to update the state in a manner appropriate to the application. A distinction is made between a 'primary' and the other replicas, so that (for example) a server (or one of the peers) can be authoritative WRT coordinating state changes.


So, for example, your object model could be 'wrapped' by a shared object and replicated among all participating clients and/or servers. State updates could be done either optimistically (for some state updates) or pessimistically (via a two-phase commit protocol) with the shared object class implementation making the decision about which state update protocol is required to meet application requirements. This way the shared object can make the determination about which protocol is required for a given state update, and engage in that protocol using some messaging primitives provided by the ECF container (reliable, sender-ordered group messaging). The point here is to not impose any particular state management on a shared object...i.e. force it into using either heavyweight pessimitic messaging for all state changes, or only optimistic protocols...but rather to allow/support the *application* to manage the distribution/replication and distributed synchronization of its own model in a way that makes sense for that model and it's usage via the user interface/view.

Note that as of fairly recently I added a set of classes to support transactional shared object replication...so that upon creation a shared object will be pessimistically replicated to the participating processes (all or nothing two-phase commit). These classes are in the org.eclipse.ecf plugin, in the org.eclipse.ecf.core.sharedobject package. Specifically the TransactionSharedObject abstract super class. For test code, see org.eclipse.ecf.test project, org.eclipse.ecf.test.AddTransactionSharedObjectTest.

Essentially what I would like is for any updates to the object model to be fired as property change events so that I have a consistent interface for model listeners for changes happening both locally and remotely.
This should be very easy. A shared object that was simply a property change listener that then serialized some version of the event and distributed that event to other group members (using optimistic and/or pessimistic as desired/appropriate) would be a natural. Shared Objects have a 'ISharedObjectContext' which allows every shared object to communicate with it's remote replicas (e.g. ISharedObjectContext.sendMessage(...)).
Does this sound like the kind of project ECF is being designed for? If it's not currently possible, what sort of time frame we we looking at?
Yes, it seems to fit quite well. The folks from the Corona project (http://www.eclipse.org/proposals/corona/) are actually using ECF for something like this (distributing events among a number of receivers...for notification rather than replicated model update).

I've worked with JGroups before and like it a lot. What is the planned timeframe for its integration?

Ah, good question. I would like to have javagroups as a provider underneath the ECF shared object API already. The reason it is not already is two fold:


1) Javagroups is under LGPL, which is not distributable under EPL...so if we do a javagroups-based ECF provider we cannot distribute it under the EPL (we can still do one, it's just that it has to be distributed in some other way...i.e. commercially, or under some non-EPL license...and not via eclipse.org)
2) We haven't had enough time to do as many providers as we would like. We now have an ECF 'generic' provider (server-reflected tcp-based messaging), and a JMS provider using the ActiveMQ implementation of JMS (http://ecf1.osuosl.org). We would very much like to already have a javagroups-based provider and a JXTA provider...but just haven't been able to do it yet. There is a nice little tutorial on using ECF to create such a provider however available here: http://www-128.ibm.com/developerworks/opensource/library/os-ecl-commfwk/


But we would love to coordinate such an effort with others to use javagroups as a messaging provider for the ECF shared object api. The basic models are very compatible...i.e. replication of a set of distributed objects, and reliable, ordered messaging (via javagroups channels) to deliver and apply state updates.

So if you are able perhaps we could coordinate putting in place an ECF provider implemented with javagroups in support of your project. Let me know if this would be doable, and how/whether you would like to participate in such an effort.

Thanks,

Scott