Dears,
I have some automated processing which performs twice update of a card during one transaction. The reason is to log two changes (two steps of some processing made out of CMDBuild and reported by one WS call to CMDBuild) into the card history.
The result is that I have following rows in for one card:
(SELECT "Id", "BeginDate", NULL AS "EndDate" FROM "Asset" WHERE "Id" = 100316173
UNION
SELECT "Id", "BeginDate", "EndDate" FROM "Asset_history" WHERE "CurrentId" = 100316173)
ORDER BY "BeginDate" DESC, "EndDate" DESC, "Id" DESC;
Id | BeginDate | EndDate
-----------+----------------------------+----------------------------
100316173 | 2016-09-12 15:08:24.569755 |
102981049 | 2016-09-12 15:08:24.569755 | 2016-09-12 15:08:24.569755
102981046 | 2016-07-16 01:32:59.9333 | 2016-09-12 15:08:24.569755
100820717 | 2016-07-16 01:31:49.828393 | 2016-07-16 01:32:59.9333
100819387 | 2016-07-01 10:53:02.715633 | 2016-07-16 01:31:49.828393
100325055 | 2016-07-01 10:51:47.541019 | 2016-07-01 10:53:02.715633
100324134 | 2016-07-01 10:50:07.833976 | 2016-07-01 10:51:47.541019
It means I have two rows with identical BeginDates (actual and the first in the history).
The history card view in CMDBuild presents these rows in bad order:
1.) The history row with Id = 102981049
2.) The actual row with Id = 100316173
3.) The history row with Id = 102981046
4.) Other rows are in good order.
When I want to view the detail of the first history row the next error appears:
Call: services/json/management/modcard/gethistoriccard ------------------------------------------------------- Error: org.cmdbuild.exception.NotFoundException: CARD_NOTFOUND Asset HISTORY at org.cmdbuild.exception.NotFoundException$NotFoundExceptionType.createException(NotFoundException.java:20) at org.cmdbuild.logic.data.access.DefaultDataAccessLogic.fetchCMCard(DefaultDataAccessLogic.java:427) at org.cmdbuild.logic.data.access.DefaultDataAccessLogic.fetchHistoricCard(DefaultDataAccessLogic.java:236) at org.cmdbuild.servlets.json.management.ModCard.getHistoricCard(ModCard.java:595) at sun.reflect.GeneratedMethodAccessor507.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.cmdbuild.servlets.JSONDispatcher.dispatch(JSONDispatcher.java:107) at org.cmdbuild.servlets.JSONDispatcher.doPost(JSONDispatcher.java:67) at javax.servlet.http.HttpServlet.service(HttpServlet.java:648) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.cmdbuild.filters.AuthFilter.doFilter(AuthFilter.java:158) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.cmdbuild.filters.PatchManagerFilter.doFilter(PatchManagerFilter.java:48) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.cmdbuild.filters.ConfCheckFilter.doFilter(ConfCheckFilter.java:31) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.cmdbuild.filters.TranslationFilter.doFilter(TranslationFilter.java:52) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.cmdbuild.filters.LocalizationFilter.doFilter(LocalizationFilter.java:127) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
I have tried to insert sleep for 1 second between the two updates, but it has no effect, it seems the times are set into rows at the end of the transaction.
When I make another update (for example manually) in later time, everything is OK.
So, it seems to me as a bug in CMDBuild: not able to solve the begin time duplicity between actual and last historical row properly.
Best regards,
Jiří