It applies mainly during page rendering request.
So far a transaction is started by the server at the beginning of the request and is suspended before entering a portlet and resumed after. When the portal request terminates then the transaction is terminated.
Concurrent access to the underlying servlet request and response.
Start the transaction at the server request level
During the page render
Gather all windows of the page to render
For each window get a thread to execute its rendering
Wait all responses and aggregate the result
Ends the transaction at the server request level
One possible solution is to make a snapshot of the environment, each concurrent request would work with a snapshot of the request attributes and the session attributes of the dispatched portlets. At the end of the whole request there would be a merging phase.
Todo : define clearly what we can do and how
Each window will be rendered using its own transaction that will load the data it needs (user profile and preferences mainly).
Define a timeout in order to discard a result that would not be obtained within a specified amount of time