Bug #15101
ouvertL'admin est redirigé coté utilisateur quand il navigue sur plusieurs espaces
0%
Description
Pré-requis:
- Etre admin ou gestionnaire d'espace.
- Avoir une arborescence importante d'espaces et de sous-espaces (3 ou 4 niveaux)
Quand on clique rapidement sur la partie gauche de navigation, à un moment une erreur JS survient et redirige l'administrateur côté utilisateurs.
Voici l'erreur :

SP - ERROR - Admin Window - technical load error silverpeas-min.645.js:1:28708
error https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-min.645.js:1
a https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
e https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
(Asynchrone : promise callback)
n https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
m https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
h https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
(Asynchrone : promise callback)
h https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
loadSubSpace https://dev.serveur.com/silverpeas/util/javaScript/silverpeas-admin-window-min.645.js line 17 > srcScript:1
jumpToSubSpace https://dev.serveur.com/silverpeas/RjobManagerPeas/jsp/Main line 2 > injectedScript:7
loadSelectedSpace https://dev.serveur.com/silverpeas/RjobManagerPeas/jsp/Main line 2 > injectedScript:1
It https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
Bt https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
sn https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
onSpaceSelect https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript line 3 > Function:41
It https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
Bt https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
sn https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
onClick https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript line 3 > Function:20
It https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
Bt https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
n https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
(Asynchrone : EventListener.handleEvent)
vs https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
ys https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
patchProp https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
x https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
S https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
h https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
effect https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
run https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
update https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
$ https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
P https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
F https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
h https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
effect https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
run https://dev.serveur.com/silverpeas/util/javaScript/vuejs/vue.min.645.js line 17 > srcScript:3
GET
https://dev.serveur.com/silverpeas/util/javaScript/jquery/jquery.ui.datepicker-en-min.645.js
[HTTP/1.1 404 Not Found 42ms]
GET
https://dev.serveur.com/silverpeas/util/javaScript/jquery/jquery.ui.datepicker-en-min.645.js
[HTTP/1.1 404 Not Found 74ms]
Fichiers
Mis à jour par David Lesimple il y a 3 mois
- Priorité changé de Normal à Urgent
Mis à jour par David Lesimple il y a 3 mois
- Statut changé de New à Assigned
Mis à jour par Miguel Moquillon il y a 3 mois
- Statut changé de Assigned à Feedback
Il me faudrait un déroulé plus explicite et exacte qui permet de reproduire le bogue parce qu'actuellement, je ne reproduis pas bogue.
Mes tests ont été réalisés avec un espace doté de 7 sous-espaces dont 4 ont une arborescence de 2 à 3 sous-espaces. Et j'ai beau cliqué rapidement sur des sous-espaces ou applications, je ne reproduis pas le soucis
Mis à jour par David Lesimple il y a 3 mois
Il y a également une erreur coté serveur :
2025-12-16 14:39:05,176 SEVERE [silverpeas.core.web.mvc.util] (default task-68) null: java.util.ConcurrentModificationException
at java.base/java.util.TreeMap$KeySpliterator.forEachRemaining(TreeMap.java:2750)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encodeSpaces$11(NavBarJsonEncoder.java:152)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec$JSONObject.putJSONArray(JSONCodec.java:252)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encodeSpaces(NavBarJsonEncoder.java:148)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encode$0(NavBarJsonEncoder.java:83)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec.encodeObject(JSONCodec.java:90)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encode(NavBarJsonEncoder.java:79)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:718)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:65)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.AdminComponentRequestRouter.getDestination(AdminComponentRequestRouter.java:68)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.AdminComponentRequestRouter.getDestination(AdminComponentRequestRouter.java:44)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.ComponentRequestRouter.computeNextDestination(ComponentRequestRouter.java:266)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.ComponentRequestRouter.computeDestination(ComponentRequestRouter.java:231)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.ComponentRequestRouter.doPost(ComponentRequestRouter.java:162)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.ComponentRequestRouter.doGet(ComponentRequestRouter.java:171)
at javax.servlet.api@2.0.0.Final//javax.servlet.http.HttpServlet.service(HttpServlet.java:503)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.webcomponent.SilverpeasHttpServlet.service(SilverpeasHttpServlet.java:58)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.webcomponent.SilverpeasAuthenticatedHttpServlet.service(SilverpeasAuthenticatedHttpServlet.java:80)
at javax.servlet.api@2.0.0.Final//javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:129)
at io.undertow.websocket@2.2.19.Final//io.undertow.websockets.jsr.JsrWebSocketFilter.doFilter(JsrWebSocketFilter.java:173)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.components.whitepages.filters.ComponentRequestRouterFilter.doFilter(ComponentRequestRouterFilter.java:70)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.core.web.filter.MassiveWebSecurityFilter.doFilter(MassiveWebSecurityFilter.java:148)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.core.web.filter.WebCORSFilter.doFilter(WebCORSFilter.java:81)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.web.filter.InternetExplorerAntiCompatibilityFilter.doFilter(InternetExplorerAntiCompatibilityFilter.java:50)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.web.token.SessionSynchronizerTokenValidator.doFilter(SessionSynchronizerTokenValidator.java:96)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.core.web.filter.MessageFilter.doFilter(MessageFilter.java:73)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.web.filter.SilverpeasExceptionLoggingFilter.doFilter(SilverpeasExceptionLoggingFilter.java:49)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.web.filter.ResourceCacheFilter.doFilter(ResourceCacheFilter.java:55)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.web.filter.HttpServletRequestDecoration.doFilter(HttpServletRequestDecoration.java:59)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at deployment.silverpeas.war//org.silverpeas.web.filter.CharsetFilter.doFilter(CharsetFilter.java:73)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at org.wildfly.security.elytron-web.undertow-server@1.10.1.Final//org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler.lambda$handleRequest$1(ElytronRunAsHandler.java:68)
at org.wildfly.security.elytron-base@1.19.1.Final//org.wildfly.security.auth.server.FlexibleIdentityAssociation.runAsFunctionEx(FlexibleIdentityAssociation.java:103)
at org.wildfly.security.elytron-base@1.19.1.Final//org.wildfly.security.auth.server.Scoped.runAsFunctionEx(Scoped.java:161)
at org.wildfly.security.elytron-base@1.19.1.Final//org.wildfly.security.auth.server.Scoped.runAs(Scoped.java:73)
at org.wildfly.security.elytron-web.undertow-server@1.10.1.Final//org.wildfly.elytron.web.undertow.server.ElytronRunAsHandler.handleRequest(ElytronRunAsHandler.java:67)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.core@2.2.19.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.core@2.2.19.Final//io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:53)
at io.undertow.core@2.2.19.Final//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:59)
at io.undertow.core@2.2.19.Final//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at org.wildfly.security.elytron-web.undertow-server-servlet@1.10.1.Final//org.wildfly.elytron.web.undertow.server.servlet.CleanUpHandler.handleRequest(CleanUpHandler.java:38)
at io.undertow.core@2.2.19.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
at io.undertow.core@2.2.19.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.undertow.core@2.2.19.Final//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at org.wildfly.extension.undertow@26.1.3.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1544)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:79)
at io.undertow.servlet@2.2.19.Final//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:100)
at io.undertow.core@2.2.19.Final//io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
at io.undertow.core@2.2.19.Final//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at org.jboss.xnio@3.8.7.Final//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:829)
Mis à jour par Miguel Moquillon il y a 3 mois
- Statut changé de Feedback à In progress...
Bon, après investigation, Je ne vois pas autre chose qu'un bug dans l'API de Java avec les TreeSet synchronisé ... En effet, c'est une erreur d'accès concurrente au TreeSet qui est utilisé comme cache pour les sous-espaces, or ce cache est propre à la session de l'utilisateur. Comme les accès concurrents sont censés être gérés par le TreeSet synchronisé, avec plusieurs accès en lecture sur ce cache, seul l'un d'eux devrait avoir la main, les autres devant être bloqué. De plus, et quand bien même, ce devrait être d'autant plus rare que la probabilité que deux requêtes HTTP du même utilisateur soit prise en compte simultanément, chacune par un thread, est proche de zéro !
Quelle version de Java 11 est utilisée sur le serveur du client ?
Mis à jour par David Lesimple il y a 3 mois
Miguel Moquillon a écrit (#note-5):
Quelle version de Java 11 est utilisée sur le serveur du client ?
Debian OpenJDK 64-Bit Server VM 11.0.29+6-post-Debian-1deb11u1 (PROD)
et
Debian OpenJDK 64-Bit Server VM 11.0.28+6-post-Debian-1deb11u1 (TEST)
Mis à jour par Miguel Moquillon il y a 3 mois
C'est bon. En fait ce n'est pas un bug de Java mais de notre utilisation du SortedSet synchronisé. Bien que synchronisé, il est nécessaire de synchroniser nous même l'accès aux itérateurs et aux streams lorsque l'on parcours le TreeSet. On aurait pu utiliser le ConcurrentSkipListSet à la place mais les écritures et suppressions sont en log(n) et non en log(1) comme avec le TreeSet synchronisé.
Mis à jour par Miguel Moquillon il y a 3 mois
- Statut changé de In progress... à Closed
Directement corrigé dans la branche 6.4.x et correction reportée sur master
Mis à jour par David Lesimple il y a environ 2 mois
- Statut changé de Closed à Re-opened
Mis à jour par David Lesimple il y a environ 2 mois
2026-02-02 14:31:04,918 SEVERE [silverpeas.core.web.mvc.util] (default task-32) null: java.util.ConcurrentModificationException
at java.base/java.util.TreeMap$KeySpliterator.forEachRemaining(TreeMap.java:2750)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encodeSpaces$14(NavBarJsonEncoder.java:168)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec$JSONObject.putJSONArray(JSONCodec.java:251)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encodeSpaces(NavBarJsonEncoder.java:161)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encode$0(NavBarJsonEncoder.java:87)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec.encodeObject(JSONCodec.java:89)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encode(NavBarJsonEncoder.java:83)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:696)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:65)
Mis à jour par Miguel Moquillon il y a environ 2 mois
- Statut changé de Re-opened à Closed
L'erreur survient lorsque deux administrateurs jouent simultanément sur l'arbre des espaces et instances de composants, l'un en lecture (accès à l'un des nœuds de l'arbre) et l'autre modifiant cette structure même.
Pour éviter ce soucis, l'arbre est explicitement copié avant d'être passé à l'appelant.
La correction a été directement poussée sur les branches 6.4.x et master
Mis à jour par David Lesimple il y a environ 2 mois
- Statut changé de Closed à Re-opened
Le problème se produit toujours, voici la trace :
2026-02-03 15:03:37,878 SEVERE [silverpeas.core.web.mvc.util] (default task-79) null: java.util.ConcurrentModificationException
at java.base/java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1208)
at java.base/java.util.TreeMap$KeyIterator.next(TreeMap.java:1262)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2558)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2578)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2578)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2503)
at java.base/java.util.TreeMap.addAllForTreeSet(TreeMap.java:2462)
at java.base/java.util.TreeSet.addAll(TreeSet.java:308)
at java.base/java.util.TreeSet.(TreeSet.java:172)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarManager.getAvailableSubSpaces(NavBarManager.java:219)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.control.JobStartPagePeasSessionController.getSubSpaces(JobStartPagePeasSessionController.java:222)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encodeSpaces$14(NavBarJsonEncoder.java:162)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec$JSONObject.putJSONArray(JSONCodec.java:251)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encodeSpaces(NavBarJsonEncoder.java:161)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encode$0(NavBarJsonEncoder.java:87)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec.encodeObject(JSONCodec.java:89)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encode(NavBarJsonEncoder.java:83)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:696)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:65)
Mis à jour par Miguel Moquillon il y a environ 2 mois
· Edité
- Statut changé de Re-opened à Feedback
L'erreur indique que lors de la copie du cache des espaces il y a eu une tentative de modification de ce cache !!! Sachant que cette copie est réalisée justement pour éviter, lors de son parcours, des erreurs d'accès concurrent comme ci-dessus.
Sachant que la probabilité qu'un tel événement arrive est négligeable (accès simultané exacte), dis moi, c'est fait exprès là, non ?
Mis à jour par Miguel Moquillon il y a environ 2 mois
· Edité
Dis moi, est ce que lors des tests la personne a deux onglets ou deux navigateurs ouverts avec le même compte ?
Mis à jour par David Lesimple il y a environ 2 mois
· Edité
Miguel Moquillon a écrit (#note-16):
Dis moi, est ce que lors des tests la personne a deux onglets ou deux navigateurs ouverts avec le même compte ?
Non, avec un seul onglet et un seul navigateur (une session donc)
La pile d'erreur cette fois-ci :
2026-02-06 10:41:14,013 SEVERE [silverpeas.core.web.mvc.util] (default task-236) null: java.util.ConcurrentModificationException
at java.base/java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1208)
at java.base/java.util.TreeMap$KeyIterator.next(TreeMap.java:1262)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2558)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2578)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2578)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2546)
at java.base/java.util.TreeMap.buildFromSorted(TreeMap.java:2503)
at java.base/java.util.TreeMap.addAllForTreeSet(TreeMap.java:2462)
at java.base/java.util.TreeSet.addAll(TreeSet.java:308)
at java.base/java.util.TreeSet.<init>(TreeSet.java:172)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarManager.getAvailableSubSpaces(NavBarManager.java:219)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.control.JobStartPagePeasSessionController.getSubSpaces(JobStartPagePeasSessionController.java:222)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encodeSpaces$14(NavBarJsonEncoder.java:162)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec$JSONObject.putJSONArray(JSONCodec.java:251)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encodeSpaces(NavBarJsonEncoder.java:161)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encode$0(NavBarJsonEncoder.java:87)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec.encodeObject(JSONCodec.java:89)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encode(NavBarJsonEncoder.java:83)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:696)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:65)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.AdminComponentRequestRouter.getDestination(AdminComponentRequestRouter.java:68)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.AdminComponentRequestRouter.getDestination(AdminComponentRequestRouter.java:44)
Mis à jour par Miguel Moquillon il y a environ un mois
- Statut changé de Feedback à Resolved
Après investigation et par le biais d'un test unitaire, j'ai poussé une solution possible directement sur les branches 6.4.x et master. J'ai testé celle-ci avec mon propre Silverpeas sans rencontrer le problème. Néanmoins, il faudrait que tu testes de ton côté avec l'environnement d'Akwel pour voir
Mis à jour par David Lesimple il y a 23 jours
- Statut changé de Resolved à Closed
Mis à jour par David Lesimple il y a un jour
- Statut changé de Closed à Re-opened
- Version cible changé de Version 6.4.6 à Version 6.4.7
Le problème est toujours présent, mais uniquement en tant qu'administrateur d'espace.
Mis à jour par Miguel Moquillon il y a environ 16 heures
- Statut changé de Re-opened à Feedback
je n'arrive pas à reproduire le pb. Est ce que la pile d'erreur est la même que les cas précédents ?
Mis à jour par David Lesimple il y a environ 15 heures
· Edité
Miguel Moquillon a écrit (#note-21):
je n'arrive pas à reproduire le pb. Est ce que la pile d'erreur est la même que les cas précédents ?
Apparemment non, pas tout à fait (ici sur une 6.4.7-build260317) :
2026-03-23 11:26:16,734 SEVERE [silverpeas.core.web.mvc.util] (default task-16) null: java.util.ConcurrentModificationException
at java.base/java.util.TreeMap$KeySpliterator.forEachRemaining(TreeMap.java:2750)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encodeSpaces$15(NavBarJsonEncoder.java:161)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec$JSONObject.putJSONArray(JSONCodec.java:251)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encodeSpaces$16(NavBarJsonEncoder.java:157)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarManager.applyOnAvailableSubSpaces(NavBarManager.java:265)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.control.JobStartPagePeasSessionController.applyOnSubSpaces(JobStartPagePeasSessionController.java:242)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encodeSpaces(NavBarJsonEncoder.java:156)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.lambda$encode$0(NavBarJsonEncoder.java:85)
at deployment.silverpeas.war//org.silverpeas.core.util.JSONCodec.encodeObject(JSONCodec.java:89)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.NavBarJsonEncoder.encode(NavBarJsonEncoder.java:81)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:696)
at deployment.silverpeas.war//org.silverpeas.web.jobstartpage.servlets.JobStartPagePeasRequestRouter.getAdminDestination(JobStartPagePeasRequestRouter.java:65)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.AdminComponentRequestRouter.getDestination(AdminComponentRequestRouter.java:68)
at deployment.silverpeas.war//org.silverpeas.core.web.mvc.route.AdminComponentRequestRouter.getDestination(AdminComponentRequestRouter.java:44)
Mis à jour par Miguel Moquillon il y a environ 15 heures
- Statut changé de Feedback à Resolved
Une telle exception dépasse mon entendement. En effet, au regard du code, une telle exception n'est tout simplement pas possible. Ou alors il y a un truc bien particulier que je n'arrive pas à entrevoir. J'ai ici remplacé le parcours d'un flux (une Stream java) par un l'utilisation classique d'un for . J'ai directement poussé dans la branche 6.4.x. Je vais lancé un build auto. Il faudrait que tu testes alors cette version de build (une fois construite) pour voir si ça vient des Stream Java.