It should be noted that the session stores the reference and not the value. 

Say  we have a cluster with two nodes: node-A and node-B.  Now consider the 
following timeline:

1. Application on node-A executes

  String name = "Mary";

2. Application on node-A executes

  session.setAttribute("username", name);

3. App-server on node-A notices this change to the session and
  a) serializes the value corresponding to "username"
  b) broadcasts to all nodes in the cluster.
  Now node-B believes the value of the session attribute "username" to be "Mary"

4. Application on node-A executes

  name = "John"

5. Application on node-A executes

  String foo = (String)session.getAttribute("username");

  The value of foo is "John".

6. Application on node-B executes

  String bar = (String)session.getAttribute("username");

  The value of bar is "Mary".

Sri 

> -----Original Message-----
> From: Yu, Ed [mailto:[EMAIL PROTECTED] 
> Sent: Friday, April 08, 2005 11:35 AM
> To: 'Tapestry users'
> Subject: RE: Clustering mutable objects
> 
> You are replacing the session attribute in the case of 
> String, but in the other case, you are modifying the 
> attribute of the object which is stored within the session.
> 
> -----Original Message-----
> From: Sri Sankaran [mailto:[EMAIL PROTECTED]
> Sent: Friday, April 08, 2005 10:32 AM
> To: Tapestry users
> Subject: RE: Clustering mutable objects
> 
> I recognize the immutability of Strings.  My question is how 
> is it immune the problem.  I see the same stale value problem 
> possible if I do
> 
> String name = "Mary";
> session.setAttribute("username", name); name = "John";
> 
> Sri
> 
> > -----Original Message-----
> > From: Shing Hing Man [mailto:[EMAIL PROTECTED]
> > Sent: Friday, April 08, 2005 10:59 AM
> > To: Tapestry users
> > Subject: Re: Clustering mutable objects
> > 
> > Java.lang.String is immutable - it has no setter method.
> > 
> > Shing.
> > 
> > 
> > --- Sri Sankaran <[EMAIL PROTECTED]> wrote:
> > > I was reading Tapestry In Action and did not understand the 
> > > implication of clustering a mutable object. Hope you can explain.
> > >  
> > > To set the stage, the section states that an app server --
> > such as Web
> > > Logic -- broadcasts a change to all servers in a cluster in
> > response
> > > to an invocation of the setAttribute method of an 
> HttpSession.  The 
> > > article goes on differentiate mutable and immutable objects
> > placed in
> > > a session.
> > > It says that depending on the sequence of the steps, the 
> value of a 
> > > session attribute on server in a cluster can be stale.  
> For example:
> > >  
> > > session.setAttribute("some token", x); 
> x.setSomeValue("some value");
> > >  
> > > In this case, since the object referred to by 'x' is 
> being modified
> > > *after* a call to setAttribute, it may not get propagated to all 
> > > servers in a cluster.
> > > The cagey *may not* is because we may get lucky if the app server 
> > > hasn't got around to serializing 'x'
> > > and broadcasting it, before the application invokes the
> > setSomeValue
> > > method.
> > >  
> > > My question is: How is this any different if x were an immutable 
> > > object -- such as a String?  Wouldn't we have the same problem?
> > >  
> > > Sri
> > > 
> > 
> > Home page :
> >   http://uk.geocities.com/matmsh/index.html
> > 
> > Send instant messages to your online friends 
> > http://uk.messenger.yahoo.com
> > 
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: 
> [EMAIL PROTECTED]
> > 
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to