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

Hudson commented on WW-4749:
----------------------------

SUCCESS: Integrated in Jenkins build Struts-JDK7-master #627 (See 
[https://builds.apache.org/job/Struts-JDK7-master/627/])
WW-4749 Implements buffered write (lukaszlenart: rev 
d739be34bccebbde2972c9e2c6225b94bad68d27)
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
WW-4749 Defines setter to allow specify useBufferedWriter (lukaszlenart: rev 
f5125bcd1bb97a75ab54e266399c2bf96987c1dc)
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
WW-4749 Drops writeIfCompleted and uses Boolean instead String (lukaszlenart: 
rev 1df89792f93fa71f374eef8a2b1a72b43cc28eab)
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
WW-4749 Uses ordinary boolean instead of Boolean (lukaszlenart: rev 
bbcd9dc2514b286065a16657d58418aa9ef4be75)
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
WW-4749 Fixes test (lukaszlenart: rev 6dad53c5e316b3be2551a1bab47ee71b64ac3542)
* (edit) 
core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
WW-4749 Uses Boolean to allow define behaviour per result (lukaszlenart: rev 
3034b3a97050bcb24e34f39b203a960a0ddca93e)
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
WW-4749 Uses writeIfCompleted to keep backward compatibility (lukaszlenart: rev 
38a2ebb72abd90c74bd52d6a81e3a0d967965c7b)
* (edit) 
core/src/test/java/org/apache/struts2/views/freemarker/FreeMarkerResultTest.java
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java
WW-4749 Renames local variable to better express its meaning (lukaszlenart: rev 
b842a4c779e45e1193e6319970c2dc6f52ec6bf1)
* (edit) 
core/src/main/java/org/apache/struts2/views/freemarker/FreemarkerResult.java


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

Reply via email to