[ 
http://issues.apache.org/jira/browse/BEEHIVE-1028?page=comments#action_12361985 
] 

Chad Schoettger commented on BEEHIVE-1028:
------------------------------------------

After further investigation this appears to be a problem with the ControlFilter 
and PageFlow.  

Basically what is happening is: 

*) The bean context is being stored in the session. 
*) When the context's 'beginContext()' method is called, it is passed the 
current request and response as parameters - which ties the bean context to a 
particular servlet request/response.  
*) If another thread with the same session makes a request, the same bean 
context is used but if the bean context associated with the first thread has 
not completed its servlet request/response information is overwritten by the 
second thread's request.  

I belive that the core isssue here is that it is improper to store a bean 
context in a session, since the bean context works on a per-request scope, but 
at any given time there may be multiple requests made on a single session.\

My recommendation would be to remove the ability to store the bean context in 
the session, and just create a new bean context for each request recieved.  
This is a fairly straightforward modification to the ControlFilter but may need 
some additional investigation on the page flow side of things.

> Controls in pageflows do not appear to be receiving lifecycle events in the 
> proper order
> ----------------------------------------------------------------------------------------
>
>          Key: BEEHIVE-1028
>          URL: http://issues.apache.org/jira/browse/BEEHIVE-1028
>      Project: Beehive
>         Type: Bug
>   Components: NetUI
>     Versions: V1, 1.1
>     Reporter: Chad Schoettger
>     Assignee: Chad Schoettger
>  Attachments: beehive1028.zip, jira1028Simplified.zip
>
> So I have a small webapp which basically consists of a pageflow and a jdbc 
> control.  The single jsp in the web app invokes an action in the page flow as:
>               <tr><td><img 
> src="doRenderChart.do?versionName=9.2Beta&projectName=Workshop&componentName=W-IDE&JFWidth=500&JFHeight=300"
>  border="0"/></td></tr>
> It does this 10 or 11 times to build a table which contains images generated 
> by the action using the jdbc control to retrieve data from a database.  
> Typically (although not always) at least one of the images will not be 
> generated due to an SQL Error throw by the jdbc control.  The error is that 
> the SQLConnection has been closed.
> Here is a portion of the tomcat log, I've added some debugging statements in 
> the ControlContainerContext class to help me see what was going on, the 
> doRenderChart() is the page flow action being called by the jsp.  It appears 
> the control's begin and end events are not fired in the right order, causing 
> (in some instances) the control to be unititialzed before a call has been 
> completed.
> log4j:WARN Please initialize the log4j system properly.
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=null
> BEGIN_CONTEXT: THREAD ID = 35
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-IDE
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Docs
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-IDECore
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-External
> BEGIN_CONTEXT: THREAD ID = 35
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Project
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Javelin
> BEGIN_CONTEXT: THREAD ID = 35
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-RuntimeControls
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-RuntimeNetUI
> BEGIN_CONTEXT: THREAD ID = 35
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Upgrade
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 33
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=null
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 33
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Docs
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-IDE
> BEGIN_CONTEXT: THREAD ID = 33
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 33
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-External
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 33
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-IDECore
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Project
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 33
> calling version=9.2Beta project=Workshop component=W-Javelin
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-RuntimeControls
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 33
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-RuntimeNetUI
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Upgrade
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> END_CONTEXT: THREAD ID = 33
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> Listening for transport dt_shmem at address: jdbconn
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=null
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Docs
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-External
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-IDE
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> BEGIN_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-IDECore
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> **** Enter: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 34
> calling version=9.2Beta project=Workshop component=W-Project
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Javelin
> BEGIN_CONTEXT: THREAD ID = 35
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-RuntimeControls
> BEGIN_CONTEXT: THREAD ID = 34
> **** Leave: doRenderChart() ****
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-RuntimeNetUI
> BEGIN_CONTEXT: THREAD ID = 35
> **** Leave: doRenderChart() ****
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 35
> BEGIN_CONTEXT: THREAD ID = 35
> **** Enter: doRenderChart() ****
> calling version=9.2Beta project=Workshop component=W-Upgrade
> **** Leave: doRenderChart() ****
> BEGIN_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 35
> END_CONTEXT: THREAD ID = 34
> END_CONTEXT: THREAD ID = 34

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to