ConcurrentModificationException getting calendar events

Description

This showed up in calendar summary, but the underlying cause seems to be in the calendar service (schedule).

usage-session: 82bf10c5-51b3-4a05-8ef2-a74ff874ae54
stack-trace-digest: D54F31D56B53CEA2203B3AF3EE2B06C07AF5920E
sakai-version: 2.5
service-version: [r4596-rtrunk]
app-server: vula2a
user-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
browser-id: Win-Mozilla
IP: 137.158.96.217
request-path: /portal/tool/704f33d9-9408-4d21-0001-488e3ec889bf/calendar
time: 14-Dec-2007 11:08:33

stack trace:

org.sakaiproject.portal.api.PortalHandlerException: org.sakaiproject.tool.api.ToolException: Cannot get value for expression '#{CalBean.calendar}'
at org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:63)
caused by: org.sakaiproject.tool.api.ToolException: Cannot get value for expression '#{CalBean.calendar}'
at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1343)
caused by: javax.servlet.ServletException: Cannot get value for expression '#{CalBean.calendar}'
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
caused by: javax.faces.FacesException: Cannot get value for expression '#{CalBean.calendar}'
at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
caused by: org.apache.jasper.JasperException: Cannot get value for expression '#{CalBean.calendar}'
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
caused by: javax.faces.el.EvaluationException: Cannot get value for expression '#{CalBean.calendar}'
at javax.faces.component.UIData.getValue(UIData.java:1023)
caused by: javax.faces.el.EvaluationException: Exception getting value of property calendar of base of type : org.sakaiproject.tool.summarycalendar.ui.CalendarBean
at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:535)
caused by: javax.faces.el.EvaluationException: Bean: org.sakaiproject.tool.summarycalendar.ui.CalendarBean, property: calendar
at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:85)
caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
caused by: java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at org.sakaiproject.calendar.impl.BaseCalendarService.getEvents(BaseCalendarService.java:374)
at org.sakaiproject.tool.summarycalendar.ui.CalendarBean.getEventsFromSchedule(CalendarBean.java:318)
at org.sakaiproject.tool.summarycalendar.ui.CalendarBean.getScheduleEventsForDay(CalendarBean.java:342)
at org.sakaiproject.tool.summarycalendar.ui.CalendarBean.getWeeks(CalendarBean.java:606)
at org.sakaiproject.tool.summarycalendar.ui.CalendarBean.getCalendar(CalendarBean.java:544)
at sun.reflect.GeneratedMethodAccessor2084.invoke(null:-1)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.myfaces.el.PropertyResolverImpl.getProperty(PropertyResolverImpl.java:457)
at org.apache.myfaces.el.PropertyResolverImpl.getValue(PropertyResolverImpl.java:85)
at org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:535)
at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
at org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:386)
at javax.faces.component.UIData.getValue(UIData.java:1023)
at org.apache.myfaces.component.html.ext.HtmlDataTableHack.createDataModel(HtmlDataTableHack.java:437)
at org.apache.myfaces.component.html.ext.HtmlDataTable.createDataModel(HtmlDataTable.java:847)
at org.apache.myfaces.component.html.ext.HtmlDataTableHack.getDataModel(HtmlDataTableHack.java:414)
at org.apache.myfaces.component.html.ext.HtmlDataTable.getDataModel(HtmlDataTable.java:839)
at org.apache.myfaces.component.html.ext.HtmlDataTableHack.getRowCount(HtmlDataTableHack.java:87)
at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:221)
at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:134)
at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildren(HtmlTableRenderer.java:187)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:527)
at javax.faces.webapp.UIComponentTag.encodeChildren(UIComponentTag.java:483)
at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:364)
at org.apache.myfaces.shared_tomahawk.taglib.UIComponentBodyTagBase.doEndTag(UIComponentBodyTagBase.java:57)
at org.apache.jsp.summary_002dcalendar.calendar_jsp._jspx_meth_t_005fdataTable_005f0(calendar_jsp.java:739)
at org.apache.jsp.summary_002dcalendar.calendar_jsp._jspService(calendar_jsp.java:247)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:315)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:419)
at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:211)
at org.sakaiproject.jsf.app.SakaiViewHandler.renderView(SakaiViewHandler.java:137)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:132)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:140)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:555)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:403)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.sakaiproject.jsf.util.JsfTool.dispatch(JsfTool.java:221)
at org.sakaiproject.jsf.util.JsfTool.doPost(JsfTool.java:256)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(ActiveToolComponent.java:459)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(SkinnableCharonPortal.java:1343)
at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(ToolHandler.java:163)
at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(ToolHandler.java:86)
at org.sakaiproject.portal.charon.handlers.ToolHandler.doPost(ToolHandler.java:63)
at org.sakaiproject.portal.charon.SkinnableCharonPortal.doPost(SkinnableCharonPortal.java:1186)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:592)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)

Tool Placement:
No Placement

Request:
: AuthType:null
: CharEncoding:UTF-8
: ContentLength:239
: ContentType:application/x-www-form-urlencoded
: ContextPath:/portal
: LocalAddress:null
: LocalName:vula.uct.ac.za
: LocalPort:443
: Method:POST
: PathInfo:/tool/704f33d9-9408-4d21-0001-488e3ec889bf/calendar
: Protocol:HTTP/1.1
: QueryString:null
: RemoteAddress:137.158.96.217
: RemoteHost:137.158.96.217
: RemotePort:-1
: Requested URL:https://vula.uct.ac.za/portal/tool/704f33d9-9408-4d21-0001-488e3ec889bf/calendar
: Scheme:https
: ServerName:vula.uct.ac.za
: Headers:
: Header:host:vula.uct.ac.za
: Header:user-agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20061010 Firefox/2.0
: Header:accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,/;q=0.5
: Header:accept-language:en-us,en;q=0.5
: Header:accept-encoding:gzip,deflate
: Header:accept-charset:ISO-8859-1,utf-8;q=0.7,*;q=0.7
: Header:Keep-Alive:300
: Header:connection:keep-alive
: Header:referer:https://vula.uct.ac.za/portal/tool/704f33d9-9408-4d21-0001-488e3ec889bf/calendar
: Header:cookie:---censored---
: Header:content-type:application/x-www-form-urlencoded
: Header:content-length:239
: Parameters:
: Parameter:javax.faces.ViewState:0:rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAN0AAIxMHB0AB4vc3VtbWFyeS1jYWxlbmRhci9jYWxlbmRhci5qc3A=
: Parameter:calendarForm_SUBMIT:0:1
: Parameter:calendarForm:_idcl:0:
: Parameter:calendarForm:link_hidden:0:
: Parameter:calendarForm:_idJsp9:0: <
: Attributes:
: Attribute:tool.url.manager:org.sakaiproject.portal.util.ToolURLManagerImpl@25b9ba92
: Attribute:sakai.session:org.sakaiproject.tool.impl.SessionComponent$MySession@a55b732b
: Attribute:sakai.html.head.css.base:<link href="/library/skin/tool_base.css" type="text/css" rel="stylesheet" media="all" />

: Attribute:sakai.character.encoding.done:sakai.character.encoding.done
: Attribute:sakai.html.head.js:<script type="text/javascript" language="JavaScript" src="/library/js/headscripts.js"></script>

: Attribute:sakai.html.head:<link href="/library/skin/tool_base.css" type="text/css" rel="stylesheet" media="all" />
<link href="/library/skin/default/tool.css" type="text/css" rel="stylesheet" media="all" />
<script type="text/javascript" language="JavaScript" src="/library/js/headscripts.js"></script>

: Attribute:sakai.request.native.url:sakai.request.native.url
: Attribute:sakai.html.body.onload:setMainFrameHeight('Main704f33d9x9408x4d21x0001x488e3ec889bf');setFocus(focus_path);
: Attribute:sakai.filtered:sakai.filtered
: Attribute:sakai.html.head.css.skin:<link href="/library/skin/default/tool.css" type="text/css" rel="stylesheet" media="all" />

: Attribute:sakai.html.head.css:<link href="/library/skin/tool_base.css" type="text/css" rel="stylesheet" media="all" />
<link href="/library/skin/default/tool.css" type="text/css" rel="stylesheet" media="all" />

Session:
: Created:1197622842838
: LastAccess:1197623313982
: MaxInactive:3600
: Attributes:
: Attribute:portalskin:defaultskin

Activity

Filter Maintainer August 8, 2008 at 6:04 AM

2.5.0 QA has been completed. Unfortunately, there were not resources available to specifically test this issue. If you find this to still be a problem in the latest release (at this point 2.5.2), please reopen the JIRA and add the latest affects version.

Megan May February 5, 2008 at 2:53 PM

Updating 2.5.x to 2.5.0.rc1 since the tag has been cut

David Horwitz January 23, 2008 at 3:59 AM

merged into 20-5x with r40454

Stephen Marquard January 23, 2008 at 1:16 AM

Verified that calendar summary still works on nightly2 (trunk).

As we don't have a reproducible test case for this, we're going to QA it by putting it in production and seeing whether this bug still shows up.

Pls merge into 2-5-x.

Beth Kirschner January 22, 2008 at 11:35 AM

While I've been unable to duplicate the problem, a review of the code shows an unsafe thread condition in the CalendarBean class, which generates an ArrayList that appears to be the subject of the crash in BaseCalendarService.getEvents().

Stephen, can you test and then re-assign to the 2.5.x branch-manager?

Fixed

Details

Priority

Affects versions

Fix versions

Components

Assignee

Reporter

Created December 16, 2007 at 2:22 AM
Updated October 23, 2008 at 6:04 AM
Resolved January 22, 2008 at 11:35 AM