Andrus, > Are you sure this happens on "Save"? I just checked the code, and the dialog > is only called when you click "Synch ObjEntity with DbEntity" button. And > from there it does the right thing.
I was mostly concentrating on getting my design correct at the time so I am doing my best at recalling the exact sequence. My best recollection is the following: 1. I added a new DbEntity (E1) 2. I added a foreign key (pointing to E1) to two existing entities (E3 & E4. 3. I added the "to one" relationships to each of the to E3 & E4. 4. I then added the reverse relationship (as it seems the CM was requiring) 5. Then I selected the "create ObjEntity" for E1 6. Only after doing all this did I select the "two arrows" to synch the above 3 entities 7. Then I selected "Save". As a result of the above seven or so steps the dialog window popped up. My recollection (although it is certainly possible I remember incorrectly) is that it asked if I wanted to remove the foreign keys and the box was checked. So I *remember* that I selected "continue", but since the wording was a tad ambiguous (and since I have never seen this dialog before) I may have indeed deselected the checkbox and then selected "continue". As a result CM was non-responsive for about 3-4 min and then reported an out of memory exception. However, even if I did do this the first time, I tried it again and definitely did not de-select the checkbox and selected continue. It became non-responsive again and generated the same out of memory exception. > Also I couldn't reproduce the memory problem. The only retained object in > this operation is the undo stack, which is limited to 100 undo's (which does > take memory, but a reasonable amount). As I reported recently, I performed the same actions (as outlined above) and selected continue and there was no hint of a problem. (Which both suggests that the CM is operating with a sufficient memory configuration, and that the problem may be related to something else). It is possible (due to my attempting to recall all of my actions in order) that I *may* not have executed step 4 (the reverse relationship) in that order. I just can't remember precisely when I did it. So let me ask: Is it required by CM for a "to one" relationships to have a reverse relationship (ie. either to-many or to-one)? If so, and I had mistakenly missed this step, could that have triggered this problem when I selected "Save" then "Continue"? Thanks, Joe On Feb 3, 2010, at 3:04 AM, Andrus Adamchik wrote: > Are you sure this happens on "Save"? I just checked the code, and the dialog > is only called when you click "Synch ObjEntity with DbEntity" button. And > from there it does the right thing. Also I couldn't reproduce the memory > problem. The only retained object in this operation is the undo stack, which > is limited to 100 undo's (which does take memory, but a reasonable amount). > > So what I suggest now is that we just wait till it happens again, to see if > there is a pattern to reproduce it. > >> CayenneModeler Info >> Version: cayenne.version >> Build Date: cayenne.build.date > > Doesn't look like this is coming from a release build of the Modeler. > > Andrus > > On Feb 1, 2010, at 1:11 AM, Joe Baldwin wrote: > >> Tried to save a project with a new Entity (which had a many to one >> relationship). When I selected "Save" the following panel was displayed: >> >> Remove Foreign Keys mapped as object attributes? >> >> Not sure what this would accomplish, I selected "Yes", which appears to be >> the wrong answer because Cayenne Modeler crashed big time. (see auto report >> below) >> >> Joe >> >> CayenneModeler Info >> Version: cayenne.version >> Build Date: cayenne.build.date >> Exception: >> ================================= >> java.lang.OutOfMemoryError: Java heap space >> at >> java.util.Collections$UnmodifiableCollection.iterator(Collections.java:1006) >> at >> org.apache.cayenne.map.ObjEntity.getAttributeForDbAttribute(ObjEntity.java:845) >> at >> org.apache.cayenne.modeler.undo.DbEntitySyncUndoableEdit$MeaningfulFKsUndoableEdit.<init>(DbEntitySyncUndoableEdit.java:96) >> at >> org.apache.cayenne.modeler.action.DbEntitySyncAction.synchDbEntity(DbEntitySyncAction.java:95) >> at >> org.apache.cayenne.modeler.action.DbEntitySyncAction.performAction(DbEntitySyncAction.java:60) >> at >> org.apache.cayenne.modeler.util.CayenneAction.actionPerformed(CayenneAction.java:163) >> at >> javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) >> at >> javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) >> at >> javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) >> at >> javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) >> at >> javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) >> at >> java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) >> at java.awt.Component.processMouseEvent(Component.java:6348) >> at javax.swing.JComponent.processMouseEvent(JComponent.java:3255) >> at java.awt.Component.processEvent(Component.java:6113) >> at java.awt.Container.processEvent(Container.java:2085) >> at java.awt.Component.dispatchEventImpl(Component.java:4714) >> at java.awt.Container.dispatchEventImpl(Container.java:2143) >> at java.awt.Component.dispatchEvent(Component.java:4544) >> at >> java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618) >> at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282) >> at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) >> at java.awt.Container.dispatchEventImpl(Container.java:2129) >> at java.awt.Window.dispatchEventImpl(Window.java:2475) >> at java.awt.Component.dispatchEvent(Component.java:4544) >> at java.awt.EventQueue.dispatchEvent(EventQueue.java:635) >> at >> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) >> at >> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) >> at >> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) >> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) >> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) >> at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) >> >> >> >> >
