[ https://issues.apache.org/jira/browse/WW-4749?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15988631#comment-15988631 ]
Lorenzo Bernacchioni edited comment on WW-4749 at 4/28/17 10:57 AM: -------------------------------------------------------------------- Uhm.. the change from {{Boolean}} to {{boolean}} leads to {code} final boolean willUseBufferedWriter = isUseBufferedWriter() || template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; {code} So we fall again in the issue of my scenario: if I'm adopting a {{TemplateExceptionHandler.RETHROW_HANDLER}} policy I can't prevent the use {{bufferedWriter}}, because the line above is always {{true}}. The use of {{Boolean}} let you force the behaviour in both ways. Leave it as {{null}} to let the behaviour depend on the TemplateExceptionHandler policy. {code} private Boolean useBufferedWriter = null; [...] final boolean willUseBufferedWriter; if (useBufferedWriter != null) { willUseBufferedWriter = useBufferedWriter; } else { willUseBufferedWriter = template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; } {code} was (Author: fustaki): Uhm.. the change from {{Boolean}} to {{boolean}} leads to {code} final boolean willUseBufferedWriter = isUseBufferedWriter() || template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; {code} So we fall again in the issue of my scenario: if I'm adopting a {{TemplateExceptionHandler.RETHROW_HANDLER}} policy I can't prevent the use {{bufferedWriter}}, because the line above is always {{true}}. The use of {{Boolean}} let you force the behaviour in both ways. Leave it as {{null}} to let the behaviour depend on the TemplateExceptionHandler policy. {code} final boolean willUseBufferedWriter; if (useBufferedWriter != null) { willUseBufferedWriter = useBufferedWriter; } else { willUseBufferedWriter = template.getTemplateExceptionHandler() == TemplateExceptionHandler.RETHROW_HANDLER; } {code} > Buffer/Flush behaviour in FreemarkerResult > ------------------------------------------ > > Key: WW-4749 > URL: https://issues.apache.org/jira/browse/WW-4749 > Project: Struts 2 > Issue Type: Improvement > Components: Core Results > Affects Versions: 2.3.31, 2.5.1 > Reporter: Lorenzo Bernacchioni > Assignee: Lukasz Lenart > Priority: Minor > Fix For: 2.5.next > > > Scenario: the application use freemarker with a > {{TemplateExceptionHandler.RETHROW_HANDLER}} policy, but occasionally needs > to produce large XML (20~200Mb) and goes out of memory. > In > [FreemarkerResult|http://grepcode.com/file/repo1.maven.org/maven2/org.apache.struts/struts2-core/2.5-BETA1/org/apache/struts2/views/freemarker/FreemarkerResult.java#191] > there are two possible behaviours (line 191): > * *Buffer-behaviour*: the whole template is processed and if everything is > OK it is flushed to the output, otherwise an exception is thrown and handled > at higher level before any output has been sent. This is intended to be used > when {{TemplateExceptionHandler.RETHROW_HANDLER}} is active > * *Flush-behaviour*: template is processed and flushed according to > freemarker library policies, used with any other {{TemplateExceptionHandler}} > Since {{TemplateExceptionHandler}} cannot be switched for a given request (it > is a global configuration embedded in {{FreemarkerManager}}) there is no way > to force a Flush-behaviour. (you can only force a Buffer-behaviour using > {{isWriteIfCompleted}}) > I implemented a more flexible solution that let you force the behaviour in > both ways: > {code:title=FreemarkerResult.java|borderStyle=solid} > final boolean willUsebufferedWriter; > if (useBufferedWriter != null){ > willUsebufferedWriter = useBufferedWriter; > }else{ > willUsebufferedWriter = configuration.getTemplateExceptionHandler() > == TemplateExceptionHandler.RETHROW_HANDLER; > } > > if (willUsebufferedWriter){ > ... > }else{ > ... > } > {code} > where {{useBufferedWriter}} is a parameter that can be modified per request > {code} > <result type="freemarker"> > <param name="location">big_feed.ftl</param> > <param name="contentType">text/xml</param> > <param name="useBufferedWriter">false</param> > </result> > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)