I had a lot of experiences with users using multiple tabs of the same
browser.
They can do really a mess

p.stavrini...@albourne.com ha scritto:
>> Multiple threads accessing the same data concurrently => potential  
>> threading issues.
>>     
>
> Yes its true that multiple requests can occur when referencing a session, so 
> technically there is a thread safety design flaw in the Servlet spec, but an 
> HttpSession is tied to a particular user and browser session, which reduces 
> the likelihood, though they can still happen. Serializing requests on an 
> HttpSession can remove most of these concurrency problems by serialized 
> invocations from the same client, but again its not that likely, where there 
> is a larger issue is unsafe access to the ServletContext.
>
> Peter
>
>
>
>
>
>
>
> ----- Original Message -----
> From: "Robert Zeigler" <robe...@scazdl.org>
> To: "Tapestry users" <users@tapestry.apache.org>
> Sent: Tuesday, 14 July, 2009 17:03:22 GMT +02:00 Athens, Beirut, Bucharest, 
> Istanbul
> Subject: Re: T5 Page field persistance and multithread problems
>
> Alfie, actually, many people have done just that.
> And for the record, Kristjan is right in that this is very much a  
> threading issue.
> Multiple threads accessing the same data concurrently => potential  
> threading issues.
> In the case of non-persisted field and values on a page, you don't  
> have threading issues because the data is unique to each request.  But  
> the moment you introduce session-persisted data, you've moved beyond  
> that scope and you absolutely have to consider multi-threaded  
> effects.  The problem is marginal for @Persisted fields; at least the  
> persisted-data is specified to a single page.  But using session state  
> objects, the potential problem becomes worse.  If you're using session  
> state objects, and you're not considering the impact of multiple  
> threads on your data, you're asking for trouble.  That said, this  
> problem is certainly not unique to Tapestry; anytime the session is  
> invoked, you have potential threading issues.
>
> Cheers,
>
> Robert
>
> On Jul 14, 2009, at 7/148:09 AM , Alfie Kirkpatrick wrote:
>
>   
>> Hi Kristjan,
>>
>> I think your mail is interesting but tend to agree with the other
>> posters who say this is not a Tapestry issue per se. I do not know of
>> any framework that queues up requests from a particular session to
>> ensure they are not executed in parallel. This would seem to be a bad
>> idea in principle.
>>
>> Given that read/writes to the session itself are not synchronised,  
>> it is
>> always possible for multiple request threads to get invalid state from
>> the session.
>>
>> A potentially valid point is that the Tapestry model makes this  
>> 'worse'
>> by automatically reflecting the session at the start of processing and
>> only writing it back at the end (assuming this is what it does -- can
>> anyone confirm?). In a lower-level framework like raw servlets you  
>> could
>> potentially minimise the effect of this problem by re-reading the
>> session value before writing it back after a long running process, but
>> you'd still have to deal with the exception if it had changed  
>> (assuming
>> your long running process made use of the old value somehow!). Even in
>> this extreme case you'd only be minimising the problem because another
>> thread could still read and update the session state while you are  
>> doing
>> the same at the end of your processing.
>>
>> Perhaps there is already a standard pattern in Tapestry to avoid
>> multiple submits of a form? Although this would not affect your test  
>> as
>> you have multiple browser windows.
>>
>> Hope this makes sense,
>> Alfie.
>>
>> -----Original Message-----
>> From: kristjankelt [mailto:kristjank...@hotmail.com]
>> Sent: 14 July 2009 11:11
>> To: users@tapestry.apache.org
>> Subject: Re: T5 Page field persistance and multithread problems
>>
>>
>> Hi,
>>
>>
>> Peter Stavrinides wrote:
>>     
>>> Kristjan, as Nille has explained to you that is simply not the case,
>>>       
>> what
>>     
>>> is happening is multiple requests are being generated when the submit
>>> button is clicked more than once, each of these Requests spawns a new
>>> thread, and triggers the events that modify the affected values
>>> accordingly.
>>>
>>> Persisted objects scoped to 'session' are essentially just objects
>>>       
>> placed
>>     
>>> in the HttpSession, which is perfectly thread safe to do, so what
>>>       
>> thread
>>     
>>> problems are you referring to?
>>>
>>>       
>> Multiple threads (initiated by multiple requests) accessing the same
>> data is
>> definitelly thread issue - it does not go away when you say that  
>> this is
>> multiple request issue instead and everyone else is having the same
>> problem.
>>
>> Of course this problem is caused by multiple requests that are allowed
>> to
>> run in paralel when they should wait in the queue instead but stating
>> this
>> does not make the code thread safe.
>>
>> And of course this is really simple example that does not involve any
>> data
>> sent by the client - that would introduce more problems.
>>
>>
>> Peter Stavrinides wrote:
>>     
>>>> every page instance would have it's own *copy* of the data
>>>>         
>>> Although a page object itself is pooled, and a clean copy is served
>>>       
>> when
>>     
>>> its requested. That does not mean that it contains copies of state
>>>       
>> objects
>>     
>>> / data, if you peek inside the users HttpSession you will find only a
>>> single SSO (or persistent field for that matter) of any session  
>>> scoped
>>> objects. So far as I understand there are no 'copies' of these  
>>> objects
>>>       
>> or
>>     
>>> any other session data floating around, any persistent object in your
>>>       
>> page
>>     
>>> would simply be a 'reference' to those in the HttpSession.
>>>
>>>       
>> Let say that I have new request. What happens now is that page is  
>> taken
>> from
>> the pool and is initiated.
>>
>> During that variable is read from the session and reference of the  
>> page
>> object private variable is set to that variable.
>>
>> Let assume that there was object Integer(1) in the session. Now both,
>> session and page object private variable are referencing to the same
>> object.
>> Let's name this variable a counter.
>>
>> Let say that in the page event method (like in my example) I want to
>> increment the counter. For that I read the object Integer(1) int
>> (primitive)
>> value (or this is done by compiler using autoboxing), add one to it  
>> and
>> create new object Integer(2) and set page private variable reference  
>> to
>> new
>> object (Object(2)) (this happens because Integer is immutable and I  
>> can
>> not
>> change it's innerstate).
>>
>>     
>>> From this moment, page and session will have different copies (and it
>>>       
>> will
>> stay so until session reference is overridden at the end of page
>> processing).
>>
>> When different thread is reading from the session then it will still  
>> see
>> the
>> reference to Integer(1) and it's corrensponding page object private
>> variable
>> reference is set to Integer(1).
>>
>> Now this example involved only one variable and this was immutable  
>> (you
>> can
>> not change it's innerstate). Having multiple variables or immutable
>> variables (like entity beans) will introduce more problems.
>>
>> Regards,
>> Kristjan Kelt
>> -- 
>> View this message in context:
>> http://www.nabble.com/T5-Page-field-persistance-and-multithread-problems
>> -tp24468298p24476799.html
>> Sent from the Tapestry - User mailing list archive at Nabble.com.
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>     
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>
>
>   

-- 
==================================================
dott. Ivano Mario Luberti
Archimede Informatica societa' cooperativa a r. l.
Sede Operativa
Via Gereschi 36 - 56126- Pisa
tel.: +39-050- 580959
tel/fax: +39-050-9711344
web: www.archicoop.it
==================================================


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to