Could you please send me a link that how i can achieve this over wicket ? On Wed, Nov 11, 2009 at 1:18 AM, Igor Vaynberg <igor.vaynb...@gmail.com>wrote:
> well, its either we lock on the page, or you have to make sure all > your code is threadsafe. > > yes, this can be a problem for a lot of concurrent ajax requests, you > just have to make sure your responses are fast. eg if you have a > time-consuming operation do it in a background thread and make ajax > calls poll instead of block. > > -igor > > On Tue, Nov 10, 2009 at 2:09 PM, Pamir Erdem <pamir.er...@gmail.com> > wrote: > > Hi > > > > There are parts in web which make ajax calls. In this situtation on > request > > blocks the piece of code till it returns a value. Do you recommend > anything > > about ajax calls in a web page? > > > > Thanks > > Pamir > > On Tue, Nov 10, 2009 at 9:28 PM, Igor Vaynberg <igor.vaynb...@gmail.com > >wrote: > > > >> can you submit a quickstart that reproduces this? > >> > >> the lock on session only blocks concurrent requests from the browser, > >> which is usually not a big deal because most users operate one window > >> at a time. > >> > >> also we do not get the same results in our wicket-threadtest project. > >> > >> -igor > >> > >> On Tue, Nov 10, 2009 at 10:17 AM, Pamir Erdem <pamir.er...@gmail.com> > >> wrote: > >> > From wicket source code WebRequestCycleProcessor has a lock on > session. > >> > (Look at the source code below). > >> > From a profiler we can easily observe that %57 of the time is spent on > >> this > >> > function especially on lock region. > >> > Is there any way to speed it up this source code ? > >> > > >> > > >> > /** > >> > * @see > >> > > >> > org.apache.wicket.request.IRequestCycleProcessor#resolve(org.apache.wicket.RequestCycle, > >> > * org.apache.wicket.request.RequestParameters) > >> > */ > >> > public IRequestTarget resolve(final RequestCycle requestCycle, > >> > final RequestParameters requestParameters) > >> > { > >> > IRequestCodingStrategy requestCodingStrategy = > >> requestCycle.getProcessor() > >> > .getRequestCodingStrategy(); > >> > > >> > final String path = requestParameters.getPath(); > >> > IRequestTarget target = null; > >> > > >> > // See whether this request points to a bookmarkable page > >> > if (requestParameters.getBookmarkablePageClass() != null) > >> > { > >> > target = resolveBookmarkablePage(requestCycle, requestParameters); > >> > } > >> > // See whether this request points to a rendered page > >> > else if (requestParameters.getComponentPath() != null) > >> > { > >> > // marks whether or not we will be processing this request > >> > boolean processRequest = true; > >> > synchronized (requestCycle.getSession()) > >> > { > >> > // we need to check if this request has been flagged as > >> > // process-only-if-path-is-active and if so make sure this > >> > // condition is met > >> > if (requestParameters.isOnlyProcessIfPathActive()) > >> > { > >> > // this request has indeed been flagged as > >> > // process-only-if-path-is-active > >> > > >> > Session session = Session.get(); > >> > IPageMap pageMap = > >> > session.pageMapForName(requestParameters.getPageMapName(), > >> > false); > >> > if (pageMap == null) > >> > { > >> > // requested pagemap no longer exists - ignore this > >> > // request > >> > processRequest = false; > >> > } > >> > else if (pageMap instanceof AccessStackPageMap) > >> > { > >> > AccessStackPageMap accessStackPageMap = > (AccessStackPageMap)pageMap; > >> > if (accessStackPageMap.getAccessStack().size() > 0) > >> > { > >> > final Access access = > (Access)accessStackPageMap.getAccessStack() > >> > .peek(); > >> > > >> > final int pageId = Integer > >> > .parseInt(Strings.firstPathComponent(requestParameters > >> > .getComponentPath(), Component.PATH_SEPARATOR)); > >> > > >> > if (pageId != access.getId()) > >> > { > >> > // the page is no longer the active page > >> > // - ignore this request > >> > processRequest = false; > >> > } > >> > else > >> > { > >> > final int version = requestParameters.getVersionNumber(); > >> > if (version != Page.LATEST_VERSION && > >> > version != access.getVersion()) > >> > { > >> > // version is no longer the active version - > >> > // ignore this request > >> > processRequest = false; > >> > } > >> > } > >> > } > >> > } > >> > else > >> > { > >> > // TODO also this should work.. > >> > } > >> > } > >> > } > >> > if (processRequest) > >> > { > >> > try > >> > { > >> > target = resolveRenderedPage(requestCycle, requestParameters); > >> > } > >> > catch (IgnoreAjaxRequestException e) > >> > { > >> > target = EmptyAjaxRequestTarget.getInstance(); > >> > } > >> > } > >> > else > >> > { > >> > throw new PageExpiredException("Request cannot be processed"); > >> > } > >> > } > >> > // See whether this request points to a shared resource > >> > else if (requestParameters.getResourceKey() != null) > >> > { > >> > target = resolveSharedResource(requestCycle, requestParameters); > >> > } > >> > // See whether this request points to the home page > >> > else if (Strings.isEmpty(path) || ("/".equals(path))) > >> > { > >> > target = resolveHomePageTarget(requestCycle, requestParameters); > >> > } > >> > > >> > // NOTE we are doing the mount check as the last item, so that it > will > >> > // only be executed when everything else fails. This enables URLs > like > >> > // /foo/bar/?wicket:bookmarkablePage=my.Page to be resolved, where > >> > // is either a valid mount or a non-valid mount. I (Eelco) am not > >> > // absolutely sure this is a great way to go, but it seems to have > been > >> > // established as the default way of doing things. If we ever want to > >> > // tighten the algorithm up, it should be combined by going back to > >> > // unmounted paths so that requests with Wicket parameters like > >> > // 'bookmarkablePage' are always created and resolved in the same > >> > // fashion. There is a test for this in UrlMountingTest. > >> > if (target == null) > >> > { > >> > // still null? check for a mount > >> > target = requestCodingStrategy.targetForRequest(requestParameters); > >> > > >> > if (target == null && requestParameters.getComponentPath() != null) > >> > { > >> > // If the target is still null and there was a component path > >> > // then the Page could not be located in the session > >> > throw new PageExpiredException( > >> > "Cannot find the rendered page in session [pagemap=" + > >> > requestParameters.getPageMapName() + ",componentPath=" + > >> > requestParameters.getComponentPath() + ",versionNumber=" + > >> > requestParameters.getVersionNumber() + "]"); > >> > } > >> > } > >> > else > >> > { > >> > // a target was found, but not by looking up a mount. check whether > >> > // this is allowed > >> > if (Application.get().getSecuritySettings().getEnforceMounts() && > >> > requestCodingStrategy.pathForTarget(target) != null) > >> > { > >> > String msg = "Direct access not allowed for mounted targets"; > >> > // the target was mounted, but we got here via another path > >> > // : deny the request > >> > log.error(msg + " [request=" + requestCycle.getRequest() + > ",target=" > >> + > >> > target + > >> > ",session=" + Session.get() + "]"); > >> > throw new > >> > AbortWithWebErrorCodeException(HttpServletResponse.SC_FORBIDDEN, msg); > >> > } > >> > } > >> > > >> > // (WICKET-1356) in case no target was found, return null here. > >> > RequestCycle will deal with it > >> > // possible letting wicket filter to pass the request down the filter > >> > chain > >> > /* > >> > if (target == null) > >> > { > >> > // if we get here, we have no recognized Wicket target, and thus > >> > // regard this as a external (non-wicket) resource request on > >> > // this server > >> > return resolveExternalResource(requestCycle); > >> > } > >> > */ > >> > > >> > return target; > >> > } > >> > > >> > > >> > -- > >> > Pamir Erdem > >> > > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > >> For additional commands, e-mail: users-h...@wicket.apache.org > >> > >> > > > > > > -- > > Pamir Erdem > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > -- Pamir Erdem