Re: OutOfMemoryException Processing Velocity Template

2005-05-11 Thread lawrence
)
at
  org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:604)
at
   
  org.apache.jk.common.ChannelSocket.processConnection(ChannelSo
  cket.java:562)
at
   
  org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
at
   
  org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
  ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
   
   So I suppose the question is, how effecient is
   ServletOutputStream?  When I use an
  FileOutputStream,
   very little memory is required.
   
   -L
   
   On Sat, May 07, 2005 at 11:43:03AM +0300,
  Ilkka Priha
   wrote:
   
   Maybe you are not referring to this memory eating
   template directly from VelocityServlet,
  but through
   some tool, #include, etc., which uses a nested
   StringWriter and not the servlet's
   OutputStreamWriter directly. According to
  your first
   post, the original oom exception was
  thrown by the
   Velocity Struts Tiles tool...
   
   -- Ilkka
   
   
   [EMAIL PROTECTED] wrote:
   
   Ok now I'm confused (suprise, suprise!).
I looked at the source for
   VelocityServlet, and mergeTemplate has:
   
   vw = (VelocityWriter) writerPool.get();
   
   if (vw == null)
   {
 vw = new VelocityWriter(new
   OutputStreamWriter(output, encoding),4 *
 1024, true);
   }
   else
   {
 vw.recycle(new
  OutputStreamWriter(output, encoding));
   }
   template.merge(context, vw);
   
   ===
   
   So the VelocityServlet DOES use
  OutputStreamWriter
   already ... so then why does it still utilize so
   much memory?
   
   -L
   
   On Fri, May 06, 2005 at 02:02:07PM -0700,
   [EMAIL PROTECTED] wrote:
   
   
   Alright, I changed the Writer to be:
   
   OutputStreamWriter w = new
  OutputStreamWriter(new
   FileOutputStream(test.html));
   
   And this fixes the memory problem.
   
   However, my application is running
  Velocity as a
   servlet, how should I extend the
  VelocityServlet
   to use an OutputStreamWriter intead of a
   StringWriter?  Should I post a different email
   thread about this?
   
   -L
   
   On Fri, May 06, 2005 at 01:59:19PM -0700, David
   You wrote:
   
   
   Well, Open a file, use a FileWriter.
   
   David
   
   
   -Original Message-
   From: [EMAIL PROTECTED]
   [mailto:[EMAIL PROTECTED]
   Sent: Friday, May 06, 2005 1:48 PM
   To: Velocity Users List
   Subject: Re: OutOfMemoryException
  Processing Velocity Template
   
   I printed out the available memory before and
   after I call
   mergeTemplate:
   
   Free memory before merge: 217393352
   Free memory after merge: 16271392
   
   so I would assume the StringWriter is
  approximately 200MB after the
   merge.   What should I use/do instead?
   
   -Lawrence
   
   On Fri, May 06, 2005 at 01:43:50PM
  -0700, David
   You wrote:
   
   
   Why do you use StringWriter? That is
  cached in
   the memory. How big is the StringWriter after
   the merge?
   
   David
   
   
   -Original Message-
   From: [EMAIL PROTECTED]
   [mailto:[EMAIL PROTECTED]
   Sent: Friday, May 06, 2005 1:22 PM
   To: Velocity Users List
   Subject: Re: OutOfMemoryException
  Processing Velocity Template
   
   Alright, I ran this little piece of code:
   
   public static void main( String
  args[] ) throws
   Exception  {
/* first, we init the runtime engine.
   Defaults are fine. */
   
Velocity.init();
   
/* lets make a Context and put
  data into it
*/
   
VelocityContext context = new
VelocityContext();
   
List results =
  ReportBean.runLargeReport();
   
context.put(List, results);
   
/* lets render a template */
   
StringWriter w = new StringWriter();
   
   
  Velocity.mergeTemplate(/myfile.vm, context, w );
System.out.println( template :  + w );
   
/* lets

Re: OutOfMemoryException Processing Velocity Template

2005-05-10 Thread lawrence
)
  at 
  
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
  at 
  
  org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
  at 
  
  org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
  at 
  org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at 
  
  org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
  at 
  
  org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
  at 
  
  org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
  at 
  org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
  at 
  org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
  at 
  org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:261)
  at 
  org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:360)
  at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:604)
  at 
  
  org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:562)
  at 
  org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
  at 
  
  org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
  at java.lang.Thread.run(Thread.java:534)
 
 So I suppose the question is, how effecient is ServletOutputStream?  When 
 I use an FileOutputStream, very little memory is required.
 
 -L
 
 On Sat, May 07, 2005 at 11:43:03AM +0300, Ilkka Priha wrote:
 
 Maybe you are not referring to this memory eating template directly from 
 VelocityServlet, but through some tool, #include, etc., which uses a 
 nested StringWriter and not the servlet's OutputStreamWriter directly. 
 According to your first post, the original oom exception was thrown by 
 the Velocity Struts Tiles tool...
 
 -- Ilkka
 
 
 [EMAIL PROTECTED] wrote:
 
 Ok now I'm confused (suprise, suprise!).   I looked at the source for 
 VelocityServlet, and mergeTemplate has:
 
 vw = (VelocityWriter) writerPool.get();
 
 if (vw == null)
 {
   vw = new VelocityWriter(new OutputStreamWriter(output, encoding),4 * 
   1024, true);
 }
 else
 {
   vw.recycle(new OutputStreamWriter(output, encoding));
 }
 template.merge(context, vw);
 
 ===
 
 So the VelocityServlet DOES use OutputStreamWriter already ... so then 
 why does it still utilize so much memory?
 
 -L
 
 On Fri, May 06, 2005 at 02:02:07PM -0700, [EMAIL PROTECTED] wrote:
 
 
 Alright, I changed the Writer to be:
 
 OutputStreamWriter w = new OutputStreamWriter(new 
 FileOutputStream(test.html));
 
 And this fixes the memory problem.
 
 However, my application is running Velocity as a servlet, how should I 
 extend the VelocityServlet to use an OutputStreamWriter intead of a 
 StringWriter?  Should I post a different email thread about this?
 
 -L
 
 On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
 
 
 Well, Open a file, use a FileWriter.
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
 Sent: Friday, May 06, 2005 1:48 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 I printed out the available memory before and after I call
 mergeTemplate:
 
 Free memory before merge: 217393352
 Free memory after merge: 16271392
 
 so I would assume the StringWriter is approximately 200MB after the
 merge.   What should I use/do instead?   
 
 -Lawrence
 
 On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
 
 
 Why do you use StringWriter? That is cached in the memory.
 How big is the StringWriter after the merge?
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
 Sent: Friday, May 06, 2005 1:22 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 Alright, I ran this little piece of code:
 
 public static void main( String args[] ) throws Exception
  {
  /* first, we init the runtime engine.  Defaults are fine. */
 
  Velocity.init();
 
  /* lets make a Context and put data into it */
 
  VelocityContext context = new VelocityContext();
 
  List results = ReportBean.runLargeReport();
  
  context.put(List, results);
  
  /* lets render a template */
 
  StringWriter w = new StringWriter();
 
  Velocity.mergeTemplate(/myfile.vm, context, w );
  System.out.println( template :  + w );
 
  /* lets make our own string to render */
  }
 
 results is a List of 66000 objects and requires about 8megs of memory.
 The mergeTemplate requires at least 230 MB of memory.   Any
 suggestions?
 
 -L
 
 On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
 
 
 Hi, 
 
 I guess the writer Ilkka talked about is when using Velocity as a
 standalone template engine.
 
 Right now I don't have a good clue, could you run Velocity as a
 standalone

Re: OutOfMemoryException Processing Velocity Template

2005-05-10 Thread lawrence
)
at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at

org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at

org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at

org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at

org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
at

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at

org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at

org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at

org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at

org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at

org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at

org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at

org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at

org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at

org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
at

org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:261)
at
org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:360)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:604)
at

org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:562)
at
org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
at

org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)
   
   So I suppose the question is, how effecient is ServletOutputStream?  When
   I use an FileOutputStream, very little memory is required.
   
   -L
   
   On Sat, May 07, 2005 at 11:43:03AM +0300, Ilkka Priha wrote:
   
   Maybe you are not referring to this memory eating template directly from
   VelocityServlet, but through some tool, #include, etc., which uses a
   nested StringWriter and not the servlet's OutputStreamWriter directly.
   According to your first post, the original oom exception was thrown by
   the Velocity Struts Tiles tool...
   
   -- Ilkka
   
   
   [EMAIL PROTECTED] wrote:
   
   Ok now I'm confused (suprise, suprise!).   I looked at the source for
   VelocityServlet, and mergeTemplate has:
   
   vw = (VelocityWriter) writerPool.get();
   
   if (vw == null)
   {
 vw = new VelocityWriter(new OutputStreamWriter(output, encoding),4 *
 1024, true);
   }
   else
   {
 vw.recycle(new OutputStreamWriter(output, encoding));
   }
   template.merge(context, vw);
   
   ===
   
   So the VelocityServlet DOES use OutputStreamWriter already ... so then
   why does it still utilize so much memory?
   
   -L
   
   On Fri, May 06, 2005 at 02:02:07PM -0700, [EMAIL PROTECTED] wrote:
   
   
   Alright, I changed the Writer to be:
   
   OutputStreamWriter w = new OutputStreamWriter(new
   FileOutputStream(test.html));
   
   And this fixes the memory problem.
   
   However, my application is running Velocity as a servlet, how should I
   extend the VelocityServlet to use an OutputStreamWriter intead of a
   StringWriter?  Should I post a different email thread about this?
   
   -L
   
   On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
   
   
   Well, Open a file, use a FileWriter.
   
   David
   
   
   -Original Message-
   From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
   Sent: Friday, May 06, 2005 1:48 PM
   To: Velocity Users List
   Subject: Re: OutOfMemoryException Processing Velocity Template
   
   I printed out the available memory before and after I call
   mergeTemplate:
   
   Free memory before merge: 217393352
   Free memory after merge: 16271392
   
   so I would assume the StringWriter is approximately 200MB after the
   merge.   What should I use/do instead?
   
   -Lawrence
   
   On Fri, May 06

Re: OutOfMemoryException Processing Velocity Template

2005-05-10 Thread lawrence
 VelocityWriter(new OutputStreamWriter(output, 
  encoding),4 *
   1024, true);
 }
 else
 {
   vw.recycle(new OutputStreamWriter(output, encoding));
 }
 template.merge(context, vw);
 
 ===
 
 So the VelocityServlet DOES use OutputStreamWriter already ... so 
 then
 why does it still utilize so much memory?
 
 -L
 
 On Fri, May 06, 2005 at 02:02:07PM -0700, [EMAIL PROTECTED] wrote:
 
 
 Alright, I changed the Writer to be:
 
 OutputStreamWriter w = new OutputStreamWriter(new
 FileOutputStream(test.html));
 
 And this fixes the memory problem.
 
 However, my application is running Velocity as a servlet, how 
 should I
 extend the VelocityServlet to use an OutputStreamWriter intead of 
 a
 StringWriter?  Should I post a different email thread about this?
 
 -L
 
 On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
 
 
 Well, Open a file, use a FileWriter.
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
 Sent: Friday, May 06, 2005 1:48 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 I printed out the available memory before and after I call
 mergeTemplate:
 
 Free memory before merge: 217393352
 Free memory after merge: 16271392
 
 so I would assume the StringWriter is approximately 200MB after 
 the
 merge.   What should I use/do instead?
 
 -Lawrence
 
 On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
 
 
 Why do you use StringWriter? That is cached in the memory.
 How big is the StringWriter after the merge?
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
 Sent: Friday, May 06, 2005 1:22 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 Alright, I ran this little piece of code:
 
 public static void main( String args[] ) throws Exception
  {
  /* first, we init the runtime engine.  Defaults are fine. 
  */
 
  Velocity.init();
 
  /* lets make a Context and put data into it */
 
  VelocityContext context = new VelocityContext();
 
  List results = ReportBean.runLargeReport();
 
  context.put(List, results);
 
  /* lets render a template */
 
  StringWriter w = new StringWriter();
 
  Velocity.mergeTemplate(/myfile.vm, context, w );
  System.out.println( template :  + w );
 
  /* lets make our own string to render */
  }
 
 results is a List of 66000 objects and requires about 8megs of 
 memory.
 The mergeTemplate requires at least 230 MB of memory.   Any
 suggestions?
 
 -L
 
 On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
 
 
 Hi,
 
 I guess the writer Ilkka talked about is when using Velocity 
 as a
 standalone template engine.
 
 Right now I don't have a good clue, could you run Velocity as a
 standalone template engine and render the page to see if there 
 is a
 huge memory usage?
 
 Cheers,
 
 Jian
 
 On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
 
 Sorry, I'm not sure what you mean by what kind of writer I'm
 
 using.   Where would I find out?   How would I change this (to 
 maybe a
 StringBuffer writer?)
 
 
 Also, each column contains a String that is at most, 200
 
 characters,
 
 
 most are closer to 10-20.   There are a total of 10 columns.
 
 
 Thanks.
 
 -Lawrence
 
 On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha wrote:
 
 
 What kind of writer are you using and how long are the 
 items? 66
 
 000 HTML
 
 
 table rows with 5 numeric columns consumes about 32 MB when
 
 buffered into a
 
 
 string writer. If the items are longer, it takes much more
 
 memory.
 
 
 -- Ilkka
 
 
 [EMAIL PROTECTED] wrote:
 
 
 I tried putting static HTML in the #foreach loop, same 
 problem.
 
 Then I
 
 
 tried setting the large list as a local varible:
 
 #set ($localList = $List)
 #foreach($row in $localList)
 ...
 
 but that didnt help either.   I don't see why velocity 
 should
 
 use
 
 
 250+ MB
 
 
 of memory iterating over a list ~8MB in size...
 -L
 
 On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
 
 
 
 Well, I don't have a good clue now.
 
 What about do the debugging step by step, i.e., use just
 
 static

Re: OutOfMemoryException Processing Velocity Template

2005-05-10 Thread lawrence
 before merge: 217393352
 Free memory after merge: 16271392
 
 so I would assume the StringWriter is approximately 
 200MB after the
 merge.   What should I use/do instead?
 
 -Lawrence
 
 On Fri, May 06, 2005 at 01:43:50PM -0700, David You 
 wrote:
 
 
 Why do you use StringWriter? That is cached in the 
 memory.
 How big is the StringWriter after the merge?
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
 Sent: Friday, May 06, 2005 1:22 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity 
 Template
 
 Alright, I ran this little piece of code:
 
 public static void main( String args[] ) throws 
 Exception
  {
  /* first, we init the runtime engine.  Defaults 
  are fine. */
 
  Velocity.init();
 
  /* lets make a Context and put data into it */
 
  VelocityContext context = new VelocityContext();
 
  List results = ReportBean.runLargeReport();
 
  context.put(List, results);
 
  /* lets render a template */
 
  StringWriter w = new StringWriter();
 
  Velocity.mergeTemplate(/myfile.vm, context, w );
  System.out.println( template :  + w );
 
  /* lets make our own string to render */
  }
 
 results is a List of 66000 objects and requires about 
 8megs of memory.
 The mergeTemplate requires at least 230 MB of memory. 
   Any
 suggestions?
 
 -L
 
 On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen 
 wrote:
 
 
 Hi,
 
 I guess the writer Ilkka talked about is when using 
 Velocity as a
 standalone template engine.
 
 Right now I don't have a good clue, could you run 
 Velocity as a
 standalone template engine and render the page to see 
 if there is a
 huge memory usage?
 
 Cheers,
 
 Jian
 
 On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
 
 Sorry, I'm not sure what you mean by what kind of 
 writer I'm
 
 using.   Where would I find out?   How would I change 
 this (to maybe a
 StringBuffer writer?)
 
 
 Also, each column contains a String that is at most, 
 200
 
 characters,
 
 
 most are closer to 10-20.   There are a total of 10 
 columns.
 
 
 Thanks.
 
 -Lawrence
 
 On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha 
 wrote:
 
 
 What kind of writer are you using and how long are 
 the items? 66
 
 000 HTML
 
 
 table rows with 5 numeric columns consumes about 32 
 MB when
 
 buffered into a
 
 
 string writer. If the items are longer, it takes 
 much more
 
 memory.
 
 
 -- Ilkka
 
 
 [EMAIL PROTECTED] wrote:
 
 
 I tried putting static HTML in the #foreach loop, 
 same problem.
 
 Then I
 
 
 tried setting the large list as a local varible:
 
 #set ($localList = $List)
 #foreach($row in $localList)
 ...
 
 but that didnt help either.   I don't see why 
 velocity should
 
 use
 
 
 250+ MB
 
 
 of memory iterating over a list ~8MB in size...
 -L
 
 On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen 
 wrote:
 
 
 
 Well, I don't have a good clue now.
 
 What about do the debugging step by step, i.e., 
 use just
 
 static
 
 
 html
 
 
 in your #foreach loop? Will that blow up the 
 memory?
 
 Cheers,
 
 Jian
 
 
 
 On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] 
 wrote:
 
 
 
 Thanks for the suggestion.   I tried putting 
 that, along with
 
 file.resource.loader.cache = true
 
 in my velocity.properties file.   Both did not 
 work.   Any
 
 other
 
 
 suggestions?
 
 Thanks

Re: OutOfMemoryException Processing Velocity Template

2005-05-09 Thread lawrence
)
at org.apache.jk.common.SocketConnection.runIt(ChannelSocket.java:679)
at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:534)

So I suppose the question is, how effecient is ServletOutputStream?  When I use 
an FileOutputStream, very little memory is required.

-L

On Sat, May 07, 2005 at 11:43:03AM +0300, Ilkka Priha wrote:
 Maybe you are not referring to this memory eating template directly from 
 VelocityServlet, but through some tool, #include, etc., which uses a nested 
 StringWriter and not the servlet's OutputStreamWriter directly. According 
 to your first post, the original oom exception was thrown by the Velocity 
 Struts Tiles tool...
 
 -- Ilkka
 
 
 [EMAIL PROTECTED] wrote:
 Ok now I'm confused (suprise, suprise!).   I looked at the source for 
 VelocityServlet, and mergeTemplate has:
 
 vw = (VelocityWriter) writerPool.get();
 
 if (vw == null)
 {
 vw = new VelocityWriter(new OutputStreamWriter(output, encoding),4 * 
 1024, true);
 }
 else
 {
 vw.recycle(new OutputStreamWriter(output, encoding));
 }
 template.merge(context, vw);
 
 ===
 
 So the VelocityServlet DOES use OutputStreamWriter already ... so then why 
 does it still utilize so much memory?
 
 -L
 
 On Fri, May 06, 2005 at 02:02:07PM -0700, [EMAIL PROTECTED] wrote:
 
 Alright, I changed the Writer to be:
 
 OutputStreamWriter w = new OutputStreamWriter(new 
 FileOutputStream(test.html));
 
 And this fixes the memory problem.
 
 However, my application is running Velocity as a servlet, how should I 
 extend the VelocityServlet to use an OutputStreamWriter intead of a 
 StringWriter?  Should I post a different email thread about this?
 
 -L
 
 On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
 
 Well, Open a file, use a FileWriter.
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
 Sent: Friday, May 06, 2005 1:48 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 I printed out the available memory before and after I call
 mergeTemplate:
 
 Free memory before merge: 217393352
 Free memory after merge: 16271392
 
 so I would assume the StringWriter is approximately 200MB after the
 merge.   What should I use/do instead?   
 
 -Lawrence
 
 On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
 
 Why do you use StringWriter? That is cached in the memory.
 How big is the StringWriter after the merge?
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
 Sent: Friday, May 06, 2005 1:22 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 Alright, I ran this little piece of code:
 
 public static void main( String args[] ) throws Exception
{
/* first, we init the runtime engine.  Defaults are fine. */
 
Velocity.init();
 
/* lets make a Context and put data into it */
 
VelocityContext context = new VelocityContext();
 
List results = ReportBean.runLargeReport();

context.put(List, results);

/* lets render a template */
 
StringWriter w = new StringWriter();
 
Velocity.mergeTemplate(/myfile.vm, context, w );
System.out.println( template :  + w );
 
/* lets make our own string to render */
}
 
 results is a List of 66000 objects and requires about 8megs of memory.
 The mergeTemplate requires at least 230 MB of memory.   Any
 suggestions?
 
 -L
 
 On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
 
 Hi, 
 
 I guess the writer Ilkka talked about is when using Velocity as a
 standalone template engine.
 
 Right now I don't have a good clue, could you run Velocity as a
 standalone template engine and render the page to see if there is a
 huge memory usage?
 
 Cheers,
 
 Jian
 
 On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
 Sorry, I'm not sure what you mean by what kind of writer I'm
 
 using.   Where would I find out?   How would I change this (to maybe a
 StringBuffer writer?)
 
 Also, each column contains a String that is at most, 200
 
 characters,
 
 most are closer to 10-20.   There are a total of 10 columns.
 
 Thanks.
 
 -Lawrence
 
 On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha wrote:
 
 What kind of writer are you using and how long are the items? 66
 
 000 HTML
 
 table rows with 5 numeric columns consumes about 32 MB when
 
 buffered into a
 
 string writer. If the items are longer, it takes much more
 
 memory.
 
 -- Ilkka
 
 
 [EMAIL PROTECTED] wrote:
 
 I tried putting static HTML in the #foreach loop, same problem.
 
 Then I
 
 tried setting the large list as a local varible:
 
 #set ($localList = $List)
 #foreach($row in $localList)
 ...
 
 but that didnt help either.   I don't see why velocity should
 
 use
 
 250+ MB
 
 of memory iterating over a list ~8MB in size...
 -L
 
 On Thu, May 05, 2005 at 02:56:28PM -0700, jian

Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
I tried putting static HTML in the #foreach loop, same problem.  Then I tried 
setting the large list as a local varible:

#set ($localList = $List)
#foreach($row in $localList)
...

but that didnt help either.   I don't see why velocity should use 250+ MB of 
memory iterating over a list ~8MB in size...  

-L

On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
 Well, I don't have a good clue now. 
 
 What about do the debugging step by step, i.e., use just static html
 in your #foreach loop? Will that blow up the memory?
 
 Cheers,
 
 Jian
 
 
 
 On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
  Thanks for the suggestion.   I tried putting that, along with
  
  file.resource.loader.cache = true
  
  in my velocity.properties file.   Both did not work.   Any other 
  suggestions?
  
  Thanks!
  
  -L
  
  On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:
   Hi,
  
   This maybe because you haven't turned on template caching. I had
   similar problem before, and even if I only used evaluate(...) method
   and load the template using my own java program, it happened when the
   for loop is lot of iterations.
  
   The bottom line for my problem is I need to turn on template caching,
   so, velocity will not try to cache the objects it parsed during each
   time of the iteration.
  
   I did:
   ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true);
  
   where ri is a runtime instance.
  
   Will this fix your issue?
  
   Cheers,
  
   Jian
  
  
   On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
I am getting an OutOfMemoryException:
   
org.apache.velocity.exception.MethodInvocationException: Invocation of 
method 'get' in  class org.apache.velocity.tools.struts.TilesTool threw 
exception class java.lang.OutOfMemoryError : null
   
when I am creating a large velocity file.  The vm file itself is fairly 
small, but this piece of velocity is causing the exception:
   
#foreach($row in $List)
tr
td height=20 class=tbltxt$!row.item1/td
td class=tbltxt$!row.item2/td
td class=tbltxt$!row.item3/td
td class=tbltxt$!row.item4/td
td class=tbltxt$!number.format('currency', $!row.item5)/td
/tr
#end
   
List is a list of relatively small objects (5-6 Strings, a couple of 
BigDecimals), but the List itself contains approximately 66,000 
entries.  Unfortunately, unless I set the tomcat JVM to use a heap size 
of at least 256M, this velocity template throws an OutOfMemoryException 
when it is being processed.
   
Any suggestions?
   
Thanks.
   
-L
   
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
   
   
  
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED]
  
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
  
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
Ok, I think I've located the problem, although I can't think of a reasonable 
solution.   

Basically, if I make the #foreach loop EMPTY, it uses barely any memory:
#foreach($row in $List)

#end

As I add more to the body of the #foreach:
#foreach($row in $List)
tr
/tr
#end

The amount of memory starts to grow (exponentially?).  

I did some playing around, and found that this:

#foreach($row in $List)
tr
td height=20 class=tbltxt$!row.item1/td
td class=tbltxt$!row.item2/td
td class=tbltxt$!row.item3/td
/tr
#end

Uses approximately 100+ MB of memory.   Something is going on ... but I have no 
clue what it is.

-L


On Fri, May 06, 2005 at 10:36:25AM -0700, [EMAIL PROTECTED] wrote:
 I tried putting static HTML in the #foreach loop, same problem.  Then I tried 
 setting the large list as a local varible:
 
 #set ($localList = $List)
 #foreach($row in $localList)
 ...
 
 but that didnt help either.   I don't see why velocity should use 250+ MB of 
 memory iterating over a list ~8MB in size...  
 
 -L
 
 On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
  Well, I don't have a good clue now. 
  
  What about do the debugging step by step, i.e., use just static html
  in your #foreach loop? Will that blow up the memory?
  
  Cheers,
  
  Jian
  
  
  
  On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
   Thanks for the suggestion.   I tried putting that, along with
   
   file.resource.loader.cache = true
   
   in my velocity.properties file.   Both did not work.   Any other 
   suggestions?
   
   Thanks!
   
   -L
   
   On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:
Hi,
   
This maybe because you haven't turned on template caching. I had
similar problem before, and even if I only used evaluate(...) method
and load the template using my own java program, it happened when the
for loop is lot of iterations.
   
The bottom line for my problem is I need to turn on template caching,
so, velocity will not try to cache the objects it parsed during each
time of the iteration.
   
I did:
ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true);
   
where ri is a runtime instance.
   
Will this fix your issue?
   
Cheers,
   
Jian
   
   
On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 I am getting an OutOfMemoryException:

 org.apache.velocity.exception.MethodInvocationException: Invocation 
 of method 'get' in  class org.apache.velocity.tools.struts.TilesTool 
 threw exception class java.lang.OutOfMemoryError : null

 when I am creating a large velocity file.  The vm file itself is 
 fairly small, but this piece of velocity is causing the exception:

 #foreach($row in $List)
 tr
 td height=20 class=tbltxt$!row.item1/td
 td class=tbltxt$!row.item2/td
 td class=tbltxt$!row.item3/td
 td class=tbltxt$!row.item4/td
 td class=tbltxt$!number.format('currency', $!row.item5)/td
 /tr
 #end

 List is a list of relatively small objects (5-6 Strings, a couple of 
 BigDecimals), but the List itself contains approximately 66,000 
 entries.  Unfortunately, unless I set the tomcat JVM to use a heap 
 size of at least 256M, this velocity template throws an 
 OutOfMemoryException when it is being processed.

 Any suggestions?

 Thanks.

 -L

 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]


   
-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
   
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED]
   
  
  
  -
  To unsubscribe, e-mail: [EMAIL PROTECTED]
  For additional commands, e-mail: [EMAIL PROTECTED]
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
Sorry, I'm not sure what you mean by what kind of writer I'm using.   Where 
would I find out?   How would I change this (to maybe a StringBuffer writer?)

Also, each column contains a String that is at most, 200 characters, most are 
closer to 10-20.   There are a total of 10 columns.

Thanks.

-Lawrence

On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha wrote:
 What kind of writer are you using and how long are the items? 66 000 HTML 
 table rows with 5 numeric columns consumes about 32 MB when buffered into a 
 string writer. If the items are longer, it takes much more memory.
 
 -- Ilkka
 
 
 [EMAIL PROTECTED] wrote:
 I tried putting static HTML in the #foreach loop, same problem.  Then I 
 tried setting the large list as a local varible:
 
 #set ($localList = $List)
 #foreach($row in $localList)
 ...
 
 but that didnt help either.   I don't see why velocity should use 250+ MB 
 of memory iterating over a list ~8MB in size...  
 -L
 
 On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
 
 Well, I don't have a good clue now. 
 
 What about do the debugging step by step, i.e., use just static html
 in your #foreach loop? Will that blow up the memory?
 
 Cheers,
 
 Jian
 
 
 
 On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
 Thanks for the suggestion.   I tried putting that, along with
 
 file.resource.loader.cache = true
 
 in my velocity.properties file.   Both did not work.   Any other 
 suggestions?
 
 Thanks!
 
 -L
 
 On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:
 
 Hi,
 
 This maybe because you haven't turned on template caching. I had
 similar problem before, and even if I only used evaluate(...) method
 and load the template using my own java program, it happened when the
 for loop is lot of iterations.
 
 The bottom line for my problem is I need to turn on template caching,
 so, velocity will not try to cache the objects it parsed during each
 time of the iteration.
 
 I did:
 ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true);
 
 where ri is a runtime instance.
 
 Will this fix your issue?
 
 Cheers,
 
 Jian
 
 
 On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
 I am getting an OutOfMemoryException:
 
 org.apache.velocity.exception.MethodInvocationException: Invocation of 
 method 'get' in  class org.apache.velocity.tools.struts.TilesTool 
 threw exception class java.lang.OutOfMemoryError : null
 
 when I am creating a large velocity file.  The vm file itself is 
 fairly small, but this piece of velocity is causing the exception:
 
 #foreach($row in $List)
 tr
 td height=20 class=tbltxt$!row.item1/td
 td class=tbltxt$!row.item2/td
 td class=tbltxt$!row.item3/td
 td class=tbltxt$!row.item4/td
 td class=tbltxt$!number.format('currency', $!row.item5)/td
 /tr
 #end
 
 List is a list of relatively small objects (5-6 Strings, a couple of 
 BigDecimals), but the List itself contains approximately 66,000 
 entries.  Unfortunately, unless I set the tomcat JVM to use a heap 
 size of at least 256M, this velocity template throws an 
 OutOfMemoryException when it is being processed.
 
 Any suggestions?
 
 Thanks.
 
 -L
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]
 
 .
 
 
 
 -
 To unsubscribe, e-mail: [EMAIL PROTECTED]
 For additional commands, e-mail: [EMAIL PROTECTED]

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
Alright, I ran this little piece of code:

public static void main( String args[] ) throws Exception
{
/* first, we init the runtime engine.  Defaults are fine. */

Velocity.init();

/* lets make a Context and put data into it */

VelocityContext context = new VelocityContext();

List results = ReportBean.runLargeReport();

context.put(List, results);

/* lets render a template */

StringWriter w = new StringWriter();

Velocity.mergeTemplate(/myfile.vm, context, w );
System.out.println( template :  + w );

/* lets make our own string to render */
}

results is a List of 66000 objects and requires about 8megs of memory.   The 
mergeTemplate requires at least 230 MB of memory.   Any suggestions?

-L

On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
 Hi, 
 
 I guess the writer Ilkka talked about is when using Velocity as a
 standalone template engine.
 
 Right now I don't have a good clue, could you run Velocity as a
 standalone template engine and render the page to see if there is a
 huge memory usage?
 
 Cheers,
 
 Jian
 
 On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
  Sorry, I'm not sure what you mean by what kind of writer I'm using.   
  Where would I find out?   How would I change this (to maybe a StringBuffer 
  writer?)
  
  Also, each column contains a String that is at most, 200 characters, most 
  are closer to 10-20.   There are a total of 10 columns.
  
  Thanks.
  
  -Lawrence
  
  On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha wrote:
   What kind of writer are you using and how long are the items? 66 000 HTML
   table rows with 5 numeric columns consumes about 32 MB when buffered into 
   a
   string writer. If the items are longer, it takes much more memory.
  
   -- Ilkka
  
  
   [EMAIL PROTECTED] wrote:
   I tried putting static HTML in the #foreach loop, same problem.  Then I
   tried setting the large list as a local varible:
   
   #set ($localList = $List)
   #foreach($row in $localList)
   ...
   
   but that didnt help either.   I don't see why velocity should use 250+ MB
   of memory iterating over a list ~8MB in size...
   -L
   
   On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
   
   Well, I don't have a good clue now.
   
   What about do the debugging step by step, i.e., use just static html
   in your #foreach loop? Will that blow up the memory?
   
   Cheers,
   
   Jian
   
   
   
   On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
   
   Thanks for the suggestion.   I tried putting that, along with
   
   file.resource.loader.cache = true
   
   in my velocity.properties file.   Both did not work.   Any other
   suggestions?
   
   Thanks!
   
   -L
   
   On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:
   
   Hi,
   
   This maybe because you haven't turned on template caching. I had
   similar problem before, and even if I only used evaluate(...) method
   and load the template using my own java program, it happened when the
   for loop is lot of iterations.
   
   The bottom line for my problem is I need to turn on template caching,
   so, velocity will not try to cache the objects it parsed during each
   time of the iteration.
   
   I did:
   ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE, true);
   
   where ri is a runtime instance.
   
   Will this fix your issue?
   
   Cheers,
   
   Jian
   
   
   On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
   
   I am getting an OutOfMemoryException:
   
   org.apache.velocity.exception.MethodInvocationException: Invocation 
   of
   method 'get' in  class org.apache.velocity.tools.struts.TilesTool
   threw exception class java.lang.OutOfMemoryError : null
   
   when I am creating a large velocity file.  The vm file itself is
   fairly small, but this piece of velocity is causing the exception:
   
   #foreach($row in $List)
   tr
   td height=20 class=tbltxt$!row.item1/td
   td class=tbltxt$!row.item2/td
   td class=tbltxt$!row.item3/td
   td class=tbltxt$!row.item4/td
   td class=tbltxt$!number.format('currency', $!row.item5)/td
   /tr
   #end
   
   List is a list of relatively small objects (5-6 Strings, a couple of
   BigDecimals), but the List itself contains approximately 66,000
   entries.  Unfortunately, unless I set the tomcat JVM to use a heap
   size of at least 256M, this velocity template throws an
   OutOfMemoryException when it is being processed.
   
   Any suggestions?
   
   Thanks.
   
   -L
   
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED]
   
   
   
   -
   To unsubscribe, e-mail: [EMAIL PROTECTED]
   For additional commands, e-mail: [EMAIL PROTECTED

Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
I printed out the available memory before and after I call mergeTemplate:

Free memory before merge: 217393352
Free memory after merge: 16271392

so I would assume the StringWriter is approximately 200MB after the merge.   
What should I use/do instead?   

-Lawrence

On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
 Why do you use StringWriter? That is cached in the memory.
 How big is the StringWriter after the merge?
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
 Sent: Friday, May 06, 2005 1:22 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 Alright, I ran this little piece of code:
 
 public static void main( String args[] ) throws Exception
 {
 /* first, we init the runtime engine.  Defaults are fine. */
 
 Velocity.init();
 
 /* lets make a Context and put data into it */
 
 VelocityContext context = new VelocityContext();
 
 List results = ReportBean.runLargeReport();
 
 context.put(List, results);
 
 /* lets render a template */
 
 StringWriter w = new StringWriter();
 
 Velocity.mergeTemplate(/myfile.vm, context, w );
 System.out.println( template :  + w );
 
 /* lets make our own string to render */
 }
 
 results is a List of 66000 objects and requires about 8megs of memory.
 The mergeTemplate requires at least 230 MB of memory.   Any
 suggestions?
 
 -L
 
 On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
  Hi, 
  
  I guess the writer Ilkka talked about is when using Velocity as a
  standalone template engine.
  
  Right now I don't have a good clue, could you run Velocity as a
  standalone template engine and render the page to see if there is a
  huge memory usage?
  
  Cheers,
  
  Jian
  
  On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
   Sorry, I'm not sure what you mean by what kind of writer I'm
 using.   Where would I find out?   How would I change this (to maybe a
 StringBuffer writer?)
   
   Also, each column contains a String that is at most, 200 characters,
 most are closer to 10-20.   There are a total of 10 columns.
   
   Thanks.
   
   -Lawrence
   
   On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha wrote:
What kind of writer are you using and how long are the items? 66
 000 HTML
table rows with 5 numeric columns consumes about 32 MB when
 buffered into a
string writer. If the items are longer, it takes much more memory.
   
-- Ilkka
   
   
[EMAIL PROTECTED] wrote:
I tried putting static HTML in the #foreach loop, same problem.
 Then I
tried setting the large list as a local varible:

#set ($localList = $List)
#foreach($row in $localList)
...

but that didnt help either.   I don't see why velocity should use
 250+ MB
of memory iterating over a list ~8MB in size...
-L

On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:

Well, I don't have a good clue now.

What about do the debugging step by step, i.e., use just static
 html
in your #foreach loop? Will that blow up the memory?

Cheers,

Jian



On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

Thanks for the suggestion.   I tried putting that, along with

file.resource.loader.cache = true

in my velocity.properties file.   Both did not work.   Any
 other
suggestions?

Thanks!

-L

On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:

Hi,

This maybe because you haven't turned on template caching. I
 had
similar problem before, and even if I only used evaluate(...)
 method
and load the template using my own java program, it happened
 when the
for loop is lot of iterations.

The bottom line for my problem is I need to turn on template
 caching,
so, velocity will not try to cache the objects it parsed
 during each
time of the iteration.

I did:
ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE,
 true);

where ri is a runtime instance.

Will this fix your issue?

Cheers,

Jian


On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

I am getting an OutOfMemoryException:

org.apache.velocity.exception.MethodInvocationException:
 Invocation of
method 'get' in  class
 org.apache.velocity.tools.struts.TilesTool
threw exception class java.lang.OutOfMemoryError : null

when I am creating a large velocity file.  The vm file itself
 is
fairly small, but this piece of velocity is causing the
 exception:

#foreach($row in $List)
tr
td height=20 class=tbltxt$!row.item1/td
td class=tbltxt$!row.item2/td
td class=tbltxt$!row.item3/td
td class=tbltxt$!row.item4/td
td class=tbltxt$!number.format('currency',
 $!row.item5)/td
/tr
#end

Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
Alright, I changed the Writer to be:

OutputStreamWriter w = new OutputStreamWriter(new 
FileOutputStream(test.html));

And this fixes the memory problem.

However, my application is running Velocity as a servlet, how should I extend 
the VelocityServlet to use an OutputStreamWriter intead of a StringWriter?  
Should I post a different email thread about this?

-L

On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
 Well, Open a file, use a FileWriter.
 
 David
 
 
 -Original Message-
 From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
 Sent: Friday, May 06, 2005 1:48 PM
 To: Velocity Users List
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 I printed out the available memory before and after I call
 mergeTemplate:
 
 Free memory before merge: 217393352
 Free memory after merge: 16271392
 
 so I would assume the StringWriter is approximately 200MB after the
 merge.   What should I use/do instead?   
 
 -Lawrence
 
 On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
  Why do you use StringWriter? That is cached in the memory.
  How big is the StringWriter after the merge?
  
  David
  
  
  -Original Message-
  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
  Sent: Friday, May 06, 2005 1:22 PM
  To: Velocity Users List
  Subject: Re: OutOfMemoryException Processing Velocity Template
  
  Alright, I ran this little piece of code:
  
  public static void main( String args[] ) throws Exception
  {
  /* first, we init the runtime engine.  Defaults are fine. */
  
  Velocity.init();
  
  /* lets make a Context and put data into it */
  
  VelocityContext context = new VelocityContext();
  
  List results = ReportBean.runLargeReport();
  
  context.put(List, results);
  
  /* lets render a template */
  
  StringWriter w = new StringWriter();
  
  Velocity.mergeTemplate(/myfile.vm, context, w );
  System.out.println( template :  + w );
  
  /* lets make our own string to render */
  }
  
  results is a List of 66000 objects and requires about 8megs of memory.
  The mergeTemplate requires at least 230 MB of memory.   Any
  suggestions?
  
  -L
  
  On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
   Hi, 
   
   I guess the writer Ilkka talked about is when using Velocity as a
   standalone template engine.
   
   Right now I don't have a good clue, could you run Velocity as a
   standalone template engine and render the page to see if there is a
   huge memory usage?
   
   Cheers,
   
   Jian
   
   On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
Sorry, I'm not sure what you mean by what kind of writer I'm
  using.   Where would I find out?   How would I change this (to maybe a
  StringBuffer writer?)

Also, each column contains a String that is at most, 200
 characters,
  most are closer to 10-20.   There are a total of 10 columns.

Thanks.

-Lawrence

On Fri, May 06, 2005 at 09:11:13PM +0300, Ilkka Priha wrote:
 What kind of writer are you using and how long are the items? 66
  000 HTML
 table rows with 5 numeric columns consumes about 32 MB when
  buffered into a
 string writer. If the items are longer, it takes much more
 memory.

 -- Ilkka


 [EMAIL PROTECTED] wrote:
 I tried putting static HTML in the #foreach loop, same problem.
  Then I
 tried setting the large list as a local varible:
 
 #set ($localList = $List)
 #foreach($row in $localList)
 ...
 
 but that didnt help either.   I don't see why velocity should
 use
  250+ MB
 of memory iterating over a list ~8MB in size...
 -L
 
 On Thu, May 05, 2005 at 02:56:28PM -0700, jian chen wrote:
 
 Well, I don't have a good clue now.
 
 What about do the debugging step by step, i.e., use just
 static
  html
 in your #foreach loop? Will that blow up the memory?
 
 Cheers,
 
 Jian
 
 
 
 On 5/5/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 
 Thanks for the suggestion.   I tried putting that, along with
 
 file.resource.loader.cache = true
 
 in my velocity.properties file.   Both did not work.   Any
  other
 suggestions?
 
 Thanks!
 
 -L
 
 On Thu, May 05, 2005 at 02:11:28PM -0700, jian chen wrote:
 
 Hi,
 
 This maybe because you haven't turned on template caching. I
  had
 similar problem before, and even if I only used
 evaluate(...)
  method
 and load the template using my own java program, it happened
  when the
 for loop is lot of iterations.
 
 The bottom line for my problem is I need to turn on template
  caching,
 so, velocity will not try to cache the objects it parsed
  during each
 time of the iteration.
 
 I did:
 ri.setProperty(RuntimeConstants.FILE_RESOURCE_LOADER_CACHE,
  true

Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
This is why I'm so confused.   I wouldn't expect it to use so much memory.  
What I did to test the memory usage was:

System.out.println(Free memory before merge:  + 
Runtime.getRuntime().freeMemory());
Velocity.mergeTemplate(/myfile.vm, ISO-8859-1, context, w );
System.out.println(Free memory after merge:  + 
Runtime.getRuntime().freeMemory());

And then setting the JVM to -Xms256M and -Xmx256M.   When I use a String 
writer, the free memory is reduced by ~200MB.   When I use an 
OutputStreamWriter, it is reduced ~13MB, a huge difference.

BTW, I am using 1.4.2_05

-L

On Fri, May 06, 2005 at 02:22:01PM -0700, Will Glass-Husain wrote:
 Hi Lawrence,
 
 I got interested, and just ran some similar code with JProfiler looking at 
 VM memory usage.  I created a list of 60,000 objects, each with 10 100char 
 columns.  Then I used StringWriter to merge as you did.
 
 The VM used 3MB at the start, 6.5 MB after creating the list, and 25 after 
 merging.  (before I closed the writer).  Nowhere close to 200.  So perhaps 
 there's something else going on.  Although if the problem is one with 
 StringWriter, a lot may depend on the specific JVM you're using.  (I'm 
 using Sun 1.4.2_04-b05).
 
 WILL
 
 - Original Message - 
 From: [EMAIL PROTECTED]
 To: Velocity Users List velocity-user@jakarta.apache.org
 Sent: Friday, May 06, 2005 2:08 PM
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 
 Ok now I'm confused (suprise, suprise!).   I looked at the source for 
 VelocityServlet, and mergeTemplate has:
 
 vw = (VelocityWriter) writerPool.get();
 
 if (vw == null)
 {
vw = new VelocityWriter(new OutputStreamWriter(output, encoding),4 * 
 1024, true);
 }
 else
 {
vw.recycle(new OutputStreamWriter(output, encoding));
 }
 template.merge(context, vw);
 
 ===
 
 So the VelocityServlet DOES use OutputStreamWriter already ... so then why 
 does it still utilize so much memory?
 
 -L
 
 On Fri, May 06, 2005 at 02:02:07PM -0700, [EMAIL PROTECTED] wrote:
 Alright, I changed the Writer to be:
 
 OutputStreamWriter w = new OutputStreamWriter(new 
 FileOutputStream(test.html));
 
 And this fixes the memory problem.
 
 However, my application is running Velocity as a servlet, how should I 
 extend the VelocityServlet to use an OutputStreamWriter intead of a 
 StringWriter?  Should I post a different email thread about this?
 
 -L
 
 On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
  Well, Open a file, use a FileWriter.
 
  David
 
 
  -Original Message-
  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
  Sent: Friday, May 06, 2005 1:48 PM
  To: Velocity Users List
  Subject: Re: OutOfMemoryException Processing Velocity Template
 
  I printed out the available memory before and after I call
  mergeTemplate:
 
  Free memory before merge: 217393352
  Free memory after merge: 16271392
 
  so I would assume the StringWriter is approximately 200MB after the
  merge.   What should I use/do instead?
 
  -Lawrence
 
  On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
   Why do you use StringWriter? That is cached in the memory.
   How big is the StringWriter after the merge?
  
   David
  
  
   -Original Message-
   From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
   Sent: Friday, May 06, 2005 1:22 PM
   To: Velocity Users List
   Subject: Re: OutOfMemoryException Processing Velocity Template
  
   Alright, I ran this little piece of code:
  
   public static void main( String args[] ) throws Exception
   {
   /* first, we init the runtime engine.  Defaults are fine. */
  
   Velocity.init();
  
   /* lets make a Context and put data into it */
  
   VelocityContext context = new VelocityContext();
  
   List results = ReportBean.runLargeReport();
  
   context.put(List, results);
  
   /* lets render a template */
  
   StringWriter w = new StringWriter();
  
   Velocity.mergeTemplate(/myfile.vm, context, w );
   System.out.println( template :  + w );
  
   /* lets make our own string to render */
   }
  
   results is a List of 66000 objects and requires about 8megs of 
   memory.
   The mergeTemplate requires at least 230 MB of memory.   Any
   suggestions?
  
   -L
  
   On Fri, May 06, 2005 at 11:53:30AM -0700, jian chen wrote:
Hi,
   
I guess the writer Ilkka talked about is when using Velocity as a
standalone template engine.
   
Right now I don't have a good clue, could you run Velocity as a
standalone template engine and render the page to see if there is a
huge memory usage?
   
Cheers,
   
Jian
   
On 5/6/05, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 Sorry, I'm not sure what you mean by what kind of writer I'm
   using.   Where would I find out?   How would I change this (to maybe 
   a
   StringBuffer writer?)

 Also, each column contains a String that is at most, 200
  characters,
   most are closer to 10-20

Re: OutOfMemoryException Processing Velocity Template

2005-05-06 Thread lawrence
Ok I tried using JProfiler and used a StringWriter, and found that the item 
that was taking the most memory (150 MB) was. char[]!  Ok now I'm 
completely stumped and clueless.

-L

On Fri, May 06, 2005 at 02:51:15PM -0700, Will Glass-Husain wrote:
 You might consider trying a profiler.  Most of them have trial version 
 available.  This could tell you exactly where the memory is going.
 
 I just bought JProfiler, and it seems a bit better priced than the others. 
 Here's a user review:
 http://www.jlamp.com/blog/2005/02/01/1107280975000.html
 
 You might also check out Hyades from the Eclipse project for an open source 
 option.
 
 WILL
 
 
 - Original Message - 
 From: [EMAIL PROTECTED]
 To: Velocity Users List velocity-user@jakarta.apache.org
 Sent: Friday, May 06, 2005 2:39 PM
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 
 This is why I'm so confused.   I wouldn't expect it to use so much memory. 
 What I did to test the memory usage was:
 
 System.out.println(Free memory before merge:  + 
 Runtime.getRuntime().freeMemory());
 Velocity.mergeTemplate(/myfile.vm, ISO-8859-1, context, w );
 System.out.println(Free memory after merge:  + 
 Runtime.getRuntime().freeMemory());
 
 And then setting the JVM to -Xms256M and -Xmx256M.   When I use a String 
 writer, the free memory is reduced by ~200MB.   When I use an 
 OutputStreamWriter, it is reduced ~13MB, a huge difference.
 
 BTW, I am using 1.4.2_05
 
 -L
 
 On Fri, May 06, 2005 at 02:22:01PM -0700, Will Glass-Husain wrote:
 Hi Lawrence,
 
 I got interested, and just ran some similar code with JProfiler looking 
 at
 VM memory usage.  I created a list of 60,000 objects, each with 10 
 100char
 columns.  Then I used StringWriter to merge as you did.
 
 The VM used 3MB at the start, 6.5 MB after creating the list, and 25 
 after
 merging.  (before I closed the writer).  Nowhere close to 200.  So 
 perhaps
 there's something else going on.  Although if the problem is one with
 StringWriter, a lot may depend on the specific JVM you're using.  (I'm
 using Sun 1.4.2_04-b05).
 
 WILL
 
 - Original Message - 
 From: [EMAIL PROTECTED]
 To: Velocity Users List velocity-user@jakarta.apache.org
 Sent: Friday, May 06, 2005 2:08 PM
 Subject: Re: OutOfMemoryException Processing Velocity Template
 
 
 Ok now I'm confused (suprise, suprise!).   I looked at the source for
 VelocityServlet, and mergeTemplate has:
 
 vw = (VelocityWriter) writerPool.get();
 
 if (vw == null)
 {
vw = new VelocityWriter(new OutputStreamWriter(output, encoding),4 *
 1024, true);
 }
 else
 {
vw.recycle(new OutputStreamWriter(output, encoding));
 }
 template.merge(context, vw);
 
 ===
 
 So the VelocityServlet DOES use OutputStreamWriter already ... so then 
 why
 does it still utilize so much memory?
 
 -L
 
 On Fri, May 06, 2005 at 02:02:07PM -0700, [EMAIL PROTECTED] wrote:
 Alright, I changed the Writer to be:
 
 OutputStreamWriter w = new OutputStreamWriter(new
 FileOutputStream(test.html));
 
 And this fixes the memory problem.
 
 However, my application is running Velocity as a servlet, how should I
 extend the VelocityServlet to use an OutputStreamWriter intead of a
 StringWriter?  Should I post a different email thread about this?
 
 -L
 
 On Fri, May 06, 2005 at 01:59:19PM -0700, David You wrote:
  Well, Open a file, use a FileWriter.
 
  David
 
 
  -Original Message-
  From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
  Sent: Friday, May 06, 2005 1:48 PM
  To: Velocity Users List
  Subject: Re: OutOfMemoryException Processing Velocity Template
 
  I printed out the available memory before and after I call
  mergeTemplate:
 
  Free memory before merge: 217393352
  Free memory after merge: 16271392
 
  so I would assume the StringWriter is approximately 200MB after the
  merge.   What should I use/do instead?
 
  -Lawrence
 
  On Fri, May 06, 2005 at 01:43:50PM -0700, David You wrote:
   Why do you use StringWriter? That is cached in the memory.
   How big is the StringWriter after the merge?
  
   David
  
  
   -Original Message-
   From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
   Sent: Friday, May 06, 2005 1:22 PM
   To: Velocity Users List
   Subject: Re: OutOfMemoryException Processing Velocity Template
  
   Alright, I ran this little piece of code:
  
   public static void main( String args[] ) throws Exception
   {
   /* first, we init the runtime engine.  Defaults are fine. 
   */
  
   Velocity.init();
  
   /* lets make a Context and put data into it */
  
   VelocityContext context = new VelocityContext();
  
   List results = ReportBean.runLargeReport();
  
   context.put(List, results);
  
   /* lets render a template */
  
   StringWriter w = new StringWriter();
  
   Velocity.mergeTemplate(/myfile.vm, context, w );
   System.out.println( template :  + w );
  
   /* lets make our own string to render

OutOfMemoryException Processing Velocity Template

2005-05-05 Thread lawrence
I am getting an OutOfMemoryException:

org.apache.velocity.exception.MethodInvocationException: Invocation of method 
'get' in  class org.apache.velocity.tools.struts.TilesTool threw exception 
class java.lang.OutOfMemoryError : null

when I am creating a large velocity file.  The vm file itself is fairly small, 
but this piece of velocity is causing the exception:

#foreach($row in $List)
tr
td height=20 class=tbltxt$!row.item1/td
td class=tbltxt$!row.item2/td
td class=tbltxt$!row.item3/td
td class=tbltxt$!row.item4/td
td class=tbltxt$!number.format('currency', $!row.item5)/td
/tr
#end

List is a list of relatively small objects (5-6 Strings, a couple of 
BigDecimals), but the List itself contains approximately 66,000 entries.  
Unfortunately, unless I set the tomcat JVM to use a heap size of at least 256M, 
this velocity template throws an OutOfMemoryException when it is being 
processed.   

Any suggestions?

Thanks.

-L

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: render.eval()

2004-09-21 Thread Lawrence . Siden
Let's try this a little differently, so the intent is more obvious.  This 
code is taken from a DVSL #match fragment that outputs Latex.  The lines 
beginning with '%' are Latex comments.

#set($aString = )
#set($render = 
$aString.class.forName(org.apache.velocity.tools.generic.RenderTool).newInstance())
#set($name = foo)
#set($value = bar)
% $render.eval($context, '#set($$name = $value)' )
% I want to see 'bar' here: $foo
% FYI: \$context is $context

When run on suitable input, the output of this fragment is:

 % $render.eval($context, 
'#set($$name = $value)' )
 % I want to see 'bar' here: $foo
 % FYI: $context is 
[EMAIL PROTECTED]


Larry Siden, IBS consultant, Viper team
x72612



Shinobu Kawai [EMAIL PROTECTED] 
09/20/2004 06:23 PM
Please respond to
Velocity Users List [EMAIL PROTECTED]


To
Velocity Users List [EMAIL PROTECTED]
cc

Subject
Re: render.eval()






Hi Larry,

 Why doesn't the following work while I'm running DVSL?:
 
 #set($aString = )
 #set($render = 
 
$aString.class.forName(org.apache.velocity.tools.generic.RenderTool).newInstance())
 
   #foreach($param in $params)
What's in $params?

 #set($name = $param.attrib(name))
 #set($value = $o.get($name))
What's in $o?

   ##set($s1 = #set($$name = '$value'))
Are you deliberately commenting here?

   % $render.eval($context, '#set($$name = $value)' )
   % $render.eval($context, $name = $$name)
 #end
 
 It prints 
 
  % $render.eval($context, '#set($$name = $value)' )
  % $render.eval($context, $name = $$name)
And last but most important, how do you want it to print?

Best regards,
-- Shinobu Kawai

-- 
Shinobu Kawai([EMAIL PROTECTED])

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




RE: render.eval()

2004-09-21 Thread Lawrence . Siden

Return Receipt
   
Your  RE: render.eval()
document   
:  
   
was   Lawrence Siden/MSCsoftware   
received   
by:
   
at:   09/21/2004 09:30:10 AM   
   





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: render.eval()

2004-09-21 Thread Lawrence . Siden

Return Receipt
   
Your  RE: render.eval()
document   
:  
   
was   Lawrence Siden/MSCsoftware   
received   
by:
   
at:   09/21/2004 09:38:08 AM   
   





-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Using beans with index array interfaces

2001-12-12 Thread Gary Lawrence Murphy


I'm about to inherit some data access beans that only provide indexed
array methods; is there a simple way to handle this in velocity or
must I write a wrapper object?

I also ran into this problem trying to provide org.w3c.dom.Document
objects; Document is an interface, so it's awkward to create a subclass
that only adds List/Map wrappers over the NodeMap and NodeList
methods.

-- 
Gary Lawrence Murphy [EMAIL PROTECTED] TeleDynamics Communications Inc
Business Innovations Through Open Source Systems: http://www.teledyn.com
Computers are useless.  They can only give you answers.(Pablo Picasso)


--
To unsubscribe, e-mail:   mailto:[EMAIL PROTECTED]
For additional commands, e-mail: mailto:[EMAIL PROTECTED]