What version of OGNL are you using?  There is a known serious issue
affecting 2.6.11:

http://jira.opensymphony.com/browse/OGNL-141
http://blog.opencomponentry.com/2008/02/01/ognl-272-released/

Ben


On Fri, Jan 9, 2009 at 4:42 PM, Aaron Kaminsky
<aar...@adaptiveplanning.com>wrote:

> Hi all,
>
> I am having some serious performance issues with OGNL in my production
> environment (Apache/Tomcat with Tapestry 4.1.3).  I have also reproduced the
> problem in a test environment using Tomcat with Tapestry 4.1.6.  The
> situation is related to the caching serialization question I had earlier,
> but that question got no takers.  Now that it has become an issue for me in
> production, I am hoping this test case will generate some advice from anyone
> who has already dealt with this.
>
> As a simple test case I have two pages, SlowPage and FastPage.  My problem
> is that sometimes the fast page is blocked behind the slow page.  In my
> application I do have some actions that result in very long hits (> 10
> minutes).  This is expected for that action, but it is not expected that
> other hits become blocked by this single long running hit.
>
> Here is my test case.  See the code below.  If I start Tomcat fresh and
> open two different browsers, I can first hit SlowPage, then in the other
> browser hit FastPage.  The OGNL expression cache locks while evaluating the
> expression on SlowPage, and does not release the lock to allow FastPage to
> proceed until it is done.  The result is that all un-cached expressions are
> blocked for the duration.  So, has anyone else run into this?  Is it a best
> practice to never put expensive operations as OGNL expressions?  That is
> unexpected, so I am still hoping that there is another way around this
> problem.  Note that if the experiment is repeated the expression is not
> recompiled, I think.  At least, the hits are no longer blocked.
>
> TestPage.java
>
> public abstract class TestPage extends BasePage {
>  public String getSlowString() {
>   // ... cut here, wait 20 second
>   return "This takes at least 20 seconds to return";
>  }
>
>  public String getFastString() {
>   // no waiting here
>   return "This string is fast";
>  }
> }
>
> Then I have two simple pages, each using the TestPage class and having a
> single Insert component:
>
> SlowPage.page
>  <?xml version="1.0" encoding="UTF-8"?>
>  <!DOCTYPE page-specification PUBLIC
>   "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
>   "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd";>
>  <page-specification class="com.adaptiveplanning.ui.page.TestPage">
>  </page-specification>
>
> SlowPage.html
>  <html>
>  <head><title>Slow Page</title></head>
>  <span jwcid="$content$">
>
>  <body>
>   <span jwcid="@Insert" value="ognl:slowString">Slow String</span>
>  </body>
>
>  </span>
>  </html>
>
> FastPage.page
>  <?xml version="1.0" encoding="UTF-8"?>
>  <!DOCTYPE page-specification PUBLIC
>   "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
>   "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd";>
>  <page-specification class="com.adaptiveplanning.ui.page.TestPage">
>  </page-specification>
>
> FastPage.html
>  <html>
>  <head><title>Fast Page</title></head>
>  <span jwcid="$content$">
>
>  <body>
>   <span jwcid="@Insert" value="ognl:fastString">Fast String</span>
>  </body>
>
>  </span>
>  </html>
>
> Here is my earlier message, to continue the thread (from 2008-07-03):
>
> Hi all,
>
> I am struggling to understand what is going on with OGNL
> compilation/caching in Tapestry 4.1.3.
> My first question is regarding the caching of compiled OGNL expressions.
>  From my reading of the code it looks like the entire application serializes
> through the ExpressionCacheImpl.java lock.  What am I missing?  Doesn't that
> mean that if I have an expression that is very expensive to evaluate that
> all other hits will be blocked with that expression is evaluated?  Or is
> that not what the compilation does?  Has anyone else experienced any
> performance problems that they can trace to this locking/serialization?
>
> My second question has been asked before on this list, but has not been
> answered (I think).  Why is a given OGNL expression evaluated multiple times
> in a single instance?  Is there any way to turn that off or work around it?
>
> I have been trying to dig into the source code to figure this out, but I
> think I am getting lost in the details.  Can someone please explain this or
> point me at the information I need?
>
> Thanks and regards,
> Aaron
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>

Reply via email to