[
https://issues.apache.org/jira/browse/ISIS-760?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dan Haywood resolved ISIS-760.
------------------------------
Resolution: Fixed
> IllegalStateException when commands/audit enabled in Estatio and failing to
> persist the Oid of a view model.
> ------------------------------------------------------------------------------------------------------------
>
> Key: ISIS-760
> URL: https://issues.apache.org/jira/browse/ISIS-760
> Project: Isis
> Issue Type: Bug
> Components: Core
> Affects Versions: core-1.4.0
> Reporter: Jeroen van der Wal
> Assignee: Dan Haywood
> Priority: Critical
> Fix For: core-1.4.2
>
>
> There are two separate issues here:
> - first is that the auditing service's column for storing OIDs isn't long
> enough for view models.
> - the second is that, given this then causes the xactn to be aborted, that it
> throws an IllegalStateException for any subsequent interaction with the
> system. The only fix is to restart the server. See details below
> The reason for the second issue is that the previous session does not close
> correctly. This is because of an exception being thrown in
> PersistenceSession#close:
> PersistenceSession.completeCommandIfConfigured() line: 418
> PersistenceSession.closeServices() line: 399
> PersistenceSession.close() line: 372
> IsisSessionDefault.close() line: 119
> IsisContextThreadLocal(IsisContext).closeSessionInstance() line: 219
> WebRequestCycleForIsis.onEndRequest(RequestCycle) line: 134
> This in turn is because of an attempt to complete any pending command (per
> the CommandJdo service) on a xactn that has already been aborted....
> private void completeCommandIfConfigured() {
> final CommandContext commandContext =
> getServiceOrNull(CommandContext.class);
> if(commandContext != null) {
> final CommandService commandService =
> getServiceOrNull(CommandService.class);
> if(commandService != null) {
> final Command command = commandContext.getCommand();
> commandService.complete(command);
> }
> }
> }
> So, when closing the session, need to take this into account. Should
> propogate exception if any arises, but still ensure that the persistence
> session is closed for next-time around.
> ~~~~~~~~~~
> to reproduce:
> with estatio demo data
> > find invoices for status new
> > choose oxford
> > approve all.
> A server restart was required.
> {code}
> java.lang.IllegalStateException
> Session already open and context not configured for autoclose
>
> org.apache.isis.core.runtime.system.context.IsisContext#applySessionClosePolicy(IsisContext.java:186)
>
> org.apache.isis.core.runtime.system.context.IsisContextThreadLocal#openSessionInstance(IsisContextThreadLocal.java:148)
>
> org.apache.isis.viewer.wicket.viewer.integration.wicket.WebRequestCycleForIsis#onBeginRequest(WebRequestCycleForIsis.java:81)
>
> org.apache.wicket.request.cycle.RequestCycleListenerCollection$1#notify(RequestCycleListenerCollection.java:65)
>
> org.apache.wicket.request.cycle.RequestCycleListenerCollection$1#notify(RequestCycleListenerCollection.java:61)
>
> org.apache.wicket.util.listener.ListenerCollection#notify(ListenerCollection.java:80)
>
> org.apache.wicket.request.cycle.RequestCycleListenerCollection#onBeginRequest(RequestCycleListenerCollection.java:60)
>
> org.apache.wicket.request.cycle.RequestCycleListenerCollection$1#notify(RequestCycleListenerCollection.java:65)
>
> org.apache.wicket.request.cycle.RequestCycleListenerCollection$1#notify(RequestCycleListenerCollection.java:61)
>
> org.apache.wicket.util.listener.ListenerCollection#notify(ListenerCollection.java:80)
>
> org.apache.wicket.request.cycle.RequestCycleListenerCollection#onBeginRequest(RequestCycleListenerCollection.java:60)
>
> org.apache.wicket.request.cycle.RequestCycle#processRequest(RequestCycle.java:213)
>
> 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.apache.catalina.core.ApplicationFilterChain#internalDoFilter(ApplicationFilterChain.java:243)
>
> org.apache.catalina.core.ApplicationFilterChain#doFilter(ApplicationFilterChain.java:210)
>
> 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.apache.catalina.core.ApplicationFilterChain#internalDoFilter(ApplicationFilterChain.java:243)
>
> org.apache.catalina.core.ApplicationFilterChain#doFilter(ApplicationFilterChain.java:210)
>
> org.apache.catalina.core.StandardWrapperValve#invoke(StandardWrapperValve.java:225)
>
> org.apache.catalina.core.StandardContextValve#invoke(StandardContextValve.java:123)
>
> org.apache.catalina.authenticator.AuthenticatorBase#invoke(AuthenticatorBase.java:472)
>
> org.apache.catalina.core.StandardHostValve#invoke(StandardHostValve.java:168)
> org.apache.catalina.valves.ErrorReportValve#invoke(ErrorReportValve.java:98)
> org.apache.catalina.valves.AccessLogValve#invoke(AccessLogValve.java:927)
> org.apache.catalina.core.StandardEngineValve#invoke(StandardEngineValve.java:118)
> org.apache.catalina.connector.CoyoteAdapter#service(CoyoteAdapter.java:407)
> org.apache.coyote.http11.AbstractHttp11Processor#process(AbstractHttp11Processor.java:1001)
>
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler#process(AbstractProtocol.java:579)
>
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor#run(JIoEndpoint.java:310)
>
> java.util.concurrent.ThreadPoolExecutor#runWorker(ThreadPoolExecutor.java:1145)
>
> java.util.concurrent.ThreadPoolExecutor$Worker#run(ThreadPoolExecutor.java:615)
> java.lang.Thread#run(Thread.java:724)
> {code}
> On the server:
> {code}
> Caused by: javax.jdo.JDOFatalUserException: Attempt to store value
> "org.estatio.dom.invoice.viewmodel.InvoiceSummaryForPropertyDueDateStatus:PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PHJlZmVyZW5jZT5DQVM8L3JlZmVyZW5jZT48ZHVlRGF0ZT4yMDE0LTAzLTMxPC9kdWVEYXRlPjxzdGF0dXM-QVBQUk9WRUQ8L3N0YXR1cz48bmV0QW1vdW50PjE3MTc1LjYwPC9uZXRBbW91bnQ-PHZhdEFtb3VudD4zNzc4LjYzPC92YXRBbW91bnQ-PGdyb3NzQW1vdW50PjIwOTU0LjIzPC9ncm9zc0Ftb3VudD48dG90YWw-MTwvdG90YWw-PC9tZW1lbnRvPg=="
> in column "target" that has maximum length of 255. Please correct your data!
> NestedThrowables:
> org.datanucleus.exceptions.NucleusUserException: Attempt to store value
> "org.estatio.dom.invoice.viewmodel.InvoiceSummaryForPropertyDueDateStatus:PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lbWVudG8-PHJlZmVyZW5jZT5DQVM8L3JlZmVyZW5jZT48ZHVlRGF0ZT4yMDE0LTAzLTMxPC9kdWVEYXRlPjxzdGF0dXM-QVBQUk9WRUQ8L3N0YXR1cz48bmV0QW1vdW50PjE3MTc1LjYwPC9uZXRBbW91bnQ-PHZhdEFtb3VudD4zNzc4LjYzPC92YXRBbW91bnQ-PGdyb3NzQW1vdW50PjIwOTU0LjIzPC9ncm9zc0Ftb3VudD48dG90YWw-MTwvdG90YWw-PC9tZW1lbnRvPg=="
> in column "target" that has maximum length of 255. Please correct your data!
> at
> org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:528)
> at
> org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:732)
> at
> org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:752)
> at
> org.apache.isis.objectstore.jdo.datanucleus.persistence.commands.DataNucleusCreateObjectCommand.execute(DataNucleusCreateObjectCommand.java:54)
> at
> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.executeCommands(DataNucleusObjectStore.java:368)
> at
> org.apache.isis.objectstore.jdo.datanucleus.DataNucleusObjectStore.execute(DataNucleusObjectStore.java:362)
> at
> org.apache.isis.core.runtime.system.transaction.IsisTransaction.doFlush(IsisTransaction.java:425)
> at
> org.apache.isis.core.runtime.system.transaction.IsisTransaction.commit(IsisTransaction.java:658)
> at
> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.endTransaction(IsisTransactionManager.java:396)
> at
> org.apache.isis.core.runtime.system.transaction.IsisTransactionManager.executeWithinTransaction(IsisTransactionManager.java:184)
> ... 52 more
> {code}
--
This message was sent by Atlassian JIRA
(v6.2#6252)