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

Reply via email to