DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22513>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22513 Scope "leaks" using multiple sessions using new flow framework Summary: Scope "leaks" using multiple sessions using new flow framework Product: Cocoon 2 Version: 2.1 Platform: PC OS/Version: Windows XP Status: NEW Severity: Major Priority: Other Component: core AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] Using the new flow framework I encountered numerous null pointer exceptions using the cocoon object's getComponent. This only happened if more than _one_ session accessed the application. After adding a lot of debug messages to the FOM_* classes I noticed that the FOM_Cocoon instance changed in the flow script. After 2 days of tracing I finally found what causes the problem: I am using javascript objects in my application and somehow the scope changes to the scope created by the latest session. This scope then is used in _all_ sessions. Obviously all but the last sessions fail, because the FOM_Cocoon object is invalidated when it is not used, i.e. all internal references are null. (When I overloaded the get method in FOM_JavaScriptInterpreter.ThreadScope and added a debug message, I could see that the 2nd argument (the threadScope instance) suddenly changes. I suspect that the top level scope is somehow used for all sessions.) You can reproduce the problem with the attached simple test script. It displays the global "application" and "cocoon" object's hashcodes. One time called from the global function test() and the other time from inside the application object. If you have two or more browser windows open, the first will display something like this: global stats(): application.hash = 2829043 application = 2829043 cocoon = 22342265 application Application.stats(): this.hash = 2829043 this.cocoon = 22342265 --> calling stats(): stats(): application.hash = 2829043 application = 2829043 cocoon = 22342265 ------------------------------------------------------------------- And if you load the same application in the second window: global stats(): application.hash = 9089012 application = 9089012 cocoon = 19257644 application Application.stats(): this.hash = 9089012 this.cocoon = 19257644 --> calling stats(): stats(): application.hash = 9089012 application = 9089012 cocoon = 19257644 -------------------------------------------------------------------- Once you press continue in the first window you get the unexpected result: global stats(): application.hash = 2829043 application = 2829043 cocoon = 22342265 application Application.stats(): this.hash = 2829043 this.cocoon = 22342265 --> calling stats(): stats(): application.hash = 9089012 application = 9089012 cocoon = 19257644 As you can see the scope changes and stays this way for every called function or method. It doesn't matter if I call stats() from Application.stats() or output the values directly, both report the wrong ones (inside the Application object this!= application and cocoon is invalid). Obviously this error does not occur until one is using javascript objects in the flow scripts. I don't know if that is the same reason for the npes I had with the old flow engine now and then. I am using Cocoon 2.1 and JDK 1.4.1_03. Gunnar
