You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Maurizio Cucchiara (JIRA)" <ji...@apache.org> on 2013/06/12 12:54:20 UTC

[jira] [Commented] (WW-4062) Invalid OGNL expressions are not cached

    [ https://issues.apache.org/jira/browse/WW-4062?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13681110#comment-13681110 ] 

Maurizio Cucchiara commented on WW-4062:
----------------------------------------

I'm not sure I understand what you mean.
Invalid OGNL expressions are not cached, that's correct. And considering this, how the memory usage could increase?

Unfortunately the stacktrace doesn't give us more information as it is an expected behavior.

You should provide some other details: for instance 

# how is the memory usage related with the {{OgnlUtil#compile}} method? 
# how did you experienced the memory usage increment? 
                
> Invalid OGNL expressions are not cached
> ---------------------------------------
>
>                 Key: WW-4062
>                 URL: https://issues.apache.org/jira/browse/WW-4062
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Value Stack
>    Affects Versions: 2.3.14
>            Reporter: Saulius Tvarijonas
>             Fix For: 2.3.x
>
>
> I am using velocity to render results page. During performance optimizations I noticed significant memory usage from *com.opensymphony.xwork2.ognl.OgnlUtil#compile*. There is caching implemented in OgnlUtil, but if expression compilation fails, it is not cached.
> I am not really sure if this problem is in struts or velocity engine. But situation is following:
> # In velocity template trying to render string *<p>$!foo</p>*
> # If value is null, velocity calls *org.apache.velocity.runtime.parser.node.ASTReference#getNullString*
> # Internally there is call to *context.get(".literal." + nullString)*
> # And this ".literal." expression always reaches *OgnlUtil#compile* and compilation fails.
> Below is stacktrace for more details:
> {code}
> at com.opensymphony.xwork2.ognl.OgnlUtil.compile(OgnlUtil.java:248)
> at com.opensymphony.xwork2.ognl.OgnlUtil.getValue(OgnlUtil.java:236)
> at com.opensymphony.xwork2.ognl.OgnlValueStack.getValueUsingOgnl(OgnlValueStack.java:291)
> at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValue(OgnlValueStack.java:274)
> at com.opensymphony.xwork2.ognl.OgnlValueStack.tryFindValueWhenExpressionIsNotNull(OgnlValueStack.java:256)
> at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:236)
> at com.opensymphony.xwork2.ognl.OgnlValueStack.findValue(OgnlValueStack.java:298)
> at org.apache.struts2.dispatcher.StrutsRequestWrapper.getAttribute(StrutsRequestWrapper.java:82)
> at org.apache.velocity.tools.view.context.ChainedContext.getAttribute(Unknown Source:-1)
> at org.apache.velocity.tools.view.context.ChainedContext.internalGet(Unknown Source:-1)
> at org.apache.velocity.context.AbstractContext.get(AbstractContext.java:193)
> at org.apache.velocity.context.InternalContextAdapterImpl.get(InternalContextAdapterImpl.java:267)
> at org.apache.velocity.runtime.parser.node.ASTReference.getNullString(ASTReference.java:510)
> at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:465)
> at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
> at org.apache.velocity.runtime.parser.node.ASTStringLiteral.value(ASTStringLiteral.java:330)
> at org.apache.velocity.runtime.parser.node.ASTExpression.value(ASTExpression.java:71)
> at org.apache.velocity.runtime.parser.node.ASTSetDirective.render(ASTSetDirective.java:142)
> at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
> at org.apache.velocity.runtime.directive.Parse.render(Parse.java:260)
> at org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:207)
> at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:342)
> at org.apache.velocity.Template.merge(Template.java:356)
> at org.apache.velocity.Template.merge(Template.java:260)
> at org.apache.struts2.dispatcher.VelocityResult.doExecute(VelocityResult.java:156)
> at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira