Hi James,
Thanks for posting this stack trace; I think you've uncovered an issue
actually.  To confirm, it would be useful to see the code that's being
executed, but I let me speculate anyway...

In org.apache.isis.core.runtime.system.transaction.IsisTransaction#doFlush,
we execute all queued persistence commands - these are typically gonna be
inserts - via getContainer.persist(...) - or deletes - via
getContainer().remove(...).  Looking at the code it seems that a call to a
collection.addTo or collection.removeFrom also queues up an "update"
command against the object with the collection.  (I suspect this is
redundant if using JDO objectstore, but that's a slightly different topic).

Anyway, if in the course of executing one of these commands in the doFlush
it cascades such that another persistence command is created, then we'll
get this issue.  This *could* legitimately happen if one of the persistence
callbacks, such as "saved()" or "deleted()" is used.

There was a recent issue like this on Isis' .NET "sister" framework, Naked
Objects .NET.  The solution was to keep flushing until there are no
commands left.

So, I'm going to implement something similar for Isis.  I've just created
ISIS-533 [1] to fix.  I've also created ISIS-534 [2] to investigate whether
the collection.addTo/removeFrom needs to do anything for JDO (low
priority)..

Thx
Dan

[1] https://issues.apache.org/jira/browse/ISIS-533
[2] https://issues.apache.org/jira/browse/ISIS-534



On 15 September 2013 08:27, GESCONSULTOR <[email protected]> wrote:

> Hi james.
>
> Have you used both the JDO annotations and the addToXXX / removeFromXXX
> isis eclipse templates ?
>
> The latter ones should not be used with JDO as DataNucleus automatically
> manages the relationships when doing getContainer().flush().
>
> More info here [1].
>
> If that's not the case, can you paste on the mail the code defining the
> relationship?
>
>
> [1]
> http://isis.apache.org/components/objectstores/jdo/managed-1-to-m-relationships.html
>
>
>
> El 14/09/2013, a las 21:16, james agada <[email protected]> escribió:
>
> >   - java.util.ConcurrentModificationException
> >   -
> >   -
> >
> java.util.AbstractList$Itr#checkForComodification(AbstractList.java:372)
> >   - java.util.AbstractList$Itr#next(AbstractList.java:343)
> >   -
> >
> java.util.Collections$UnmodifiableCollection$1#next(Collections.java:1008)
> >   -
> >
> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore#executeCommands(DataNucleusObjectStore.java:360)
> >   -
> >
> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore#execute(DataNucleusObjectStore.java:355)
> >   -
> >
> org.apache.isis.core.runtime.system.transaction.IsisTransaction#doFlush(IsisTransaction.java:365)
> >   -
> >
> org.apache.isis.core.runtime.system.transaction.IsisTransaction#flush(IsisTransaction.java:331)
> >   -
> >
> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager#flushTransaction(IsisTransactionManager.java:298)
> >   -
> >
> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionOnTargetAndProcessResults(ActionPanel.java:181)
> >   -
> >
> org.apache.isis.viewer.wicket.ui.components.actions.ActionPanel#executeActionAndProcessResults(ActionPanel.java:137)
> >   -
> >
> org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersFormPanel$ActionParameterForm$1#onSubmit(ActionParametersFormPanel.java:126)
> >   -
> org.apache.wicket.markup.html.form.Form#delegateSubmit(Form.java:1253)
> >   - org.apache.wicket.markup.html.form.Form#process(Form.java:925)
> >   -
> org.apache.wicket.markup.html.form.Form#onFormSubmitted(Form.java:771)
> >   -
> org.apache.wicket.markup.html.form.Form#onFormSubmitted(Form.java:704)
> >   -
> >
> sun.reflect.NativeMethodAccessorImpl#invoke0(NativeMethodAccessorImpl.java:-2)
> >   -
> >
> sun.reflect.NativeMethodAccessorImpl#invoke(NativeMethodAccessorImpl.java:39)
> >   -
> >
> sun.reflect.DelegatingMethodAccessorImpl#invoke(DelegatingMethodAccessorImpl.java:25)
> >   - java.lang.reflect.Method#invoke(Method.java:597)
> >   -
> >
> org.apache.wicket.RequestListenerInterface#internalInvoke(RequestListenerInterface.java:258)
> >   -
> >
> org.apache.wicket.RequestListenerInterface#invoke(RequestListenerInterface.java:216)
> >   -
> >
> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#invokeListener(ListenerInterfaceRequestHandler.java:240)
> >   -
> >
> org.apache.wicket.core.request.handler.ListenerInterfaceRequestHandler#respond(ListenerInterfaceRequestHandler.java:226)
> >   -
> >
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor#respond(RequestCycle.java:861)
> >   -
> >
> org.apache.wicket.request.RequestHandlerStack#execute(RequestHandlerStack.java:64)
> >   -
> >
> org.apache.wicket.request.cycle.RequestCycle#execute(RequestCycle.java:261)
> >   -
> >
> org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:218)
> >   -
> >
> org.apache.wicket.request.cycle.RequestCycle#processRequestAndDetach(RequestCycle.java:289)
> >   -
> >
> org.apache.wicket.protocol.http.WicketFilter#processRequestCycle(WicketFilter.java:259)
> >   -
> >
> org.apache.wicket.protocol.http.WicketFilter#processRequest(WicketFilter.java:201)
> >   -
> >
> org.apache.wicket.protocol.http.WicketFilter#doFilter(WicketFilter.java:282)
> >   -
> >
> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326)
> >   -
> >
> org.apache.shiro.web.servlet.AbstractShiroFilter#executeChain(AbstractShiroFilter.java:449)
> >   -
> >
> org.apache.shiro.web.servlet.AbstractShiroFilter$1#call(AbstractShiroFilter.java:365)
> >   -
> >
> org.apache.shiro.subject.support.SubjectCallable#doCall(SubjectCallable.java:90)
> >   -
> >
> org.apache.shiro.subject.support.SubjectCallable#call(SubjectCallable.java:83)
> >   -
> >
> org.apache.shiro.subject.support.DelegatingSubject#execute(DelegatingSubject.java:383)
> >   -
> >
> org.apache.shiro.web.servlet.AbstractShiroFilter#doFilterInternal(AbstractShiroFilter.java:362)
> >   -
> >
> org.apache.shiro.web.servlet.OncePerRequestFilter#doFilter(OncePerRequestFilter.java:125)
> >   -
> >
> org.eclipse.jetty.servlet.ServletHandler$CachedChain#doFilter(ServletHandler.java:1326)
> >   -
> >
> org.eclipse.jetty.servlet.ServletHandler#doHandle(ServletHandler.java:479)
> >   -
> >
> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:119)
> >   -
> >
> org.eclipse.jetty.security.SecurityHandler#handle(SecurityHandler.java:520)
> >   -
> >
> org.eclipse.jetty.server.session.SessionHandler#doHandle(SessionHandler.java:227)
> >   -
> >
> org.eclipse.jetty.server.handler.ContextHandler#doHandle(ContextHandler.java:940)
> >   -
> >
> org.eclipse.jetty.servlet.ServletHandler#doScope(ServletHandler.java:409)
> >   -
> >
> org.eclipse.jetty.server.session.SessionHandler#doScope(SessionHandler.java:186)
> >   -
> >
> org.eclipse.jetty.server.handler.ContextHandler#doScope(ContextHandler.java:874)
> >   -
> >
> org.eclipse.jetty.server.handler.ScopedHandler#handle(ScopedHandler.java:117)
> >   -
> >
> org.eclipse.jetty.server.handler.ContextHandlerCollection#handle(ContextHandlerCollection.java:250)
> >   -
> >
> org.eclipse.jetty.server.handler.HandlerCollection#handle(HandlerCollection.java:149)
> >   -
> >
> org.eclipse.jetty.server.handler.HandlerWrapper#handle(HandlerWrapper.java:110)
> >   - org.eclipse.jetty.server.Server#handle(Server.java:349)
> >   -
> >
> org.eclipse.jetty.server.HttpConnection#handleRequest(HttpConnection.java:441)
> >   -
> >
> org.eclipse.jetty.server.HttpConnection$RequestHandler#content(HttpConnection.java:921)
> >   - org.eclipse.jetty.http.HttpParser#parseNext(HttpParser.java:784)
> >   - org.eclipse.jetty.http.HttpParser#parseAvailable(HttpParser.java:223)
> >   -
> >
> org.eclipse.jetty.server.AsyncHttpConnection#handle(AsyncHttpConnection.java:46)
> >   -
> >
> org.eclipse.jetty.io.nio.SelectChannelEndPoint#handle(SelectChannelEndPoint.java:545)
> >   -
> >
> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1#run(SelectChannelEndPoint.java:43)
> >   -
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool#runJob(QueuedThreadPool.java:598)
> >   -
> >
> org.eclipse.jetty.util.thread.QueuedThreadPool$3#run(QueuedThreadPool.java:533)
> >   - java.lang.Thread#run(Thread.java:680)
> >
> > POWERED BY: APACHE ISIS <http://isis.apache.org/>
>

Reply via email to