m_Schlenz
I'm new here

PermissionService und parallele Generierung

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

0 Kudos
7 Replies
Peter_Jodeleit
Crownpeak employee

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.

Peter
0 Kudos

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.

0 Kudos

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

0 Kudos

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)

0 Kudos

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.

Peter
0 Kudos

Hallo,

wie komme ich an der ScheduleStorage?

0 Kudos

Hallo,

über...

/* pseudocode */

AdminService as = connection.getService(AdminService.class);

ScheduleStorage ss = as.getScheduleStorage();

0 Kudos