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)
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to