Erreur lors d'exports

Tags: #<Tag:0x00007f9e509edbd0>

Bonjour,

J’ai une erreur lors de la tentative d’export d’un objet. Hier je ne parvenais pas à exporter un module. Lors du clic sur “export XML” depuis le menu du module, une modale d’erreur s’affichait sans message d’erreur, et rien dans les logs simplicité ni dans les logs tomcat.

J’ai retenté ce matin, et maintenant la modale d’erreur m’indique une erreur 405 avec dans les logs, suivi d’un plantage de l’instance, avec dans les logs tomcat :

17-Jul-2020 12:12:29.610 GRAVE [http-nio-10588-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke "Servlet.service()" pour la servlet [JSONUI] a généré une exception
	java.lang.IllegalStateException: La terminaison distante est dans l'état [TEXT_FULL_WRITING] ce qui est invalide pour la méthode appelée
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234)
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:1196)
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:190)
		at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
		at com.simplicite.webapp.websockets.Events.pushLog(Events.java:165)
		at com.simplicite.util.AppLog.warning(AppLog.java:512)
		at com.simplicite.util.AppLog.log(AppLog.java:234)
		at com.simplicite.util.AppLog.log(AppLog.java:192)
		at com.simplicite.util.AppLog.warning(AppLog.java:500)
		at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:102)
		at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
		at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
		at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
		at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
		at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:137)
		at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
		at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
		at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
		at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:188)
		at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
		at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
		at com.simplicite.tomcat.valves.APISessionValve.invoke(APISessionValve.java:191)
		at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
		at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
		at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690)
		at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
		at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
		at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
		at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
		at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
		at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
		at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
		at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
		at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
		at java.base/java.lang.Thread.run(Thread.java:834)

Et en essayant d’exporter un simple objet métier

17-Jul-2020 11:53:49.381 GRAVE [http-nio-10588-exec-9] org.apache.tomcat.websocket.pojo.PojoEndpointBase.onClose Echec lors de l'appel de la méthode onClose du point de terminaison POJO de type [com.simplicite.webapp.websockets.ui.Events]
	java.lang.reflect.InvocationTargetException
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.base/java.lang.reflect.Method.invoke(Method.java:566)
		at org.apache.tomcat.websocket.pojo.PojoEndpointBase.onClose(PojoEndpointBase.java:103)
		at org.apache.tomcat.websocket.WsSession.fireEndpointOnClose(WsSession.java:555)
		at org.apache.tomcat.websocket.WsSession.onClose(WsSession.java:533)
		at org.apache.tomcat.websocket.WsFrameBase.processDataControl(WsFrameBase.java:354)
		at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:296)
		at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133)
		at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:82)
		at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
		at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
		at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
		at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
		at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59)
		at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
		at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
		at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
		at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
		at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
		at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
		at java.base/java.lang.Thread.run(Thread.java:834)
	Caused by: java.lang.IllegalStateException: Le message ne sera pas envoyé parce que la session WebSocket a été fermée
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:430)
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
		at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:191)
		at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
		at com.simplicite.webapp.websockets.Events.pushLog(Events.java:165)
		at com.simplicite.util.AppLog.debug(AppLog.java:426)
		at com.simplicite.util.AppLog.log(AppLog.java:239)
		at com.simplicite.util.AppLog.log(AppLog.java:192)
		at com.simplicite.util.AppLog.log(AppLog.java:349)
		at com.simplicite.webapp.websockets.AbstractWebsocket.log(AbstractWebsocket.java:294)
		at com.simplicite.webapp.websockets.AbstractWebsocket.onClose(AbstractWebsocket.java:107)
		at com.simplicite.webapp.websockets.AbstractWebsocket.onCloseHandler(AbstractWebsocket.java:265)
		at com.simplicite.webapp.websockets.ui.Events.onCloseHandler(Events.java:62)
		... 23 more

Nous sommes en :

Simplicité version4.0 patch level P24Built on2020-07-16 19:40 (revision ee89b080e219c314646ed33fd32176e343134ee5)Database levelP24;0e0999a29ee539ebb6b0e22fb7b4a171

C’est semble-t-il uniquement sur ce module. Auriez-vous une piste de résolution ?

Merci d’avance,

Guillaume

Le code HTTP 405 n’est pas généré applicativement par Simplicité.

Je pense que c’est plutôt l’infrastructure (Tomcat, un revesre proxy, …) qui coupe un stream à un moment ou à un autre car le volume de données dépasse des limites définies.

Qu’est ce qui caractérise ce module ? Est-il très volumineux ?

L’archive de sauvegarde de l’appli fait 6Mo, ce qui ne me semble pas excessif (nous en avons de plus grosses). Nous avons 46 objets métiers par contre.

J’ai récupéré la sauvegarde sur l’espace disque et je l’ai redéployée sur une instance de tests, et le problème et identique à celui d’hier (modale d’erreur sans message) sur cette nouvelle instance

Je vois dans les logs de cette instance :

17-Jul-2020 14:09:40.934 GRAVE [http-nio-10218-exec-6] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() du Servlet [ExternalObject] dans le contexte au chemin [/recherche] a retourné une exception [L'exécution de la servlet a lancé une exception] avec la cause
	java.lang.StackOverflowError
		at java.base/java.util.IdentityHashMap.isEmpty(IdentityHashMap.java:288)
		at java.base/java.util.Collections$SetFromMap.<init>(Collections.java:5555)
		at java.base/java.util.Collections.newSetFromMap(Collections.java:5542)
		at java.base/java.lang.Throwable.printStackTrace(Throwable.java:664)
		at java.base/java.lang.Throwable.printStackTrace(Throwable.java:735)
		at org.apache.log4j.DefaultThrowableRenderer.render(DefaultThrowableRenderer.java:60)
		at org.apache.log4j.spi.ThrowableInformation.getThrowableStrRep(ThrowableInformation.java:87)
		at org.apache.log4j.spi.LoggingEvent.getThrowableStrRep(LoggingEvent.java:413)
		at org.apache.log4j.WriterAppender.subAppend(WriterAppender.java:313)
		at org.apache.log4j.DailyRollingFileAppender.subAppend(DailyRollingFileAppender.java:369)
		at org.apache.log4j.WriterAppender.append(WriterAppender.java:162)
		at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:251)
		at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:66)
		at org.apache.log4j.Category.callAppenders(Category.java:206)
		at org.apache.log4j.Category.forcedLog(Category.java:391)
		at org.apache.log4j.Category.error(Category.java:322)
		at com.simplicite.util.AppLog.error(AppLog.java:553)
		at com.simplicite.util.AppLog.log(AppLog.java:232)
		at com.simplicite.util.AppLog.log(AppLog.java:192)
		at com.simplicite.util.AppLog.log(AppLog.java:349)
		at com.simplicite.util.engine.DBAccess.query(DBAccess.java:936)
		at com.simplicite.util.engine.DBAccess.query(DBAccess.java:680)
		at com.simplicite.util.engine.DBAccess.simpleQuery(DBAccess.java:1026)
		at com.simplicite.util.GrantDirect.simpleQuery(GrantDirect.java:100)
		at com.simplicite.util.Grant.simpleQuery(Grant.java:871)
		at com.simplicite.util.Grant.simpleQuery(Grant.java:837)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)
		at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)

mais également dans la foulée :

Exception in thread "SimpliciteCronThread" java.lang.IllegalStateException: La terminaison distante est dans l'état [TEXT_FULL_WRITING] ce qui est invalide pour la méthode appelée
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1234)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.textStart(WsRemoteEndpointImplBase.java:1196)
	at org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:190)
	at org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
	at com.simplicite.webapp.websockets.Events.pushLog(Events.java:165)
	at com.simplicite.util.AppLog.error(AppLog.java:555)
	at com.simplicite.util.AppLog.log(AppLog.java:232)
	at com.simplicite.util.AppLog.log(AppLog.java:192)
	at com.simplicite.util.AppLog.error(AppLog.java:543)
	at com.simplicite.util.engine.CronManager$CronDaemon.run(CronManager.java:90)

Je pense que je vais exporter tous les objets du module (Objets métiers, templates, vues …) un à un pour recréer un module en “bon état”

N’y aurait il pas une boucle dans vos héritages d’objets ?

Je n’ai pas l’impression, aucun objet métier n’hérite d’un autre

Il est vrai que la ligne

at com.simplicite.util.engine.Interface.exportModuleParentObject(Interface.java:2715)

se reproduit un certain nombre de fois !

Il y a clairement un cycle dans votre modèle, pas forcement au niveau d’un héritage.
Dans un même module, quand on exporte un objet qui en référence un autre pas encore exporté, il est exporté en premier = pour que l’import se passe dans le bon ordre.

Vous êtes dans un cas qui boucle.