Bug #11449
ferméCréation d'une actualité: données instables si un problème d'upload de l'image survient
100%
Description
Si pour une raison quelconque, l'upload de la vignette ou de l'image dans le contenu se passe mal,
l'actualité est quand même créee en base de données, mais sans son équivalent en publication.
Cela provoque une erreur sur la page d'accueil qui utilise cette application.
Il serait souhaitable de blinder l'opération dans sa totalité.
Mis à jour par Yohann Chastagnier il y a plus de 4 ans
- Statut changé de New à Assigned
- Assigné à mis à Yohann Chastagnier
- Version cible mis à Version 6.1
Mis à jour par Yohann Chastagnier il y a plus de 4 ans
- Statut changé de Assigned à In progress...
Mis à jour par Yohann Chastagnier il y a plus de 4 ans
- Statut changé de In progress... à Feedback
Je n'arrive pas à reproduire le problème tel qu'il est décrit.
Et j'ai par conséquent beaucoup de mal à apporter de la robustesse à ce niveau.
Les erreurs qui ont été remontées dans les différentes notes du REDMINE lié ne correspondent pas à l'erreur réelle.
Elles sont une conséquence d'un mauvais comportement de la popup d'erreur qui relance sans cesse la requête qui a engendré l'erreur mais avec des données tronquées. De part ce comportement nous avons alors ici un problème de récursion pour lequel je vais essayer d'apporter une correction.
Autrement selon mon analyse, les erreurs suivantes sont celles initiales :
2020-03-25 16:03:58,214 SEVERE [silverpeas.core.contribution.publication.dao] (default task-672) ERROR: null value in column "pubname" violates not-null constraint Detail: Failing row contains (55222, 0, null, null, 2020/03/25, 0000/00/00, 9999/99/99, 79, 0, null, null, null, Draft, 2020/03/25, quickinfo2149, 79, null, null, 00:00, 23:59, null, null, -1, null, null, null).: org.postgresql.util.PSQLException: ERROR: null value in column "pubname" violates not-null constraint Detail: Failing row contains (55222, 0, null, null, 2020/03/25, 0000/00/00, 9999/99/99, 79, 0, null, null, null, Draft, 2020/03/25, quickinfo2149, 79, null, null, 00:00, 23:59, null, null, -1, null, null, null). at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2477) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2190) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:300) at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428) at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354) at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:169) at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:136) at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:537) at org.silverpeas.core.contribution.publication.dao.PublicationDAO.insertRow(PublicationDAO.java:332) at org.silverpeas.core.contribution.publication.service.DefaultPublicationService.createPublication(DefaultPublicationService.java:176) at org.silverpeas.core.tagcloud.service.TagCloudPublicationService.createPublication(TagCloudPublicationService.java:75) at org.silverpeas.core.tagcloud.service.TagCloudPublicationService$Proxy$_$$_WeldSubclass.createPublication$$super(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:51) at org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:78) at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:174) at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:53) at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:88) at com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:47) at sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:73) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68) at org.silverpeas.core.tagcloud.service.TagCloudPublicationService$Proxy$_$$_WeldSubclass.createPublication(Unknown Source) at org.silverpeas.components.quickinfo.model.DefaultQuickInfoService.create(DefaultQuickInfoService.java:174) at org.silverpeas.components.quickinfo.control.QuickInfoSessionController.create(QuickInfoSessionController.java:179) at org.silverpeas.components.quickinfo.servlets.QuickInfoRequestRouter.saveQuickInfo(QuickInfoRequestRouter.java:217) at org.silverpeas.components.quickinfo.servlets.QuickInfoRequestRouter.getDestination(QuickInfoRequestRouter.java:102) at org.silverpeas.components.quickinfo.servlets.QuickInfoRequestRouter.getDestination(QuickInfoRequestRouter.java:49) at org.silverpeas.core.web.mvc.route.ComponentRequestRouter.computeNextDestination(ComponentRequestRouter.java:257) at org.silverpeas.core.web.mvc.route.ComponentRequestRouter.computeDestination(ComponentRequestRouter.java:222) at org.silverpeas.core.web.mvc.route.ComponentRequestRouter.doPost(ComponentRequestRouter.java:154) at javax.servlet.http.HttpServlet.service(HttpServlet.java:523) at org.silverpeas.core.web.mvc.webcomponent.SilverpeasHttpServlet.service(SilverpeasHttpServlet.java:58) at org.silverpeas.core.web.mvc.webcomponent.SilverpeasAuthenticatedHttpServlet.service(SilverpeasAuthenticatedHttpServlet.java:79) at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) at io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:52) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.components.whitepages.filters.ComponentRequestRouterFilter.doFilter(ComponentRequestRouterFilter.java:71) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.bridge.MobilFilter.doFilter(MobilFilter.java:82) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.core.web.filter.MassiveWebSecurityFilter.doFilter(MassiveWebSecurityFilter.java:131) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.core.web.filter.WebCORSFilter.doFilter(WebCORSFilter.java:81) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.InternetExplorerAntiCompatibilityFilter.doFilter(InternetExplorerAntiCompatibilityFilter.java:50) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.token.SessionSynchronizerTokenValidator.doFilter(SessionSynchronizerTokenValidator.java:104) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.core.web.filter.MessageFilter.doFilter(MessageFilter.java:73) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.SilverpeasExceptionLoggingFilter.doFilter(SilverpeasExceptionLoggingFilter.java:49) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.ResourceCacheFilter.doFilter(ResourceCacheFilter.java:55) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.HttpServletRequestDecoration.doFilter(HttpServletRequestDecoration.java:59) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.lang.Thread.run(Thread.java:748) 2020-03-25 16:03:58,237 SEVERE [silverpeas.core.process.annotation] (default task-672) Error in intercepted method: moveAllDocuments: java.lang.IllegalArgumentException: Cannot create QValue from null value. at org.apache.jackrabbit.spi.commons.value.AbstractQValueFactory.create(AbstractQValueFactory.java:78) at org.apache.jackrabbit.spi.commons.value.ValueFactoryQImpl.createValue(ValueFactoryQImpl.java:94) at org.silverpeas.core.contribution.attachment.repository.DocumentRepository.selectDocumentsByForeignId(DocumentRepository.java:789) at org.silverpeas.core.contribution.attachment.repository.DocumentRepository.listAllDocumentsByForeignId(DocumentRepository.java:639) at org.silverpeas.core.contribution.attachment.SimpleDocumentService.listAllDocumentsByForeignKey(SimpleDocumentService.java:370) at org.silverpeas.core.contribution.attachment.SimpleDocumentService$Proxy$_$$_WeldSubclass.listAllDocumentsByForeignKey(Unknown Source) at org.silverpeas.core.contribution.attachment.SimpleDocumentService.moveAllDocuments(SimpleDocumentService.java:931) at org.silverpeas.core.contribution.attachment.SimpleDocumentService$Proxy$_$$_WeldSubclass.moveAllDocuments$$super(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.weld.interceptor.proxy.TerminalAroundInvokeInvocationContext.proceedInternal(TerminalAroundInvokeInvocationContext.java:51) at org.jboss.weld.interceptor.proxy.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:78) at org.silverpeas.core.process.annotation.SimulationActionProcessAnnotationInterceptor.proceed(SimulationActionProcessAnnotationInterceptor.java:194) at org.silverpeas.core.process.annotation.SimulationActionProcessAnnotationInterceptor.perform(SimulationActionProcessAnnotationInterceptor.java:145) at org.silverpeas.core.process.annotation.SimulationActionProcessAnnotationInterceptor.intercept(SimulationActionProcessAnnotationInterceptor.java:75) at sun.reflect.GeneratedMethodAccessor1016.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.jboss.weld.interceptor.reader.SimpleInterceptorInvocation$SimpleMethodInvocation.invoke(SimpleInterceptorInvocation.java:73) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeAroundInvoke(InterceptorMethodHandler.java:84) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.executeInterception(InterceptorMethodHandler.java:72) at org.jboss.weld.interceptor.proxy.InterceptorMethodHandler.invoke(InterceptorMethodHandler.java:56) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:79) at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:68) at org.silverpeas.core.contribution.attachment.SimpleDocumentService$Proxy$_$$_WeldSubclass.moveAllDocuments(Unknown Source) at org.silverpeas.components.quickinfo.model.DefaultQuickInfoService.create(DefaultQuickInfoService.java:186) at org.silverpeas.components.quickinfo.control.QuickInfoSessionController.create(QuickInfoSessionController.java:179) at org.silverpeas.components.quickinfo.servlets.QuickInfoRequestRouter.saveQuickInfo(QuickInfoRequestRouter.java:217) at org.silverpeas.components.quickinfo.servlets.QuickInfoRequestRouter.getDestination(QuickInfoRequestRouter.java:102) at org.silverpeas.components.quickinfo.servlets.QuickInfoRequestRouter.getDestination(QuickInfoRequestRouter.java:49) at org.silverpeas.core.web.mvc.route.ComponentRequestRouter.computeNextDestination(ComponentRequestRouter.java:257) at org.silverpeas.core.web.mvc.route.ComponentRequestRouter.computeDestination(ComponentRequestRouter.java:222) at org.silverpeas.core.web.mvc.route.ComponentRequestRouter.doPost(ComponentRequestRouter.java:154) at javax.servlet.http.HttpServlet.service(HttpServlet.java:523) at org.silverpeas.core.web.mvc.webcomponent.SilverpeasHttpServlet.service(SilverpeasHttpServlet.java:58) at org.silverpeas.core.web.mvc.webcomponent.SilverpeasAuthenticatedHttpServlet.service(SilverpeasAuthenticatedHttpServlet.java:79) at javax.servlet.http.HttpServlet.service(HttpServlet.java:590) at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129) at io.opentracing.contrib.jaxrs2.server.SpanFinishingFilter.doFilter(SpanFinishingFilter.java:52) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.components.whitepages.filters.ComponentRequestRouterFilter.doFilter(ComponentRequestRouterFilter.java:71) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.bridge.MobilFilter.doFilter(MobilFilter.java:82) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.core.web.filter.MassiveWebSecurityFilter.doFilter(MassiveWebSecurityFilter.java:131) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.core.web.filter.WebCORSFilter.doFilter(WebCORSFilter.java:81) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.InternetExplorerAntiCompatibilityFilter.doFilter(InternetExplorerAntiCompatibilityFilter.java:50) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.token.SessionSynchronizerTokenValidator.doFilter(SessionSynchronizerTokenValidator.java:104) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.core.web.filter.MessageFilter.doFilter(MessageFilter.java:73) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.SilverpeasExceptionLoggingFilter.doFilter(SilverpeasExceptionLoggingFilter.java:49) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.ResourceCacheFilter.doFilter(ResourceCacheFilter.java:55) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.silverpeas.web.filter.HttpServletRequestDecoration.doFilter(HttpServletRequestDecoration.java:59) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132) at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53) at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) at io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59) at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50) at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68) at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269) at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133) at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1504) at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249) at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78) at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99) at io.undertow.server.Connectors.executeRootHandler(Connectors.java:376) at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1982) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.lang.Thread.run(Thread.java:748)Dans l'extrait ci-dessus, nous avons 2 erreurs qui s'enchaînent pour le même thread (donc par le même utilisateur) :
2020-03-25 16:03:58,214 SEVERE [silverpeas.core.contribution.publication.dao] (default task-672) ERROR: null value in column "pubname" violates not-null constraint
2020-03-25 16:03:58,237 SEVERE [silverpeas.core.process.annotation] (default task-672) Error in intercepted method: moveAllDocuments: java.lang.IllegalArgumentException: Cannot create QValue from null value.
Ces 2 erreurs sont générées depuis la même méthode DefaultQuickInfoService.create
, la première depuis l'appel getPublicationService().createPublication(publication)
et la seconde depuis l'appel AttachmentServiceProvider.getAttachmentService().moveAllDocuments(volatileAttachmentSourcePK, savedNews.getPublication().getPK().toResourceReference())
.
Entre ces 2 appels, le bloc suivant est exécuté :
News savedNews = performInOne(() -> {
news.setId(null);
news.setPublicationId(pubPK.getId());
news.createdBy(publication.getCreatorId());
return newsRepository.save(news);
});
Ce bloc correspond à l'enregistrement des éléments généraux de la news dans la table
sc_quickinfo_news
alors que DefaultQuickInfoService.create
correspond à l'enregistrement des métadonnées (titre, description par exemple) dans la table des publications.
Ce que montre l'enchaînement des erreurs dans les logs :
- l'enregistrement des métadonnées dans les publications est demandé, mais comme il manque des données (sûrement à cause des problématiques VPN) une erreur SQL est générée. Cette erreur générée est prise en charge pour être inscrite dans le fichier de log sans empêcher le traitement de continuer son exécution. IMPORTANT, même si une erreur survient, un identifiant de publication a bien été enregistré et renseigné dans les objets manipulés pour l'actualité
- du coup, l'enregistrement de la news est effectué (
newsRepository.save(news)
) avec l'id de la publication qui au final n'a pas été persistée. Les données sont néanmoins enregistrées sans erreur dans la tablesb_quickinfo_news
- un traitement de mouvement des fichiers joints est effectué (car ils étaient liés avant l'opération d'enregistrement de la news à une ressource volatile) pour les lier à la nouvelle publication créée. Ici, une erreur technique survient surement parce que la publication à laquelle ils devraient être liés n'existe en réalité pas. L'erreur qui survient est inscrites dans les logs, mais contrairement au point 1, cette dernière empêche le déroulement de la suite du traitement (l'envoi des notifications par exemple)
- une erreur dans une popup est affichée à l'utilisateur et cette dernière a un comportement bizarre à cause de la récursion que j'ai indiqué en début de cette note
L'état des données est alors le suivant : une news est enregistrée dans la table sb_quickinfo_news
et cette dernière est liée à une publication qui n'existe pas. Cette publication qui n'existe pas pour la news engendre le NullPointerException
détecté dans les traces sur l'affichage de la page d'accueil (ou l'affichage de la page d'accueil de l'instance de l'application Actualité).
Je me demande quelles actions exactes ont été réalisées pour faire en sorte que l'erreur ne survienne plus ? Selon moi, il faudrait supprimer une entrée dans la table sb_quickinfo_news
et pas dans la table des publications.
Cela étant dit, mon plus gros problème est que je n'arrive pas à reproduire l'enchaînement des erreurs qui ont été inscrites dans le fichier de log du client dans mon environnement de développement.
En simulant le fait qu'aucune information n'est renseignée pour le titre (pour obtenir l'erreur ERROR: null value in column "pubname" violates not-null constraint
) lors du point 1, le traitement s'arrête en indiquant dans le fichier l'erreur 2020-04-10 15:19:43,474 SEVERE [silverpeas.silvertrace.util] (default task-80) util.MSG_EXCEPTION_NOT_EMBEDED. : org.silverpeas.core.contribution.publication.model.PublicationRuntimeException: org.silverpeas.core.contribution.publication.model.PublicationRuntimeException: org.postgresql.util.PSQLException: ERREUR: la transaction est annulée, les commandes sont ignorées jusqu'à la fin du bloc
de la transaction
Nous avons la une différence de comportement assez importante . Dans mon environnement, l'erreur due à la contrainte d'intégrité génère une erreur qui est certes gérées (catchée et seulement inscrites dans les logs pour être plus clair pour les techniciens) mais qui marque la transaction courante avec la base de données comme non valide, ce qui empêche finalement la suite du traitement de se dérouler. Alors que chez le client, la transaction ne semble pas être marquée comme non valide, ce qui laisse alors le traitement se dérouler et les points 2, 3 et 4 s'enchaînent comme indiqué plus haut.
- la date et l'heure précises à laquelle l'erreur est survenue pour l'utilisateur
- les logs qui correspondent à ce moment
- un aperçu des dernières données enregistrées dans la table
sb_quickinfo_news
, avant intervention sur les données - un aperçu des dernières données enregistrées dans la table
sb_publication_publi
, avant intervention sur les données
Aussi quelle est la version de la base de données ?
Mis à jour par David Lesimple il y a plus de 4 ans
Yohann Chastagnier a écrit (#note-5):
Je me demande quelles actions exactes ont été réalisées pour faire en sorte que l'erreur ne survienne plus ?
Pour que l'erreur disparaisse, j'ai du supprimer l'actu directement dans la table sb_quickinfo_news.
Selon moi, il faudrait supprimer une entrée dans la table
sb_quickinfo_news
et pas dans la table des publications.
C'est ça.
Serait-il possible d'avoir plus d'éléments concernant l'erreur lorsqu'elle est détectée :
- la date et l'heure précises à laquelle l'erreur est survenue pour l'utilisateur
- les logs qui correspondent à ce moment
- un aperçu des dernières données enregistrées dans la table
sb_quickinfo_news
, avant intervention sur les données- un aperçu des dernières données enregistrées dans la table
sb_publication_publi
, avant intervention sur les donnéesAussi quelle est la version de la base de données ?
on peut faire reproduire le pb sur l'intranet de test, par un des utilisateurs qui arrivent à la reproduire systématiquement.
Mis à jour par David Lesimple il y a plus de 4 ans
Yohann Chastagnier a écrit (#note-5):
Serait-il possible d'avoir plus d'éléments concernant l'erreur lorsqu'elle est détectée :
- la date et l'heure précises à laquelle l'erreur est survenue pour l'utilisateur
- les logs qui correspondent à ce moment
Tu trouveras dans le ticket client d'origine les logs.
https://tracker.silverpeas.org/issues/11447
Mis à jour par Yohann Chastagnier il y a plus de 2 ans
- Statut changé de Feedback à Closed
- Version cible mis à Version 6.3
- % réalisé changé de 0 à 100
Des modifications ont été apportées au service QuickInfo pour améliorer l'isolation des transactions.
Commit : https://github.com/Silverpeas/Silverpeas-Components/commit/bf6eae001acfea9371ff9f16f9da7d983f9233dc