StringResourceModel.getString() calls MessageFormat.format(). Unfortunately, NumberFormat.getInstance(), which is called indirectly, uses a Hashtable resulting in lots of contention. Not sure why NumberFormat isnt using a ConcurrentMap instead... but any ideas on how to get around this?
If there isn't a way around this, is StringResourceModel only used when explicitly init'd by client app, or is wicket using it internally as well? In our app we do use StringResourceModel quite a bit (it's nicely done), but not with numbers... thanks -nikita Stacks at 19:12 http-8080-19 [BLOCKED] CPU time: 0:23 java.util.Hashtable.get(Object) java.text.NumberFormat.getInstance(Locale, int) java.text.NumberFormat.getInstance(Locale) java.text.MessageFormat.subformat(Object[], StringBuffer, FieldPosition, List) java.text.MessageFormat.format(Object, StringBuffer, FieldPosition) java.text.Format.format(Object) org.apache.wicket.model.StringResourceModel.getString() org.apache.wicket.model.StringResourceModel.load() org.apache.wicket.model.StringResourceModel.load() org.apache.wicket.model.LoadableDetachableModel.getObject() org.apache.wicket.model.StringResourceModel$AssignmentWrapper.getObject() org.apache.wicket.model.StringResourceModel$AssignmentWrapper.getObject() org.apache.wicket.Component.getDefaultModelObject() org.apache.wicket.Component.getDefaultModelObjectAsString() org.apache.wicket.markup.html.basic.Label.onComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.Component.renderComponent(MarkupStream) org.apache.wicket.markup.html.WebComponent.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.MarkupContainer.renderNext(MarkupStream) org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.renderAssociatedMarkup(String, String) org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.Component.renderComponent(MarkupStream) org.apache.wicket.MarkupContainer.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.MarkupContainer.renderNext(MarkupStream) org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.Component.renderComponent(MarkupStream) org.apache.wicket.MarkupContainer.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.markup.repeater.AbstractRepeater.renderChild(Component) org.apache.wicket.markup.repeater.AbstractRepeater.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.MarkupContainer.renderNext(MarkupStream) org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.renderAssociatedMarkup(String, String) org.apache.wicket.markup.html.panel.Panel.onComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.Component.renderComponent(MarkupStream) org.apache.wicket.MarkupContainer.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.MarkupContainer.renderNext(MarkupStream) org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.Component.renderComponent(MarkupStream) org.apache.wicket.MarkupContainer.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.MarkupContainer.autoAdd(Component, MarkupStream) org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupContainer, MarkupStream, ComponentTag) org.apache.wicket.markup.resolver.ComponentResolvers.resolve(Application, MarkupContainer, MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.renderNext(MarkupStream) org.apache.wicket.MarkupContainer.renderComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.onComponentTagBody(MarkupStream, ComponentTag) org.apache.wicket.Component.renderComponent(MarkupStream) org.apache.wicket.MarkupContainer.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.MarkupContainer.autoAdd(Component, MarkupStream) org.apache.wicket.markup.resolver.MarkupInheritanceResolver.resolve(MarkupContainer, MarkupStream, ComponentTag) org.apache.wicket.markup.resolver.ComponentResolvers.resolve(Application, MarkupContainer, MarkupStream, ComponentTag) org.apache.wicket.MarkupContainer.renderNext(MarkupStream) org.apache.wicket.MarkupContainer.renderAll(MarkupStream) org.apache.wicket.Page.onRender(MarkupStream) org.apache.wicket.Component.render(MarkupStream) org.apache.wicket.Page.renderPage() org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(RequestCycle) org.apache.wicket.request.target.coding.HybridUrlCodingStrategy$HybridBookmarkablePageRequestTarget.respond(RequestCycle) org.apache.wicket.request.AbstractRequestCycleProcessor.respond(RequestCycle) org.apache.wicket.RequestCycle.processEventsAndRespond() org.apache.wicket.RequestCycle.step() org.apache.wicket.RequestCycle.steps() org.apache.wicket.RequestCycle.request() org.apache.wicket.protocol.http.WicketFilter.doGet(HttpServletRequest, HttpServletResponse) org.apache.wicket.protocol.http.WicketFilter.doFilter(ServletRequest, ServletResponse, FilterChain) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) org.apache.catalina.core.ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) org.apache.catalina.core.StandardWrapperValve.invoke(Request, Response) org.apache.catalina.core.StandardContextValve.invoke(Request, Response) org.apache.catalina.core.StandardHostValve.invoke(Request, Response) org.apache.catalina.valves.ErrorReportValve.invoke(Request, Response) org.apache.catalina.valves.AccessLogValve.invoke(Request, Response) org.apache.catalina.core.StandardEngineValve.invoke(Request, Response) org.apache.catalina.connector.CoyoteAdapter.service(Request, Response) org.apache.coyote.http11.Http11Processor.process(Socket) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Socket) org.apache.tomcat.util.net.JIoEndpoint$Worker.run() java.lang.Thread.run() -- --------------------------------------------------- Nikita Tovstoles cell: +1-650-996-8173 ---------------------------------------------------
