Hello,

I want to thank Andrus and all for this and all of the helpful answers. This is probably the most amicable and helpful group I've ever encountered.

This worked great. It's answered a big question that I had for awhile, and makes complete sense in the larger application scheme. Not being a Hibernate expert, I don't know if there is an equivalent concept to these nested contexts. I'm actually hopeful that there isn't, as I'm lately asked to defend using Cayenne over Hibernate, and this would be compelling. Gotta do more homework.

Many thanks again,

Lawrence
==================================
Lawrence Gerstley, Ph.D.
lawg...@gmail.com


On Dec 11, 2008, at 11:02 PM, Andrus Adamchik wrote:

Hi Lawrence,

Now, I don't think that I want to move CONCEPT1 to the DIALOGCHILDCONTEXT when I open the dialog--doesn't that mean that

Actually that's exactly what you want to do. Don't think of it as "move" though, think of it as getting a clone of the original object, kind of like an SVN branch:

CONCEPT1 localObject = DataObjectUtils.objectForPk(DIALOGCHILDCONTEXT, editorConcept1.getObjectId());


I'd have to move it back when I close said dialog?

Here an SCM (SVN or other) analogy may also be useful. You won't be moving it back, but rather merging your "branch" back to the parent. This is not as scary as it sounds:

DIALOGCHILDCONTEXT.commitChangesToParent();

Andrus


On Dec 12, 2008, at 7:26 AM, Lawrence Gerstley wrote:

Hello,

I've been using Cayenne quite successfully for sometime in creating my Eclipse RCP applications, but there is something that has flummoxed me for sometime, and was wondering about best practices. I've been creating a childDataContext (let's call in EDITORCHILDCTXT) every time I open up an EditorPart, so that it can use the Eclipse dirty/save model. This works fine, but a problem arises when I have dialogs in the editor. If I was editing, say, an ontological concept--let's call in CONCEPT, and it has 0-many PROPERTY, I might have a dialog window pop-up to create that property. The first thing I want to do in such a dialog is to create a CANDIDATE_PROPERTY, and add it to CONCEPT1. To do this, I would create a childDataContext (called DIALOGCHILDCTXT) as a child of EDITORCHILDCTXT.

Now, ideally, I'd create and register a new PROPERTY and add it to the CONCEPT1 (something like "addToConceptProperties"). The problem, of course, is that the newly created PROPERTY1 is in DIALOGCHILDCONTEXT, and CONCEPT1 is in EDITORCHILDCTXT. The desired behavior is to be able to use a <Cancel> button in the dialog, rollback and close DIALOGCHILDCONTEXT, losing the PROPERTY information, but leaving any changes to CONCEPT1 in EDITORCHILDCTXT intact, and commit only if the user confirms a save in that editor.

Now, I don't think that I want to move CONCEPT1 to the DIALOGCHILDCONTEXT when I open the dialog--doesn't that mean that I'd have to move it back when I close said dialog? Or do I want to get another copy of CONCEPT1 in the DIALOGCHILDCTXT to use for the addition of the new PROPERTY, and if I do that, how can I inform CONCEPT1 in the EDITORCHILDCTXT that it has a new PROPERTY, but not lose any of its other changes? Or, does this type of paradigm just not work here? Or, finally, am I just missing something terribly obvious, and have made a fool of myself. :)

I've gone back and read some of your 2007 discussions about connecting relationships between different contexts, and combed through the documentation, but really can't determine how to do this without forcing premature commits, breaking the editor dirty/ save paradigm. If you have any thoughts, I'd love to hear them!

Many thanks,

Lawrence
==================================
lawg...@gmail.com







Reply via email to