Re: BUG: Cayenne Modeler

From: Joe Baldwin (jfbaldwi..arthlink.net)
Date: Tue Feb 02 2010 - 10:18:49 EST

  • Next message: Mike Kienenberger: "Re: BUG: Cayenne Modeler"

    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