You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by "Hoying, Ken" <Ke...@PremierInc.com> on 2008/05/21 15:42:03 UTC

[S2] Advice on Handling CLOBs in Struts2

Generally when working with Struts2, we have been loading a domaon
object from the database in our action and then sending then referencing
the properties as needed from the JSP to generate our output.  

However, we now what could potentially be a large amount of data stored
in a CLOB.  Using the method that we have been using to date, we would
have to place the entire CLOB in a string in the action and then access
it from the JSP.  Obviously, we would like to avoid doing that.  

I was wondering if anyone else had come across this and how they had
managed to solve it.  How do we stream the content of the CLOB?

Thank you!
Ken

RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
 Sorry, I misunderstood what you were asking.  I believe that it
probably does use the current request response.  

I guess I am a bit confused then on the action tag.  Does it or does it
not support content from a streamed result?  Is this intended
functionality or a bug?  I am able to use the action tag to JSP result.
I get an error if I try to use a stream result.  I get an error if I try
to get the response outputstream in the JSP and write to it.  I get an
error if I try to get the response outputstream in my action and write
to it.

It was my impression from the documentation surrounding the result
stream and the action tag, that my approach of using the stream result
type and calling the associated action using the action tag would be the
proper way to stream my CLOB to the page.

I guess I am going about this the wrong way.  What is the correct way
then to stream a large amount of data to be placed in a page in Struts2?
I have a CLOB that I need to display on the page and cannot figure out
how to do this in Struts2.  

Thank you,
Ken

-----Original Message-----
From: Dave Newton [mailto:newton.dave@yahoo.com] 
Sent: Wednesday, May 21, 2008 4:29 PM
To: Struts Users Mailing List
Subject: RE: Re: [S2] Advice on Handling CLOBs in Struts2

--- "Hoying, Ken" <Ke...@PremierInc.com> wrote:
> It appears to and that is my understanding.  

It appears to what, make a request? Where does it appear to do that? In
the code it looks like it just creates an action proxy and calls execute
on it. Without doing any real digging it looks like it uses the current
request/response/etc. in the action context for the action proxy.

> The examples show it as a way to include images that are built from an

> action.

Which examples?

Dave


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
 
BTW:  Both of the test cases (using the JSP and using the action) work
fine when caling the action directly from the browser. They only fail
when calling them using the <s:action> tag.  Is there some kind of bug
in this tag?  I am using struts 2.0.11.1.

Thanks,
Ken

-----Original Message-----
From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com] 
Sent: Wednesday, May 21, 2008 3:48 PM
To: Struts Users Mailing List
Subject: RE: Re: [S2] Advice on Handling CLOBs in Struts2

It appears to and that is my understanding.  The examples show it as a
way to include images that are built from an action.

I tried to punt and stream the result by directly accessing a the
response.getOutputStream() in the JSP and get the error:

java.io.IOException: Stream closed
	at
org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:20
4)
	at
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:1
15)
	at
org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173)
	at
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.ja
va:956)
	at
org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:6
09)
	at
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletD
ispatcherResult.java:119)
	at
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
pport.java:178)
	at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
ionInvocation.java:348)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:253)
	at
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
:50)
	at
org.apache.struts2.components.ActionComponent.executeAction(ActionCompon
ent.java:255)
	at
org.apache.struts2.components.ActionComponent.end(ActionComponent.java:1
55)
	at
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSu
pport.java:43)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005faction
_005f0(AjaxContractInfo_jsp.java:413) 

I then punted again and tried to stream from the action method by
accessing the outputSteam and returning null so that it would not
forward to a result and got the error:

java.lang.IllegalStateException: getWriter() has already been called for
this response
	at
org.apache.catalina.connector.Response.getOutputStream(Response.java:573
)
	at
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFac
ade.java:183)
	at
com.premierinc.sca.catalog.actions.ContractDetail.streamNote(ContractDet
ail.java:201)  

-----Original Message-----
From: Dave Newton [mailto:newton.dave@yahoo.com]
Sent: Wednesday, May 21, 2008 2:52 PM
To: Struts Users Mailing List
Subject: RE: Re: [S2] Advice on Handling CLOBs in Struts2

Does the <s:action...> take make an actual request?

I guess I assumed it executed the action without making a full request,
which could cause the error you're seeing, as the response would already
have been written to by the time your stream result got ahold of it.

Dave
 
--- "Hoying, Ken" <Ke...@PremierInc.com> wrote:

> BTW.. I have tested the stream action by calling it directly by 
> placing the url to action in the address window of my browser and it 
> works perfectly then.
>  
> 
> -----Original Message-----
> From: news [mailto:news@ger.gmane.org] On Behalf Of Laurie Harper
> Sent: Wednesday, May 21, 2008 2:09 PM
> To: user@struts.apache.org
> Subject: Re: [S2] Advice on Handling CLOBs in Struts2
> 
> Since that's not a normal result of using a stream result, I have to 
> assume you are doing something wrong. Without seeing the relevant 
> code/configuration, though, we can't offer much help.
> 
> L.
> 
> Hoying, Ken wrote:
> > I have tried to accomplish this by creating an action with a stream
> 
> > result type.
> > 
> > I am then including calling the action from with in my JSP page
> using
> > the <s:action> tag.
> > 
> > Unfortunately though, I am getting the following error:
> > 
> > [2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
> > [ts2.components.ActionComponent]: Could not execute action:
> > /catalog/ContractDetailsNote
> > java.lang.IllegalStateException: getWriter() has already been
> called
> > for this response
> > 	at
> >
>
org.apache.catalina.connector.Response.getOutputStream(Response.java:5
> > 73
> > )
> > 	at
> >
>
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseF
> > ac
> > ade.java:183)
> > 	at
> >
>
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java
> > :2
> > 19)
> > 	at
> >
>
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> > Su
> > pport.java:178)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> > ct
> > ionInvocation.java:348)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:253)
> > 	at
> >
>
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> > va
> > :50)
> > 	at
> >
>
org.apache.struts2.components.ActionComponent.executeAction(ActionComp
> > on
> > ent.java:255)
> > 	at
> >
>
org.apache.struts2.components.ActionComponent.end(ActionComponent.java
> > :1
> > 55)
> > 	at
> >
>
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTag
> > Su
> > pport.java:43)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005facti
> > on
> > _005f0(AjaxContractInfo_jsp.java:413)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiter
> > at
> > or_005f0(AjaxContractInfo_jsp.java:297)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort
> > _0
> > 05f0(AjaxContractInfo_jsp.java:247)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse
> > _0
> > 05f0(AjaxContractInfo_jsp.java:200)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContr
> > ac
> > tInfo_jsp.java:99)
> > 	at
> > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > 	at
> >
>
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.
> > ja
> > va:373)
> > 	at
> >
>
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
> > 	at
> > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
> > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:290)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
> > tc
> > her.java:654)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicat
> > io
> > nDispatcher.java:445)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
> > sp
> > atcher.java:379)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
> > at
> > cher.java:292)
> > 	at
> >
>
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(Servle
> > tD
> > ispatcherResult.java:139)
> > 	at
> >
>
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> > Su
> > pport.java:178)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> > ct
> > ionInvocation.java:348)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:253)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInter
> > ce
> > pt(DefaultWorkflowInterceptor.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> > (T
> > imerInterceptor.java:125)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> > te
> > rceptor.java:112)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Va
> > li
> > dationInterceptor.java:150)
> > 	at
> >
>
org.apache.struts2.interceptor.validation.AnnotationValidationIntercep
> > to
> > r.doIntercept(AnnotationValidationInterceptor.java:48)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> > (T
> > imerInterceptor.java:125)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> > te
> > rceptor.java:112)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interce
> > pt
> > (ConversionErrorInterceptor.java:123)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> > Pa
> > rametersInterceptor.java:167)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.interc
> > ep
> > t(StaticParametersInterceptor.java:105)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxI
> > nt
> > erceptor.java:83)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chai
> > ni
> > ngInterceptor.java:115)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInte
> > rc
> > eptor.java:143)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pre
> > pa
> > reInterceptor.java:121)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrep
> > ar
> > eInterceptor.java:42)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Serv
> > le
> > tConfigInterceptor.java:170)
> > 	at
> >
>
com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.interc
> > ep
> > t(ServletConfigEnhancedInterceptor.java:73)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.premierinc.sca.interceptor.UserInterceptor.intercept(UserIntercept
> > or
> > ..java:129)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChain
> > In
> > voker.doFilter(HibernateSessionInterceptor.java:145)
> > 	at
> >
>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doF
> > il
> > terInternal(OpenSessionInViewFilter.java:198)
> > 	at
> >
>
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> > qu
> > estFilter.java:75)
> > 	at
> >
>
com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(H
> > ib
> > ernateSessionInterceptor.java:75)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.interc
> > ep
> > t(ExceptionMappingInterceptor.java:176)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> > va
> > :50)
> > 	at
> >
>
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> > :5
> > 04)
> > 	at
> >
>
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatch
> > er
> > ..java:419)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCont
> > ex
> > tCleanUp.java:99)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFil
> > te
> > r.java:96)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> > lv
> > e.java:230)
> > 	at
> >
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> > lv
> > e.java:175)
> > 	at
> >
>
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Security
> > As
> > sociationValve.java:179)
> > 	at
> >
>
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat
> > or
> > Base.java:432)
> > 	at
> >
>
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve
> > .j
> > ava:84)
> > 	at
> >
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> > va
> > :127)
> > 	at
> >
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> > va
> > :102)
> > 	at
> >
>
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedCo
> > nn
> > ectionValve.java:157)
> > 	at
> >
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> > java:109)
> > 	at
> >
>
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> > :2
> > 62)
> > 	at
> >
>
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> > 84
> > 4)
> > 	at
> >
>
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> > s(
> > Http11Protocol.java:583)
> > 	at
> >
>
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> > 	at java.lang.Thread.run(Thread.java:595)
> >  
> > 
> > -----Original Message-----
> > From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com]
> > Sent: Wednesday, May 21, 2008 9:42 AM
> > To: user@struts.apache.org
> > Subject: [S2] Advice on Handling CLOBs in Struts2
> > 
> > Generally when working with Struts2, we have been loading a domaon 
> > object from the database in our action and then sending then 
> > referencing the properties as needed from the JSP to generate our
> output.
> > 
> > However, we now what could potentially be a large amount of data 
> > stored in a CLOB.  Using the method that we have been using to
> date,
> > we would have to place the entire CLOB in a string in the action
> and
> > then access it from the JSP.  Obviously, we would like to avoid
> doing
> that.
> > 
> > I was wondering if anyone else had come across this and how they
> had
> > managed to solve it.  How do we stream the content of the CLOB?
> > 
> > Thank you!
> > Ken
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by Dave Newton <ne...@yahoo.com>.
--- "Hoying, Ken" <Ke...@PremierInc.com> wrote:
> It appears to and that is my understanding.  

It appears to what, make a request? Where does it appear to do that? In
the code it looks like it just creates an action proxy and calls
execute on it. Without doing any real digging it looks like it uses the
current request/response/etc. in the action context for the action
proxy.

> The examples show it as a way to include images that 
> are built from an action.

Which examples?

Dave


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
It appears to and that is my understanding.  The examples show it as a
way to include images that are built from an action.

I tried to punt and stream the result by directly accessing a the
response.getOutputStream() in the JSP and get the error:

java.io.IOException: Stream closed
	at
org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:20
4)
	at
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:1
15)
	at
org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:173)
	at
org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.ja
va:956)
	at
org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:6
09)
	at
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletD
ispatcherResult.java:119)
	at
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
pport.java:178)
	at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
ionInvocation.java:348)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:253)
	at
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
:50)
	at
org.apache.struts2.components.ActionComponent.executeAction(ActionCompon
ent.java:255)
	at
org.apache.struts2.components.ActionComponent.end(ActionComponent.java:1
55)
	at
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSu
pport.java:43)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005faction
_005f0(AjaxContractInfo_jsp.java:413) 

I then punted again and tried to stream from the action method by
accessing the outputSteam and returning null so that it would not
forward to a result and got the error:

java.lang.IllegalStateException: getWriter() has already been called for
this response
	at
org.apache.catalina.connector.Response.getOutputStream(Response.java:573
)
	at
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFac
ade.java:183)
	at
com.premierinc.sca.catalog.actions.ContractDetail.streamNote(ContractDet
ail.java:201)  

-----Original Message-----
From: Dave Newton [mailto:newton.dave@yahoo.com] 
Sent: Wednesday, May 21, 2008 2:52 PM
To: Struts Users Mailing List
Subject: RE: Re: [S2] Advice on Handling CLOBs in Struts2

Does the <s:action...> take make an actual request?

I guess I assumed it executed the action without making a full request,
which could cause the error you're seeing, as the response would already
have been written to by the time your stream result got ahold of it.

Dave
 
--- "Hoying, Ken" <Ke...@PremierInc.com> wrote:

> BTW.. I have tested the stream action by calling it directly by 
> placing the url to action in the address window of my browser and it 
> works perfectly then.
>  
> 
> -----Original Message-----
> From: news [mailto:news@ger.gmane.org] On Behalf Of Laurie Harper
> Sent: Wednesday, May 21, 2008 2:09 PM
> To: user@struts.apache.org
> Subject: Re: [S2] Advice on Handling CLOBs in Struts2
> 
> Since that's not a normal result of using a stream result, I have to 
> assume you are doing something wrong. Without seeing the relevant 
> code/configuration, though, we can't offer much help.
> 
> L.
> 
> Hoying, Ken wrote:
> > I have tried to accomplish this by creating an action with a stream
> 
> > result type.
> > 
> > I am then including calling the action from with in my JSP page
> using
> > the <s:action> tag.
> > 
> > Unfortunately though, I am getting the following error:
> > 
> > [2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
> > [ts2.components.ActionComponent]: Could not execute action:
> > /catalog/ContractDetailsNote
> > java.lang.IllegalStateException: getWriter() has already been
> called
> > for this response
> > 	at
> >
>
org.apache.catalina.connector.Response.getOutputStream(Response.java:5
> > 73
> > )
> > 	at
> >
>
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseF
> > ac
> > ade.java:183)
> > 	at
> >
>
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java
> > :2
> > 19)
> > 	at
> >
>
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> > Su
> > pport.java:178)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> > ct
> > ionInvocation.java:348)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:253)
> > 	at
> >
>
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> > va
> > :50)
> > 	at
> >
>
org.apache.struts2.components.ActionComponent.executeAction(ActionComp
> > on
> > ent.java:255)
> > 	at
> >
>
org.apache.struts2.components.ActionComponent.end(ActionComponent.java
> > :1
> > 55)
> > 	at
> >
>
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTag
> > Su
> > pport.java:43)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005facti
> > on
> > _005f0(AjaxContractInfo_jsp.java:413)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiter
> > at
> > or_005f0(AjaxContractInfo_jsp.java:297)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort
> > _0
> > 05f0(AjaxContractInfo_jsp.java:247)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse
> > _0
> > 05f0(AjaxContractInfo_jsp.java:200)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContr
> > ac
> > tInfo_jsp.java:99)
> > 	at
> > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > 	at
> >
>
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.
> > ja
> > va:373)
> > 	at
> >
>
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
> > 	at
> > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
> > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:290)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
> > tc
> > her.java:654)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicat
> > io
> > nDispatcher.java:445)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
> > sp
> > atcher.java:379)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
> > at
> > cher.java:292)
> > 	at
> >
>
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(Servle
> > tD
> > ispatcherResult.java:139)
> > 	at
> >
>
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> > Su
> > pport.java:178)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> > ct
> > ionInvocation.java:348)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:253)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInter
> > ce
> > pt(DefaultWorkflowInterceptor.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> > (T
> > imerInterceptor.java:125)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> > te
> > rceptor.java:112)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Va
> > li
> > dationInterceptor.java:150)
> > 	at
> >
>
org.apache.struts2.interceptor.validation.AnnotationValidationIntercep
> > to
> > r.doIntercept(AnnotationValidationInterceptor.java:48)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> > (T
> > imerInterceptor.java:125)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> > te
> > rceptor.java:112)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interce
> > pt
> > (ConversionErrorInterceptor.java:123)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> > Pa
> > rametersInterceptor.java:167)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.interc
> > ep
> > t(StaticParametersInterceptor.java:105)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxI
> > nt
> > erceptor.java:83)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chai
> > ni
> > ngInterceptor.java:115)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInte
> > rc
> > eptor.java:143)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pre
> > pa
> > reInterceptor.java:121)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrep
> > ar
> > eInterceptor.java:42)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Serv
> > le
> > tConfigInterceptor.java:170)
> > 	at
> >
>
com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.interc
> > ep
> > t(ServletConfigEnhancedInterceptor.java:73)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.premierinc.sca.interceptor.UserInterceptor.intercept(UserIntercept
> > or
> > ..java:129)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChain
> > In
> > voker.doFilter(HibernateSessionInterceptor.java:145)
> > 	at
> >
>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doF
> > il
> > terInternal(OpenSessionInViewFilter.java:198)
> > 	at
> >
>
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> > qu
> > estFilter.java:75)
> > 	at
> >
>
com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(H
> > ib
> > ernateSessionInterceptor.java:75)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.interc
> > ep
> > t(ExceptionMappingInterceptor.java:176)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> > va
> > :50)
> > 	at
> >
>
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> > :5
> > 04)
> > 	at
> >
>
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatch
> > er
> > ..java:419)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCont
> > ex
> > tCleanUp.java:99)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFil
> > te
> > r.java:96)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> > lv
> > e.java:230)
> > 	at
> >
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> > lv
> > e.java:175)
> > 	at
> >
>
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Security
> > As
> > sociationValve.java:179)
> > 	at
> >
>
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat
> > or
> > Base.java:432)
> > 	at
> >
>
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve
> > .j
> > ava:84)
> > 	at
> >
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> > va
> > :127)
> > 	at
> >
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> > va
> > :102)
> > 	at
> >
>
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedCo
> > nn
> > ectionValve.java:157)
> > 	at
> >
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> > java:109)
> > 	at
> >
>
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> > :2
> > 62)
> > 	at
> >
>
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> > 84
> > 4)
> > 	at
> >
>
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> > s(
> > Http11Protocol.java:583)
> > 	at
> >
>
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> > 	at java.lang.Thread.run(Thread.java:595)
> >  
> > 
> > -----Original Message-----
> > From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com]
> > Sent: Wednesday, May 21, 2008 9:42 AM
> > To: user@struts.apache.org
> > Subject: [S2] Advice on Handling CLOBs in Struts2
> > 
> > Generally when working with Struts2, we have been loading a domaon 
> > object from the database in our action and then sending then 
> > referencing the properties as needed from the JSP to generate our
> output.
> > 
> > However, we now what could potentially be a large amount of data 
> > stored in a CLOB.  Using the method that we have been using to
> date,
> > we would have to place the entire CLOB in a string in the action
> and
> > then access it from the JSP.  Obviously, we would like to avoid
> doing
> that.
> > 
> > I was wondering if anyone else had come across this and how they
> had
> > managed to solve it.  How do we stream the content of the CLOB?
> > 
> > Thank you!
> > Ken
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by Dave Newton <ne...@yahoo.com>.
Does the <s:action...> take make an actual request?

I guess I assumed it executed the action without making a full request,
which could cause the error you're seeing, as the response would
already have been written to by the time your stream result got ahold
of it.

Dave
 
--- "Hoying, Ken" <Ke...@PremierInc.com> wrote:

> BTW.. I have tested the stream action by calling it directly by
> placing
> the url to action in the address window of my browser and it works
> perfectly then.
>  
> 
> -----Original Message-----
> From: news [mailto:news@ger.gmane.org] On Behalf Of Laurie Harper
> Sent: Wednesday, May 21, 2008 2:09 PM
> To: user@struts.apache.org
> Subject: Re: [S2] Advice on Handling CLOBs in Struts2
> 
> Since that's not a normal result of using a stream result, I have to
> assume you are doing something wrong. Without seeing the relevant
> code/configuration, though, we can't offer much help.
> 
> L.
> 
> Hoying, Ken wrote:
> > I have tried to accomplish this by creating an action with a stream
> 
> > result type.
> > 
> > I am then including calling the action from with in my JSP page
> using 
> > the <s:action> tag.
> > 
> > Unfortunately though, I am getting the following error:
> > 
> > [2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
> > [ts2.components.ActionComponent]: Could not execute action:
> > /catalog/ContractDetailsNote
> > java.lang.IllegalStateException: getWriter() has already been
> called 
> > for this response
> > 	at
> >
>
org.apache.catalina.connector.Response.getOutputStream(Response.java:5
> > 73
> > )
> > 	at
> >
>
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseF
> > ac
> > ade.java:183)
> > 	at
> >
>
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java
> > :2
> > 19)
> > 	at
> >
>
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> > Su
> > pport.java:178)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> > ct
> > ionInvocation.java:348)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:253)
> > 	at
> >
>
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> > va
> > :50)
> > 	at
> >
>
org.apache.struts2.components.ActionComponent.executeAction(ActionComp
> > on
> > ent.java:255)
> > 	at
> >
>
org.apache.struts2.components.ActionComponent.end(ActionComponent.java
> > :1
> > 55)
> > 	at
> >
>
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTag
> > Su
> > pport.java:43)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005facti
> > on
> > _005f0(AjaxContractInfo_jsp.java:413)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiter
> > at
> > or_005f0(AjaxContractInfo_jsp.java:297)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort
> > _0
> > 05f0(AjaxContractInfo_jsp.java:247)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse
> > _0
> > 05f0(AjaxContractInfo_jsp.java:200)
> > 	at
> >
>
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContr
> > ac
> > tInfo_jsp.java:99)
> > 	at
> > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > 	at
> >
>
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.
> > ja
> > va:373)
> > 	at
> >
>
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
> > 	at
> > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
> > 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:290)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
> > tc
> > her.java:654)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicat
> > io
> > nDispatcher.java:445)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
> > sp
> > atcher.java:379)
> > 	at
> >
>
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
> > at
> > cher.java:292)
> > 	at
> >
>
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(Servle
> > tD
> > ispatcherResult.java:139)
> > 	at
> >
>
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> > Su
> > pport.java:178)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> > ct
> > ionInvocation.java:348)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:253)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInter
> > ce
> > pt(DefaultWorkflowInterceptor.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> > (T
> > imerInterceptor.java:125)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> > te
> > rceptor.java:112)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Va
> > li
> > dationInterceptor.java:150)
> > 	at
> >
>
org.apache.struts2.interceptor.validation.AnnotationValidationIntercep
> > to
> > r.doIntercept(AnnotationValidationInterceptor.java:48)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> > (T
> > imerInterceptor.java:125)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> > te
> > rceptor.java:112)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interce
> > pt
> > (ConversionErrorInterceptor.java:123)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> > Pa
> > rametersInterceptor.java:167)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.interc
> > ep
> > t(StaticParametersInterceptor.java:105)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxI
> > nt
> > erceptor.java:83)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chai
> > ni
> > ngInterceptor.java:115)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInte
> > rc
> > eptor.java:143)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pre
> > pa
> > reInterceptor.java:121)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> > Me
> > thodFilterInterceptor.java:86)
> > 	at
> >
>
com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrep
> > ar
> > eInterceptor.java:42)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Serv
> > le
> > tConfigInterceptor.java:170)
> > 	at
> >
>
com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.interc
> > ep
> > t(ServletConfigEnhancedInterceptor.java:73)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.premierinc.sca.interceptor.UserInterceptor.intercept(UserIntercept
> > or
> > ..java:129)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChain
> > In
> > voker.doFilter(HibernateSessionInterceptor.java:145)
> > 	at
> >
>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doF
> > il
> > terInternal(OpenSessionInViewFilter.java:198)
> > 	at
> >
>
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> > qu
> > estFilter.java:75)
> > 	at
> >
>
com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(H
> > ib
> > ernateSessionInterceptor.java:75)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.interc
> > ep
> > t(ExceptionMappingInterceptor.java:176)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:224)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> > ct
> > ionInvocation.java:223)
> > 	at
> >
>
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> > rS
> > tack.java:455)
> > 	at
> >
>
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> > vo
> > cation.java:221)
> > 	at
> >
>
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> > va
> > :50)
> > 	at
> >
>
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> > :5
> > 04)
> > 	at
> >
>
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatch
> > er
> > ..java:419)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCont
> > ex
> > tCleanUp.java:99)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFil
> > te
> > r.java:96)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> > ca
> > tionFilterChain.java:235)
> > 	at
> >
>
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> > lt
> > erChain.java:206)
> > 	at
> >
>
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> > lv
> > e.java:230)
> > 	at
> >
>
org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> > lv
> > e.java:175)
> > 	at
> >
>
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Security
> > As
> > sociationValve.java:179)
> > 	at
> >
>
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat
> > or
> > Base.java:432)
> > 	at
> >
>
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve
> > .j
> > ava:84)
> > 	at
> >
>
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> > va
> > :127)
> > 	at
> >
>
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> > va
> > :102)
> > 	at
> >
>
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedCo
> > nn
> > ectionValve.java:157)
> > 	at
> >
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> > java:109)
> > 	at
> >
>
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> > :2
> > 62)
> > 	at
> >
>
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> > 84
> > 4)
> > 	at
> >
>
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> > s(
> > Http11Protocol.java:583)
> > 	at
> >
>
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> > 	at java.lang.Thread.run(Thread.java:595)
> >  
> > 
> > -----Original Message-----
> > From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com]
> > Sent: Wednesday, May 21, 2008 9:42 AM
> > To: user@struts.apache.org
> > Subject: [S2] Advice on Handling CLOBs in Struts2
> > 
> > Generally when working with Struts2, we have been loading a domaon 
> > object from the database in our action and then sending then 
> > referencing the properties as needed from the JSP to generate our
> output.
> > 
> > However, we now what could potentially be a large amount of data 
> > stored in a CLOB.  Using the method that we have been using to
> date, 
> > we would have to place the entire CLOB in a string in the action
> and 
> > then access it from the JSP.  Obviously, we would like to avoid
> doing
> that.
> > 
> > I was wondering if anyone else had come across this and how they
> had 
> > managed to solve it.  How do we stream the content of the CLOB?
> > 
> > Thank you!
> > Ken
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
BTW.. I have tested the stream action by calling it directly by placing
the url to action in the address window of my browser and it works
perfectly then.
 

-----Original Message-----
From: news [mailto:news@ger.gmane.org] On Behalf Of Laurie Harper
Sent: Wednesday, May 21, 2008 2:09 PM
To: user@struts.apache.org
Subject: Re: [S2] Advice on Handling CLOBs in Struts2

Since that's not a normal result of using a stream result, I have to
assume you are doing something wrong. Without seeing the relevant
code/configuration, though, we can't offer much help.

L.

Hoying, Ken wrote:
> I have tried to accomplish this by creating an action with a stream 
> result type.
> 
> I am then including calling the action from with in my JSP page using 
> the <s:action> tag.
> 
> Unfortunately though, I am getting the following error:
> 
> [2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
> [ts2.components.ActionComponent]: Could not execute action:
> /catalog/ContractDetailsNote
> java.lang.IllegalStateException: getWriter() has already been called 
> for this response
> 	at
> org.apache.catalina.connector.Response.getOutputStream(Response.java:5
> 73
> )
> 	at
> org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseF
> ac
> ade.java:183)
> 	at
> org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java
> :2
> 19)
> 	at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> Su
> pport.java:178)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> ct
> ionInvocation.java:348)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:253)
> 	at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> va
> :50)
> 	at
> org.apache.struts2.components.ActionComponent.executeAction(ActionComp
> on
> ent.java:255)
> 	at
> org.apache.struts2.components.ActionComponent.end(ActionComponent.java
> :1
> 55)
> 	at
> org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTag
> Su
> pport.java:43)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005facti
> on
> _005f0(AjaxContractInfo_jsp.java:413)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiter
> at
> or_005f0(AjaxContractInfo_jsp.java:297)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort
> _0
> 05f0(AjaxContractInfo_jsp.java:247)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse
> _0
> 05f0(AjaxContractInfo_jsp.java:200)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContr
> ac
> tInfo_jsp.java:99)
> 	at
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.
> ja
> va:373)
> 	at
>
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
> 	at
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:290)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
> tc
> her.java:654)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicat
> io
> nDispatcher.java:445)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
> sp
> atcher.java:379)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
> at
> cher.java:292)
> 	at
> org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(Servle
> tD
> ispatcherResult.java:139)
> 	at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> Su
> pport.java:178)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> ct
> ionInvocation.java:348)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:253)
> 	at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInter
> ce
> pt(DefaultWorkflowInterceptor.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> (T
> imerInterceptor.java:125)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> te
> rceptor.java:112)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Va
> li
> dationInterceptor.java:150)
> 	at
> org.apache.struts2.interceptor.validation.AnnotationValidationIntercep
> to
> r.doIntercept(AnnotationValidationInterceptor.java:48)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> (T
> imerInterceptor.java:125)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> te
> rceptor.java:112)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interce
> pt
> (ConversionErrorInterceptor.java:123)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> Pa
> rametersInterceptor.java:167)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.interc
> ep
> t(StaticParametersInterceptor.java:105)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxI
> nt
> erceptor.java:83)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chai
> ni
> ngInterceptor.java:115)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInte
> rc
> eptor.java:143)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pre
> pa
> reInterceptor.java:121)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrep
> ar
> eInterceptor.java:42)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Serv
> le
> tConfigInterceptor.java:170)
> 	at
> com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.interc
> ep
> t(ServletConfigEnhancedInterceptor.java:73)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.premierinc.sca.interceptor.UserInterceptor.intercept(UserIntercept
> or
> ..java:129)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChain
> In
> voker.doFilter(HibernateSessionInterceptor.java:145)
> 	at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doF
> il
> terInternal(OpenSessionInViewFilter.java:198)
> 	at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> qu
> estFilter.java:75)
> 	at
> com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(H
> ib
> ernateSessionInterceptor.java:75)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.interc
> ep
> t(ExceptionMappingInterceptor.java:176)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> va
> :50)
> 	at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> :5
> 04)
> 	at
> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatch
> er
> ..java:419)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCont
> ex
> tCleanUp.java:99)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFil
> te
> r.java:96)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> lv
> e.java:230)
> 	at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> lv
> e.java:175)
> 	at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Security
> As
> sociationValve.java:179)
> 	at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat
> or
> Base.java:432)
> 	at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve
> .j
> ava:84)
> 	at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> va
> :127)
> 	at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> va
> :102)
> 	at
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedCo
> nn
> ectionValve.java:157)
> 	at
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> java:109)
> 	at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> :2
> 62)
> 	at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 84
> 4)
> 	at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> s(
> Http11Protocol.java:583)
> 	at
>
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> 	at java.lang.Thread.run(Thread.java:595)
>  
> 
> -----Original Message-----
> From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com]
> Sent: Wednesday, May 21, 2008 9:42 AM
> To: user@struts.apache.org
> Subject: [S2] Advice on Handling CLOBs in Struts2
> 
> Generally when working with Struts2, we have been loading a domaon 
> object from the database in our action and then sending then 
> referencing the properties as needed from the JSP to generate our
output.
> 
> However, we now what could potentially be a large amount of data 
> stored in a CLOB.  Using the method that we have been using to date, 
> we would have to place the entire CLOB in a string in the action and 
> then access it from the JSP.  Obviously, we would like to avoid doing
that.
> 
> I was wondering if anyone else had come across this and how they had 
> managed to solve it.  How do we stream the content of the CLOB?
> 
> Thank you!
> Ken


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: Re: [S2] Advice on Handling CLOBs in Struts2

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
Thank you for the response.  Below is my config for the action.  Please
let me know what else I am missing.  I am at a real loss.  I would hate
to have to create a JSP and place Java code in there to do the streaming
or to stream directly in the action.  I would really like to do it in
keeping with the Strust2 framework.

		<action name="ContractDetailsNote"
class="actnContractDetail" method="streamNote">
			<result name="success" type="stream">
  				<param
name="inputName">noteStream</param>
				<param
name="contentType">text/html</param>
  				<param name="bufferSize">1024</param>
			</result>
			<result
name="error">/jsps/catalog/DisplayError.jsp</result>
		</action>

Here is the call in my JSP page:

		<s:action name="ContractDetailsNote"
executeResult="true" >
			<s:param name="contractDetailId"
value="contractDetailId"/>
		</s:action> 

-----Original Message-----
From: news [mailto:news@ger.gmane.org] On Behalf Of Laurie Harper
Sent: Wednesday, May 21, 2008 2:09 PM
To: user@struts.apache.org
Subject: Re: [S2] Advice on Handling CLOBs in Struts2

Since that's not a normal result of using a stream result, I have to
assume you are doing something wrong. Without seeing the relevant
code/configuration, though, we can't offer much help.

L.

Hoying, Ken wrote:
> I have tried to accomplish this by creating an action with a stream 
> result type.
> 
> I am then including calling the action from with in my JSP page using 
> the <s:action> tag.
> 
> Unfortunately though, I am getting the following error:
> 
> [2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
> [ts2.components.ActionComponent]: Could not execute action:
> /catalog/ContractDetailsNote
> java.lang.IllegalStateException: getWriter() has already been called 
> for this response
> 	at
> org.apache.catalina.connector.Response.getOutputStream(Response.java:5
> 73
> )
> 	at
> org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseF
> ac
> ade.java:183)
> 	at
> org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java
> :2
> 19)
> 	at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> Su
> pport.java:178)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> ct
> ionInvocation.java:348)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:253)
> 	at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> va
> :50)
> 	at
> org.apache.struts2.components.ActionComponent.executeAction(ActionComp
> on
> ent.java:255)
> 	at
> org.apache.struts2.components.ActionComponent.end(ActionComponent.java
> :1
> 55)
> 	at
> org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTag
> Su
> pport.java:43)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005facti
> on
> _005f0(AjaxContractInfo_jsp.java:413)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiter
> at
> or_005f0(AjaxContractInfo_jsp.java:297)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort
> _0
> 05f0(AjaxContractInfo_jsp.java:247)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse
> _0
> 05f0(AjaxContractInfo_jsp.java:200)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContr
> ac
> tInfo_jsp.java:99)
> 	at
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.
> ja
> va:373)
> 	at
>
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
> 	at
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:290)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispa
> tc
> her.java:654)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicat
> io
> nDispatcher.java:445)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDi
> sp
> atcher.java:379)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDisp
> at
> cher.java:292)
> 	at
> org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(Servle
> tD
> ispatcherResult.java:139)
> 	at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResult
> Su
> pport.java:178)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultA
> ct
> ionInvocation.java:348)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:253)
> 	at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInter
> ce
> pt(DefaultWorkflowInterceptor.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> (T
> imerInterceptor.java:125)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> te
> rceptor.java:112)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Va
> li
> dationInterceptor.java:150)
> 	at
> org.apache.struts2.interceptor.validation.AnnotationValidationIntercep
> to
> r.doIntercept(AnnotationValidationInterceptor.java:48)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming
> (T
> imerInterceptor.java:125)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerIn
> te
> rceptor.java:112)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interce
> pt
> (ConversionErrorInterceptor.java:123)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(
> Pa
> rametersInterceptor.java:167)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.interc
> ep
> t(StaticParametersInterceptor.java:105)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxI
> nt
> erceptor.java:83)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chai
> ni
> ngInterceptor.java:115)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInte
> rc
> eptor.java:143)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pre
> pa
> reInterceptor.java:121)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(
> Me
> thodFilterInterceptor.java:86)
> 	at
> com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrep
> ar
> eInterceptor.java:42)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Serv
> le
> tConfigInterceptor.java:170)
> 	at
> com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.interc
> ep
> t(ServletConfigEnhancedInterceptor.java:73)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.premierinc.sca.interceptor.UserInterceptor.intercept(UserIntercept
> or
> ..java:129)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChain
> In
> voker.doFilter(HibernateSessionInterceptor.java:145)
> 	at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doF
> il
> terInternal(OpenSessionInViewFilter.java:198)
> 	at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRe
> qu
> estFilter.java:75)
> 	at
> com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(H
> ib
> ernateSessionInterceptor.java:75)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.interc
> ep
> t(ExceptionMappingInterceptor.java:176)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultA
> ct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTime
> rS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionIn
> vo
> cation.java:221)
> 	at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.ja
> va
> :50)
> 	at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java
> :5
> 04)
> 	at
> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatch
> er
> ..java:419)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCont
> ex
> tCleanUp.java:99)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFil
> te
> r.java:96)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appli
> ca
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi
> lt
> erChain.java:206)
> 	at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperVa
> lv
> e.java:230)
> 	at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextVa
> lv
> e.java:175)
> 	at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Security
> As
> sociationValve.java:179)
> 	at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticat
> or
> Base.java:432)
> 	at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve
> .j
> ava:84)
> 	at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.ja
> va
> :127)
> 	at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.ja
> va
> :102)
> 	at
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedCo
> nn
> ectionValve.java:157)
> 	at
>
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> java:109)
> 	at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java
> :2
> 62)
> 	at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
> 84
> 4)
> 	at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proces
> s(
> Http11Protocol.java:583)
> 	at
>
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> 	at java.lang.Thread.run(Thread.java:595)
>  
> 
> -----Original Message-----
> From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com]
> Sent: Wednesday, May 21, 2008 9:42 AM
> To: user@struts.apache.org
> Subject: [S2] Advice on Handling CLOBs in Struts2
> 
> Generally when working with Struts2, we have been loading a domaon 
> object from the database in our action and then sending then 
> referencing the properties as needed from the JSP to generate our
output.
> 
> However, we now what could potentially be a large amount of data 
> stored in a CLOB.  Using the method that we have been using to date, 
> we would have to place the entire CLOB in a string in the action and 
> then access it from the JSP.  Obviously, we would like to avoid doing
that.
> 
> I was wondering if anyone else had come across this and how they had 
> managed to solve it.  How do we stream the content of the CLOB?
> 
> Thank you!
> Ken


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: [S2] Advice on Handling CLOBs in Struts2

Posted by Laurie Harper <la...@holoweb.net>.
Since that's not a normal result of using a stream result, I have to 
assume you are doing something wrong. Without seeing the relevant 
code/configuration, though, we can't offer much help.

L.

Hoying, Ken wrote:
> I have tried to accomplish this by creating an action with a stream
> result type.
> 
> I am then including calling the action from with in my JSP page using
> the <s:action> tag.  
> 
> Unfortunately though, I am getting the following error:
> 
> [2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
> [ts2.components.ActionComponent]: Could not execute action:
> /catalog/ContractDetailsNote
> java.lang.IllegalStateException: getWriter() has already been called for
> this response
> 	at
> org.apache.catalina.connector.Response.getOutputStream(Response.java:573
> )
> 	at
> org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFac
> ade.java:183)
> 	at
> org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:2
> 19)
> 	at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
> pport.java:178)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
> ionInvocation.java:348)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:253)
> 	at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
> :50)
> 	at
> org.apache.struts2.components.ActionComponent.executeAction(ActionCompon
> ent.java:255)
> 	at
> org.apache.struts2.components.ActionComponent.end(ActionComponent.java:1
> 55)
> 	at
> org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSu
> pport.java:43)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005faction
> _005f0(AjaxContractInfo_jsp.java:413)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiterat
> or_005f0(AjaxContractInfo_jsp.java:297)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort_0
> 05f0(AjaxContractInfo_jsp.java:247)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse_0
> 05f0(AjaxContractInfo_jsp.java:200)
> 	at
> org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContrac
> tInfo_jsp.java:99)
> 	at
> org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at
> org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
> va:373)
> 	at
> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
> 	at
> org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
> tionFilterChain.java:290)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
> erChain.java:206)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatc
> her.java:654)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicatio
> nDispatcher.java:445)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDisp
> atcher.java:379)
> 	at
> org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispat
> cher.java:292)
> 	at
> org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletD
> ispatcherResult.java:139)
> 	at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
> pport.java:178)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
> ionInvocation.java:348)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:253)
> 	at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInterce
> pt(DefaultWorkflowInterceptor.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming(T
> imerInterceptor.java:125)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInte
> rceptor.java:112)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Vali
> dationInterceptor.java:150)
> 	at
> org.apache.struts2.interceptor.validation.AnnotationValidationIntercepto
> r.doIntercept(AnnotationValidationInterceptor.java:48)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming(T
> imerInterceptor.java:125)
> 	at
> com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInte
> rceptor.java:112)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept
> (ConversionErrorInterceptor.java:123)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Pa
> rametersInterceptor.java:167)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
> thodFilterInterceptor.java:86)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercep
> t(StaticParametersInterceptor.java:105)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInt
> erceptor.java:83)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chaini
> ngInterceptor.java:115)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterc
> eptor.java:143)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Prepa
> reInterceptor.java:121)
> 	at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
> thodFilterInterceptor.java:86)
> 	at
> com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrepar
> eInterceptor.java:42)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Servle
> tConfigInterceptor.java:170)
> 	at
> com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.intercep
> t(ServletConfigEnhancedInterceptor.java:73)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.premierinc.sca.interceptor.UserInterceptor.intercept(UserInterceptor
> ..java:129)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChainIn
> voker.doFilter(HibernateSessionInterceptor.java:145)
> 	at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFil
> terInternal(OpenSessionInViewFilter.java:198)
> 	at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequ
> estFilter.java:75)
> 	at
> com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(Hib
> ernateSessionInterceptor.java:75)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercep
> t(ExceptionMappingInterceptor.java:176)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:224)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
> ionInvocation.java:223)
> 	at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
> tack.java:455)
> 	at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
> cation.java:221)
> 	at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
> :50)
> 	at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:5
> 04)
> 	at
> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher
> ..java:419)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
> erChain.java:206)
> 	at
> org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContex
> tCleanUp.java:99)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
> erChain.java:206)
> 	at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilte
> r.java:96)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
> tionFilterChain.java:235)
> 	at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
> erChain.java:206)
> 	at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
> e.java:230)
> 	at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
> e.java:175)
> 	at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAs
> sociationValve.java:179)
> 	at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
> Base.java:432)
> 	at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.j
> ava:84)
> 	at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
> :127)
> 	at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
> :102)
> 	at
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConn
> ectionValve.java:157)
> 	at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
> java:109)
> 	at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:2
> 62)
> 	at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:84
> 4)
> 	at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(
> Http11Protocol.java:583)
> 	at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
> 	at java.lang.Thread.run(Thread.java:595) 
>  
> 
> -----Original Message-----
> From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com] 
> Sent: Wednesday, May 21, 2008 9:42 AM
> To: user@struts.apache.org
> Subject: [S2] Advice on Handling CLOBs in Struts2
> 
> Generally when working with Struts2, we have been loading a domaon
> object from the database in our action and then sending then referencing
> the properties as needed from the JSP to generate our output.  
> 
> However, we now what could potentially be a large amount of data stored
> in a CLOB.  Using the method that we have been using to date, we would
> have to place the entire CLOB in a string in the action and then access
> it from the JSP.  Obviously, we would like to avoid doing that.  
> 
> I was wondering if anyone else had come across this and how they had
> managed to solve it.  How do we stream the content of the CLOB?
> 
> Thank you!
> Ken


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: [S2] Advice on Handling CLOBs in Struts2 - Help with IllegalStateException

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
 I still cannot figure out why I am getting this error.  However, if I
do not use a stream result and use a result that returns a JSP then all
works. 

Any help would be greatly apprecietd!

Thanks,
Ken

-----Original Message-----
From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com] 
Sent: Wednesday, May 21, 2008 12:46 PM
To: Struts Users Mailing List
Subject: RE: [S2] Advice on Handling CLOBs in Struts2

I have tried to accomplish this by creating an action with a stream
result type.

I am then including calling the action from with in my JSP page using
the <s:action> tag.  

Unfortunately though, I am getting the following error:

[2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
[ts2.components.ActionComponent]: Could not execute action:
/catalog/ContractDetailsNote
java.lang.IllegalStateException: getWriter() has already been called for
this response
	at
org.apache.catalina.connector.Response.getOutputStream(Response.java:573
)
	at
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFac
ade.java:183)
	at
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:2
19)
	at
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
pport.java:178)
	at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
ionInvocation.java:348)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:253)
	at
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
:50)
	at
org.apache.struts2.components.ActionComponent.executeAction(ActionCompon
ent.java:255)
	at
org.apache.struts2.components.ActionComponent.end(ActionComponent.java:1
55)
	at
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSu
pport.java:43)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005faction
_005f0(AjaxContractInfo_jsp.java:413)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiterat
or_005f0(AjaxContractInfo_jsp.java:297)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort_0
05f0(AjaxContractInfo_jsp.java:247)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse_0
05f0(AjaxContractInfo_jsp.java:200)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContrac
tInfo_jsp.java:99)
	at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
va:373)
	at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
	at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:290)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatc
her.java:654)
	at
org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicatio
nDispatcher.java:445)
	at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDisp
atcher.java:379)
	at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispat
cher.java:292)
	at
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletD
ispatcherResult.java:139)
	at
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
pport.java:178)
	at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
ionInvocation.java:348)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:253)
	at
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInterce
pt(DefaultWorkflowInterceptor.java:221)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming(T
imerInterceptor.java:125)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInte
rceptor.java:112)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Vali
dationInterceptor.java:150)
	at
org.apache.struts2.interceptor.validation.AnnotationValidationIntercepto
r.doIntercept(AnnotationValidationInterceptor.java:48)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming(T
imerInterceptor.java:125)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInte
rceptor.java:112)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept
(ConversionErrorInterceptor.java:123)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Pa
rametersInterceptor.java:167)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercep
t(StaticParametersInterceptor.java:105)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInt
erceptor.java:83)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chaini
ngInterceptor.java:115)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterc
eptor.java:143)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Prepa
reInterceptor.java:121)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrepar
eInterceptor.java:42)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Servle
tConfigInterceptor.java:170)
	at
com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.intercep
t(ServletConfigEnhancedInterceptor.java:73)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.premierinc.sca.interceptor.UserInterceptor.intercept(UserInterceptor
.java:129)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChainIn
voker.doFilter(HibernateSessionInterceptor.java:145)
	at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFil
terInternal(OpenSessionInViewFilter.java:198)
	at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequ
estFilter.java:75)
	at
com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(Hib
ernateSessionInterceptor.java:75)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercep
t(ExceptionMappingInterceptor.java:176)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
:50)
	at
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:5
04)
	at
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher
.java:419)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContex
tCleanUp.java:99)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilte
r.java:96)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:230)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:175)
	at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAs
sociationValve.java:179)
	at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
Base.java:432)
	at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.j
ava:84)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:127)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:102)
	at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConn
ectionValve.java:157)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:109)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:2
62)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:84
4)
	at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(
Http11Protocol.java:583)
	at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:595) 
 

-----Original Message-----
From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com]
Sent: Wednesday, May 21, 2008 9:42 AM
To: user@struts.apache.org
Subject: [S2] Advice on Handling CLOBs in Struts2

Generally when working with Struts2, we have been loading a domaon
object from the database in our action and then sending then referencing
the properties as needed from the JSP to generate our output.  

However, we now what could potentially be a large amount of data stored
in a CLOB.  Using the method that we have been using to date, we would
have to place the entire CLOB in a string in the action and then access
it from the JSP.  Obviously, we would like to avoid doing that.  

I was wondering if anyone else had come across this and how they had
managed to solve it.  How do we stream the content of the CLOB?

Thank you!
Ken

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


RE: [S2] Advice on Handling CLOBs in Struts2

Posted by "Hoying, Ken" <Ke...@PremierInc.com>.
I have tried to accomplish this by creating an action with a stream
result type.

I am then including calling the action from with in my JSP page using
the <s:action> tag.  

Unfortunately though, I am getting the following error:

[2008-05-21 11:26:25,702] [http-0.0.0.0-8080-2] [ERROR] []
[ts2.components.ActionComponent]: Could not execute action:
/catalog/ContractDetailsNote
java.lang.IllegalStateException: getWriter() has already been called for
this response
	at
org.apache.catalina.connector.Response.getOutputStream(Response.java:573
)
	at
org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFac
ade.java:183)
	at
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:2
19)
	at
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
pport.java:178)
	at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
ionInvocation.java:348)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:253)
	at
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
:50)
	at
org.apache.struts2.components.ActionComponent.executeAction(ActionCompon
ent.java:255)
	at
org.apache.struts2.components.ActionComponent.end(ActionComponent.java:1
55)
	at
org.apache.struts2.views.jsp.ComponentTagSupport.doEndTag(ComponentTagSu
pport.java:43)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005faction
_005f0(AjaxContractInfo_jsp.java:413)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fiterat
or_005f0(AjaxContractInfo_jsp.java:297)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005fsort_0
05f0(AjaxContractInfo_jsp.java:247)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspx_meth_s_005felse_0
05f0(AjaxContractInfo_jsp.java:200)
	at
org.apache.jsp.jsps.catalog.AjaxContractInfo_jsp._jspService(AjaxContrac
tInfo_jsp.java:99)
	at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.ja
va:373)
	at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:336)
	at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:290)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatc
her.java:654)
	at
org.apache.catalina.core.ApplicationDispatcher.processRequest(Applicatio
nDispatcher.java:445)
	at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDisp
atcher.java:379)
	at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispat
cher.java:292)
	at
org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletD
ispatcherResult.java:139)
	at
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSu
pport.java:178)
	at
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultAct
ionInvocation.java:348)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:253)
	at
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInterce
pt(DefaultWorkflowInterceptor.java:221)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming(T
imerInterceptor.java:125)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInte
rceptor.java:112)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(Vali
dationInterceptor.java:150)
	at
org.apache.struts2.interceptor.validation.AnnotationValidationIntercepto
r.doIntercept(AnnotationValidationInterceptor.java:48)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.invokeUnderTiming(T
imerInterceptor.java:125)
	at
com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInte
rceptor.java:112)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept
(ConversionErrorInterceptor.java:123)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(Pa
rametersInterceptor.java:167)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercep
t(StaticParametersInterceptor.java:105)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInt
erceptor.java:83)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Chaini
ngInterceptor.java:115)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterc
eptor.java:143)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Prepa
reInterceptor.java:121)
	at
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(Me
thodFilterInterceptor.java:86)
	at
com.premierinc.sca.interceptor.ScaPrepareInterceptor.intercept(ScaPrepar
eInterceptor.java:42)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Servle
tConfigInterceptor.java:170)
	at
com.premierinc.sca.interceptor.ServletConfigEnhancedInterceptor.intercep
t(ServletConfigEnhancedInterceptor.java:73)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.premierinc.sca.interceptor.UserInterceptor.intercept(UserInterceptor
.java:129)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.premierinc.sca.interceptor.HibernateSessionInterceptor$FilterChainIn
voker.doFilter(HibernateSessionInterceptor.java:145)
	at
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFil
terInternal(OpenSessionInViewFilter.java:198)
	at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequ
estFilter.java:75)
	at
com.premierinc.sca.interceptor.HibernateSessionInterceptor.intercept(Hib
ernateSessionInterceptor.java:75)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercep
t(ExceptionMappingInterceptor.java:176)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:224)
	at
com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultAct
ionInvocation.java:223)
	at
com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerS
tack.java:455)
	at
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvo
cation.java:221)
	at
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java
:50)
	at
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:5
04)
	at
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher
.java:419)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContex
tCleanUp.java:99)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilte
r.java:96)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:235)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:206)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:230)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:175)
	at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAs
sociationValve.java:179)
	at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
Base.java:432)
	at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.j
ava:84)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:127)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:102)
	at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConn
ectionValve.java:157)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:109)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:2
62)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:84
4)
	at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(
Http11Protocol.java:583)
	at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
	at java.lang.Thread.run(Thread.java:595) 
 

-----Original Message-----
From: Hoying, Ken [mailto:Ken_Hoying@PremierInc.com] 
Sent: Wednesday, May 21, 2008 9:42 AM
To: user@struts.apache.org
Subject: [S2] Advice on Handling CLOBs in Struts2

Generally when working with Struts2, we have been loading a domaon
object from the database in our action and then sending then referencing
the properties as needed from the JSP to generate our output.  

However, we now what could potentially be a large amount of data stored
in a CLOB.  Using the method that we have been using to date, we would
have to place the entire CLOB in a string in the action and then access
it from the JSP.  Obviously, we would like to avoid doing that.  

I was wondering if anyone else had come across this and how they had
managed to solve it.  How do we stream the content of the CLOB?

Thank you!
Ken

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org