Search the FirstSpirit Knowledge Base
Wird im PermissionService eine zyklische Gruppen xml erstellt kommt es bei einer zeitgleichen Generierung zu folgendem Fehler:
Auszug (fs-schedule.xyz.log)
(de.espirit.firstspirit.generate.SiteProduction): java.util.ConcurrentModificationException
Alle Rechte Abfragen die zum Zeitpunkt des PermissionService reloads gemacht werden laufen dann ins leere. Dem zur Folge kann es dann auch vorkommen, dass die daraus generierten Seiten keine Berechtigungsprüfung vornehmen.
Kann das die Aktualisierung im Falle einer laufenden Generierung aussetzen?
Entweder vom Skript des PermissionService aus (Hier habe ich aber leider das Problem an eine Connection zu kommen. Der Context des Services scheint dies nicht vorzusehen.)
oder aber über ein Skript welches vor jeder Generierung ausgeführt werden muss.
Grüße
m.Schlenz
Dieses Problem sollten Sie auf jeden Fall auch an den Helpdesk melden. Wenn vorhanden mit dem kompletten Trace der Meldung und der genauen Versionsinformation Ihrer FS-Installation.
Der Helpdesk kennt das Problem ([Help #Help-20101102-630]). Und hatte mich erst auf den zusammenhang zwischen den Beiden (PermissionService und Generierung) gebracht.
Der Fehler tritt soweit mir bekannt in Version 4.1.49 und auch in 4.2_BETA.409.41069 auf.
Hallo Herr Schlenz
könnten Sie bitte innerhalb der jeweiligen Seitenvorlagen den Debug aktivieren und den kompletten Stackttrace posten.
$CMS_SET(#global.debugMode, true)$
Besten Dank
Gerrit Bösebeck
Nachricht geändert durch Gerrit Bösebeck
Der korrekte Paramenter ist true und nicht 1
Hier ist der Stackttrace:
03.12.2010 12:52:50.403 INFO (de.espirit.firstspirit.generate.PreviewProduction): generating 'men' (id=283403, html, DE), content processor
de.espirit.firstspirit.generate.EmptyContentProcessor@6e826e82
03.12.2010 12:52:53.998 ERROR ($CMS_IF( ! perm.allowed("").isEmpty && ! perm.allowed("").contains("*") )$ at 32, 4): java.util.ConcurrentModificationException
inside of: Template 'XML Menü' (id=283546)
inside of: $CMS_TRIM(level:2)$ - at 54, 1
inside of: $CMS_VALUE(fr_menu)$ - at 55, 1
inside of: $CMS_IF( ! perm.allowed("").isEmpty && ! perm.allowed("").contains("*") )$ - at 32, 4
Caused by java.util.ConcurrentModificationException
at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
at de.espirit.firstspirit.service.permission.groups.GroupImpl.getAllChildren(GroupImpl.java:201)
at de.espirit.firstspirit.service.permission.groups.GroupImpl.getAllChilds(GroupImpl.java:194)
at de.espirit.firstspirit.service.permission.PermissionUtil.normalize(PermissionUtil.java:44)
at de.espirit.firstspirit.access.editor.value.PermissionsImpl.getPermissions(PermissionsImpl.java:230)
at de.espirit.firstspirit.access.editor.value.PermissionsImpl.getAllowed(PermissionsImpl.java:216)
at PermissionsImpl_getAllowed_String_1736.invoke(Unknown Source)
at de.espirit.firstspirit.parser.eval.Invoker$MethodWrapperImpl.invoke(Invoker.java:948)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:469)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:401)
at de.espirit.firstspirit.parser.eval.Invoker.evalMethod(Invoker.java:213)
at de.espirit.firstspirit.parser.EvaluatorImpl.invokeMethod(EvaluatorImpl.java:180)
at de.espirit.firstspirit.parser.impl.MethodImpl.eval(MethodImpl.java:74)
at de.espirit.firstspirit.parser.impl.DottedExpression.eval(DottedExpression.java:72)
at de.espirit.firstspirit.parser.impl.NotExpression.eval(NotExpression.java:23)
at de.espirit.firstspirit.parser.impl.CombinedExpression.eval(CombinedExpression.java:208)
at de.espirit.firstspirit.parser.impl.CmsIfImpl.print(CmsIfImpl.java:81)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.parser.impl.AbstractPrintable.print(AbstractPrintable.java:79)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$NodeContext.render(NavigationFunctionImpl.java:761)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:932)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1052)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1052)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1062)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1062)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:920)
at de.espirit.firstspirit.parser.eval.PrintableEnhancer.print(PrintableEnhancer.java:25)
at PrintableEnhancer_print_Printable_128.invoke(Unknown Source)
at de.espirit.firstspirit.parser.eval.Invoker$MethodWrapperImpl.invoke(Invoker.java:948)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:469)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:401)
at de.espirit.firstspirit.parser.eval.Invoker.evalMethod(Invoker.java:213)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:201)
at de.espirit.firstspirit.parser.impl.CmsValueImpl.print(CmsValueImpl.java:69)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.parser.impl.AbstractPrintable.print(AbstractPrintable.java:79)
at de.espirit.firstspirit.parser.impl.CmsTrimImpl.print(CmsTrimImpl.java:165)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.parser.impl.AbstractPrintable.print(AbstractPrintable.java:79)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.generate.PreviewProduction.calculate(PreviewProduction.java:169)
at de.espirit.firstspirit.generate.AbstractPreviewManager.getLog(AbstractPreviewManager.java:140)
at de.espirit.firstspirit.io.servlet.PreviewServlet.deliverPreview(PreviewServlet.java:296)
at de.espirit.firstspirit.io.servlet.PreviewServlet.doPost(PreviewServlet.java:215)
at de.espirit.firstspirit.io.servlet.PreviewServlet.doGet(PreviewServlet.java:164)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doChain(WebAuthentication.java:604)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:469)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:143)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at de.espirit.firstspirit.server.jetty.JettyManagerImpl$FailSafeWebAppContext.handle(JettyManagerImpl.java:764)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:736)
03.12.2010 12:52:50.403 INFO (de.espirit.firstspirit.generate.PreviewProduction): generating 'men' (id=283403, html, DE), content processor de.espirit.firstspirit.generate.EmptyContentProcessor@6e826e82
03.12.2010 12:52:53.998 ERROR ($CMS_IF( ! perm.allowed("").isEmpty && ! perm.allowed("").contains("*") )$ at 32, 4): java.util.ConcurrentModificationException
inside of: Template 'XML Menü' (id=283546)
inside of: $CMS_TRIM(level:2)$ - at 54, 1
inside of: $CMS_VALUE(fr_menu)$ - at 55, 1
inside of: $CMS_IF( ! perm.allowed("").isEmpty && ! perm.allowed("").contains("*") )$ - at 32, 4
Caused by java.util.ConcurrentModificationException
at java.util.AbstractList$SimpleListIterator.next(AbstractList.java:64)
at de.espirit.firstspirit.service.permission.groups.GroupImpl.getAllChildren(GroupImpl.java:201)
at de.espirit.firstspirit.service.permission.groups.GroupImpl.getAllChilds(GroupImpl.java:194)
at de.espirit.firstspirit.service.permission.PermissionUtil.normalize(PermissionUtil.java:44)
at de.espirit.firstspirit.access.editor.value.PermissionsImpl.getPermissions(PermissionsImpl.java:230)
at de.espirit.firstspirit.access.editor.value.PermissionsImpl.getAllowed(PermissionsImpl.java:216)
at PermissionsImpl_getAllowed_String_1736.invoke(Unknown Source)
at de.espirit.firstspirit.parser.eval.Invoker$MethodWrapperImpl.invoke(Invoker.java:948)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:469)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:401)
at de.espirit.firstspirit.parser.eval.Invoker.evalMethod(Invoker.java:213)
at de.espirit.firstspirit.parser.EvaluatorImpl.invokeMethod(EvaluatorImpl.java:180)
at de.espirit.firstspirit.parser.impl.MethodImpl.eval(MethodImpl.java:74)
at de.espirit.firstspirit.parser.impl.DottedExpression.eval(DottedExpression.java:72)
at de.espirit.firstspirit.parser.impl.NotExpression.eval(NotExpression.java:23)
at de.espirit.firstspirit.parser.impl.CombinedExpression.eval(CombinedExpression.java:208)
at de.espirit.firstspirit.parser.impl.CmsIfImpl.print(CmsIfImpl.java:81)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.parser.impl.AbstractPrintable.print(AbstractPrintable.java:79)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$NodeContext.render(NavigationFunctionImpl.java:761)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:932)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1052)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1052)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1062)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.renderFolders(NavigationFunctionImpl.java:1062)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:977)
at de.espirit.firstspirit.generate.functions.NavigationFunctionImpl$StandardNavigation.print(NavigationFunctionImpl.java:920)
at de.espirit.firstspirit.parser.eval.PrintableEnhancer.print(PrintableEnhancer.java:25)
at PrintableEnhancer_print_Printable_128.invoke(Unknown Source)
at de.espirit.firstspirit.parser.eval.Invoker$MethodWrapperImpl.invoke(Invoker.java:948)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:469)
at de.espirit.firstspirit.parser.eval.Invoker.invokeMethod(Invoker.java:401)
at de.espirit.firstspirit.parser.eval.Invoker.evalMethod(Invoker.java:213)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:201)
at de.espirit.firstspirit.parser.impl.CmsValueImpl.print(CmsValueImpl.java:69)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.parser.impl.AbstractPrintable.print(AbstractPrintable.java:79)
at de.espirit.firstspirit.parser.impl.CmsTrimImpl.print(CmsTrimImpl.java:165)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.parser.impl.AbstractPrintable.print(AbstractPrintable.java:79)
at de.espirit.firstspirit.parser.EvaluatorImpl.print(EvaluatorImpl.java:450)
at de.espirit.firstspirit.generate.PreviewProduction.calculate(PreviewProduction.java:169)
at de.espirit.firstspirit.generate.AbstractPreviewManager.getLog(AbstractPreviewManager.java:140)
at de.espirit.firstspirit.io.servlet.PreviewServlet.deliverPreview(PreviewServlet.java:296)
at de.espirit.firstspirit.io.servlet.PreviewServlet.doPost(PreviewServlet.java:215)
at de.espirit.firstspirit.io.servlet.PreviewServlet.doGet(PreviewServlet.java:164)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doChain(WebAuthentication.java:604)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:469)
at de.espirit.firstspirit.io.servlet.WebAuthentication.doFilter(WebAuthentication.java:143)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:726)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at de.espirit.firstspirit.server.jetty.JettyManagerImpl$FailSafeWebAppContext.handle(JettyManagerImpl.java:764)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:736)
Vielen Dank, ich habe dafür intern die Ticket-ID #91639 vergeben.
Um die Skripte, die aus dem PermissionService heraus aufgerufen werden, mit den Generierungsaufträgen zu synchronisieren müsste man über de.espirit.firstspirit.access.schedule.ScheduleStorage gehen und so sicherstellen, das keine parallele Generierung läuft.
Hallo,
wie komme ich an der ScheduleStorage?
Hallo,
über...
/* pseudocode */
AdminService as = connection.getService(AdminService.class);
ScheduleStorage ss = as.getScheduleStorage();