search this list, google it. this has been answered on this list multiple times.
-igor On Tue, Nov 10, 2009 at 3:22 PM, Pamir Erdem <pamir.er...@gmail.com> wrote: > 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 > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org