[ https://issues.apache.org/jira/browse/ISIS-760?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dan Haywood updated ISIS-760: ----------------------------- Component/s: Core > 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)