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 <jfbaldwi..arthlink.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 <jfbaldwi..arthlink.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 <jfbaldwi..arthlink.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)
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>
>>>>
>>
>>
This archive was generated by hypermail 2.0.0 : Tue Feb 02 2010 - 10:19:30 EST