Re: BUG: Cayenne Modeler

From: Mike Kienenberger (mkienen..mail.com)
Date: Tue Feb 02 2010 - 10:22:08 EST

  • Next message: Andrus Adamchik: "Re: BUG: Cayenne Modeler"

    Hi Joe,

    You need a foreign key in your database table.
    You need a foreign key attribute in your DbEntity. You also need a
    DbRelationship.
    You do not need a foreign key attribute in your ObjEntity -- you only
    need the (Obj)relationship.

    If any of the above terms are unclear, let me know, and I'll try to
    explain it more in depth.

    On Tue, Feb 2, 2010 at 10:18 AM, Joe Baldwin <jfbaldwi..arthlink.net> wrote:
    > 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:22:59 EST