Kevin, I think we might have a communication problem. First of all let me say that I will follow any instruction the team requests in order to solve this problem. Cayenne is one of the best pieces of software I have ever used.
Also, I have my own methodology when analyzing a problem. The first thing I do is establish what steps the user has taken. Since there are quite a few ways to accomplish the same task in Cayenne Modeler (and especially since I did this one in reverse order), I was hoping to discuss the user procedure first since the dialog window didn't explain much. So I either have missed some fundamental design step in using CM or I should never have gotten the dialog window in the first place. Again, I don't want to bother the team with a problem if it is simply user-procedure. In addition, if I increase the memory and it doesn't crash then I still in a position in which I do not understand why I got this message or what the modeler is doing to my design. So my first question is: what is the recommended method to create a "to-one" relationship? If as someone explained that the CM is suggesting, 'I don't need a foreign key' then how does the database keep track of the relationship between the two tables? Thanks, Joe On Feb 2, 2010, at 9:30 AM, Kevin Menard wrote: > Hi Joe, > > Please find comments in-line. > > > On Tue, Feb 2, 2010 at 9:09 AM, Joe Baldwin <jfbald...@earthlink.net> wrote: > >> The behavior by an app in which it freezes for about 3-4 minutes and then >> generates an out-of-memory-error is typically associated with an infinite >> loop. Increasing the available memory to an app does nothing to analyze the >> problem. >> > > An infinite loop should manifest itself as a stack overflow issue, not an > out of memory one. I'm not saying it can't happen, but an OOME doesn't mean > that there's an infinite loop. By your description of the problem, it was a > large model. So, there are other ways that memory use could explode and we > won't really have a better idea until you try increasing the heap size. > That's simply the nature of the halting problem. > > >> >> It is more likely to be associated the the CM attempting to "remove the >> foreign key" as the CM dialog suggested. If the CM algorithm responsible for >> accomplishing this task is somehow faulty it could have easily resulted in >> an out of memory error. >> >> If on the other hand there is no error in the algorithm and this task >> requires and extraordinary amount of memory then it still points to the >> assumptions associated with the algorithm and its memory requirements. >> > > Certainly. No one is suggesting to the contrary. I'm just trying to get > more information to help diagnose the issue. Without your data model, it's > not something I can easily replicate. > > >> >> Still, it is not clear what the CM-dialog is attempting to accomplish or >> rectify (an associated, we-usually-do-it-this-way would help in these types >> of cases), so either the CM has mis-analysed or the user has made a >> procedural error. Either way the CM should not go into some functionality >> that takes 3-4 minutes and then runs out of memory. >> >> In addition, simply dismissing the CM's dialog window with the "remove the >> foreign key?" question results in no out of memory error. This would not >> typically happen if the CM were operating with insufficient memory. >> > > If it is indeed the removing of the foreign key that is causing an OOME, it > still would point at Cayenne operating with insufficient memory. The > application's memory footprint is not static. > > >> >> Therefore, the facts tend to point towards some exceptional condition that >> should be caught by the CM. If there is something missing in the user >> configuration then this might be an opportunity to have the CM point this >> out. >> > > > There is no logical entailment from any of the facts that suggest the > problem at this stage. All we know for certain is you operated on a large > dataset and ran out of memory. Occam's Razor would suggest you just need > more memory. Please try bumping the heap size and report and we can get a > better idea. If it truly is a memory issue, we can investigate reductions > in the allocated memory and provide a different max heap size by default. > > -- > Kevin > > >> >> >> >> >> On Feb 2, 2010, at 6:26 AM, Bryan Lewis wrote: >> >>> Sure, but you can run the modeler with an increased heap size, like >>> >>> java.exe -Xmx512m -jar CayenneModeler.jar >>> >>> >>> >>> On Mon, Feb 1, 2010 at 11:25 PM, Joe Baldwin <jfbald...@earthlink.net >>> wrote: >>> >>>> The CayenneModeler crashed not my app. >>>> >>>> >>>> >>>> >>>> On Feb 1, 2010, at 11:07 PM, Kevin Menard wrote: >>>> >>>>> Hi Joe, >>>>> >>>>> It looks like you would have needed to increased the -Xmx JVM property. >>>> Did >>>>> you actually corrupt any data in the process? If not, I'd suggest >>>>> re-running with an increased heap value. Otherwise, please file a JIRA >>>>> issue describing the problem. >>>>> >>>>> -- >>>>> Kevin >>>>> >>>>> >>>>> On Sun, Jan 31, 2010 at 6:11 PM, Joe Baldwin <jfbald...@earthlink.net >>>>> 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) >>>>>> >>>>>> >>>>>> >>>>>> >>>> >>>> >> >>