org.apachewicket.protocol.http.WebRequestCycleProcessor

2009-11-10 Thread Pamir Erdem
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() 
 

Re: org.apachewicket.protocol.http.WebRequestCycleProcessor

2009-11-10 Thread Igor Vaynberg
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= +
        

Re: org.apachewicket.protocol.http.WebRequestCycleProcessor

2009-11-10 Thread Pamir Erdem
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.comwrote:

 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)
   {
   

Re: org.apachewicket.protocol.http.WebRequestCycleProcessor

2009-11-10 Thread Pamir Erdem
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.comwrote:

 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);
}
  
// 

Re: org.apachewicket.protocol.http.WebRequestCycleProcessor

2009-11-10 Thread Igor Vaynberg
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.comwrote:

 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 

Re: org.apachewicket.protocol.http.WebRequestCycleProcessor

2009-11-10 Thread Igor Vaynberg
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.comwrote:

 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