Re: BUG: Cayenne Modeler

From: Andrus Adamchik (andru..bjectstyle.org)
Date: Tue Feb 02 2010 - 09:28:47 EST

  • Next message: Kevin Menard: "Re: BUG: Cayenne Modeler"

    Hi Joe,

    (Disclaimer: I also haven't looked at the code involved yet).

    An OutOfMemoryError can be associated with many kinds of conditions.
    You can have an infinite loop not causing an OutOfMemory. And also
    OutOfMemoryError is by itself often causing a UI freeze, as the JVM
    tries to free up some memory before the full app crash. So don't jump
    to conclusions just yet.

    > Increasing the available memory to an app does nothing to analyze
    > the problem.

    Have you tried it though? After all there is some minimal amount of
    heap space required for the Modeler to run, even when it is bug free
    (which I am not claiming it is).

    If that doesn't help, could you provide this info please (sorry if I
    missed it and it was mentioned already) :

    * Which version of the Modeler are you using?
    * Are you using a platform-specific build provided by Cayenne, or are
    you running it yourself with java?

    Andrus

    On Feb 2, 2010, at 4:09 PM, Joe Baldwin 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.
    >
    > 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.
    >
    > 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.
    >
    > 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.
    >
    >
    >
    >
    > 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 - 09:29:23 EST