You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Johan Compagner (JIRA)" <ji...@apache.org> on 2008/12/22 19:38:44 UTC

[jira] Commented: (WICKET-1988) DatePicker is not thread-safe

    [ https://issues.apache.org/jira/browse/WICKET-1988?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12658618#action_12658618 ] 

Johan Compagner commented on WICKET-1988:
-----------------------------------------

juergen, did you port this one also to the 1.3 stream?
this is serious enough to fix also in that release

> DatePicker is not thread-safe
> -----------------------------
>
>                 Key: WICKET-1988
>                 URL: https://issues.apache.org/jira/browse/WICKET-1988
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-datetime
>    Affects Versions: 1.3.5
>            Reporter: Roberto Fasciolo
>            Assignee: Juergen Donnerstag
>            Priority: Critical
>             Fix For: 1.4-RC2
>
>
> DatePicker uses 2 SimpleDateFormats as static final fields. That causes random failures under load because SimpleDateFormat is not thread-safe. From its javadocs: "Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally."
> For example:
> 18:34:06,214 (TP-Processor3) ERROR [org.apache.wicket.RequestCycle] - Exception in rendering component: [MarkupContainer [Component id = _header_0]]
> org.apache.wicket.WicketRuntimeException: Exception in rendering component: [MarkupContainer [Component id = _header_0]]
>         at org.apache.wicket.Component.renderComponent(Component.java:2519)
>         at org.apache.wicket.MarkupContainer.onRender(MarkupContainer.java:1411)
>         at org.apache.wicket.Component.render(Component.java:2317)
>         at org.apache.wicket.MarkupContainer.autoAdd(MarkupContainer.java:223)
>         at org.apache.wicket.markup.resolver.HtmlHeaderResolver.resolve(HtmlHeaderResolver.java:78)
>         at org.apache.wicket.MarkupContainer.renderNext(MarkupContainer.java:1324)
>         at org.apache.wicket.MarkupContainer.renderAll(MarkupContainer.java:1427)
>         at org.apache.wicket.Page.onRender(Page.java:1470)
>         at org.apache.wicket.Component.render(Component.java:2317)
>         at org.apache.wicket.Page.renderPage(Page.java:904)
>         at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:231)
>         at org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:104)
>         at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1181)
>         at org.apache.wicket.RequestCycle.step(RequestCycle.java:1252)
>         at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1353)
>         at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
>         at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:355)
>         at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:200)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at com.huitale.marketplace.security.SessionHijackingFilter.doFilter(SessionHijackingFilter.java:51)
>         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
>         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
>         at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
>         at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283)
>         at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767)
>         at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697)
>         at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)
>         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
>         at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.ArrayIndexOutOfBoundsException: 14
>         at sun.util.calendar.BaseCalendar.getCalendarDateFromFixedDate(BaseCalendar.java:436)
>         at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:2081)
>         at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:1996)
>         at java.util.Calendar.setTimeInMillis(Calendar.java:1104)
>         at java.util.Calendar.setTime(Calendar.java:1070)
>         at java.text.SimpleDateFormat.format(SimpleDateFormat.java:859)
>         at java.text.SimpleDateFormat.format(SimpleDateFormat.java:852)
>         at java.text.DateFormat.format(DateFormat.java:316)
>         at org.apache.wicket.extensions.yui.calendar.DatePicker.configure(DatePicker.java:390)
>         at org.apache.wicket.extensions.yui.calendar.DateTimeField$1.configure(DateTimeField.java:128)
>         at org.apache.wicket.extensions.yui.calendar.DatePicker.renderHead(DatePicker.java:224)
>         at org.apache.wicket.Component.renderHead(Component.java:2568)
>         at org.apache.wicket.markup.html.internal.HtmlHeaderContainer$1.component(HtmlHeaderContainer.java:220)
>         at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:829)
>         at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:844)
>         at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:844)
>         at org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:869)
>         at org.apache.wicket.markup.html.internal.HtmlHeaderContainer.renderHeaderSections(HtmlHeaderContainer.java:211)
>         at org.apache.wicket.markup.html.internal.HtmlHeaderContainer.onComponentTagBody(HtmlHeaderContainer.java:136)
>         at org.apache.wicket.Component.renderComponent(Component.java:2480)
>         ... 35 more
> happens because one internal SimpleDateFormat's field changes while the class is formatting a date. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.