[ 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
