[
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:55 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}
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)