[google-appengine] Re: Is it really bad to define global variables?

2010-08-04 Thread Nacho Coloma
On Jul 30, 8:47 pm, Ikai L (Google) ika...@google.com wrote:
 it sounded like he wanted to do it on
 a per query basis - and there'd be all the problems with global mutable
 state, concurrency, etc.

Just for the sake of completeness, this case is usually implemented
using a static ThreadLocal instance. But I agree that it should be
avoided.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-30 Thread Jeff Schwartz
Hi Stephen,

I hope I wasn't perceived as someone trying to be right. I was only trying
to prevent other readers from being misinformed.

Modern programming languages offer a lot of useful 'tools' that empower the
kinds of programming constructs that at one time were only dreamed of. It
would be wasteful if one didn't take advantage of them.

Jeff


On Thu, Jul 29, 2010 at 10:55 PM, Stephen Johnson onepagewo...@gmail.comwrote:

 Yes Jeff, you are correct, constant values are safe to use.

 On Jul 29, 7:23 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Stephen
 
  With all due respect, you are stating the obvious and the use case you
  present is like a text book example of last in first out/race ahead
  condition. Perhaps if the coder had declared the static variable final
 and
  initialized it in a static constructor it would have prevented multiple
  assignments - assuming a single class loader of course and a single class
  cache.
 
  Not that your point isn't valid. One does have to take care when using
 any
  language feature, Java or any language for that matter. That is obvious I
  hope.
 
  In any case I wouldn't advise anyone from avoiding using static class
 fields
  if it fits their use case. With care they can and are used without any
  problems.
 
  Jeff
 
  On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson onepagewo...@gmail.com
 wrote:
 
 
 
 
 
   Hi Jeff (and possible Bill if you're using Java and not Python (not
   sure from the question since I don't know Python))
   (Assuming Java) Using static variables could cause all kinds of
   trouble if proper care is not taken to limit their accessibility since
   they are shared and all requests that are being handled by that
   particular JVM instance be accessing the same data. That data would be
   accessible for simultaneous requests and would also survive after the
   requests have finished processing and would be available to the next
   request(s). This data would exist until GAE shutdown that particular
   app instance on that JVM (or restarted due to a deployment, etc.)
   Other JVM instances of the app would have different values.
 
   So, for example, if we have:
 
   public class Beta {
 public int x;
   }
 
   public class Alpha {
public static Beta beta;
   }
 
   So if Servlet #1 receives a request and does:
 
Beta b = new Beta();
b.x = 5;
Alpha.beta.x = b;
 
   And then Servlet #2 receives a request and does:
Beta b = new Beta();
b.x = 17;
Alpha.beta.x = b;
 
   And then Servlet #1 continues processing:
 b.x = b.x + 5;
 ***  Oops! b.x is now 17, not 5 ***
 
   Also, this Beta object will exist even after the requests have all
   finished since the static instance will stick around. Note, that this
   occurs even though these objects are not Serializable.
 
   So, Jeff in response to:
If storing values in class static fields were problematic I'd guess
 that
this would break quite a number of web apps. What do you think?
   Well, static variables are by their very nature are supposed to be
   shared and are not a problem if used correctly and for that purpose,
   but in Bill's case he would be attempting to use a shared variable as
   if it were a private variable accessible only to a particular request
   and so would be used incorrectly and could cause problems for his web
   app.
 
   Okay, so static variables may not be ok. What about storing the data
   in an instance variable of the Servlet?? Well, that wouldn't work
   either since the servlet container only creates one instance of each
   servlet class, thus the instance variables of the servlet classes act
   almost like static variables, that is, they are shared amongst all
   requests to that servlet and would survive even after the requests
   have finished processing since the servlet container will keep the
   servlet instances alive until the servlet container shuts down.
 
   So, if Bill is using Java, then what should he do. Well,
   1.) I'm not sure why you have to re-sync the object A that is passed
   in the constructors of the other objects with the handler's object A.
   In Java, these would be the same object unless you are making some
   sort of clone (or copy). So, I think your approach works. At least for
   Java. Unless you've left some detail out.
   2.) So what you can do is you can use the ThreadLocal class to store
   object A. The ThreadLocal class acts like a Map but the values are
   specific to each thread and other threads don't see each other's
   values. So, at the beginning of the request you can store object A
   into the ThreadLocal object and then objects B, C, D, etc. can access
   that object by key. One caveat is that these values would be available
   to the next request that is handled by that thread so you'd need to
   make sure you clear these values at either the ending or beginning of
   each request.
 
   Stephen
 
   On Jul 29, 5:40 am, Jeff Schwartz jefftschwa...@gmail.com 

Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-30 Thread Jeff Schwartz
I'm not sure what you mean by 'globals'. Static fields are not global - they
must be referenced using a class name.

On Fri, Jul 30, 2010 at 1:23 PM, Ikai L (Google) ika...@google.com wrote:

 I avoided this thread because I wanted to see some code first. It sounded
 like the original poster wanted to use globals in a non-thread safe way.

 Statics are not a bad thing, but using globals to pass state around that is
 only useful in local scope is very, very bad.

 On Fri, Jul 30, 2010 at 7:11 AM, Jeff Schwartz jefftschwa...@gmail.comwrote:

 Hi Stephen,

 I hope I wasn't perceived as someone trying to be right. I was only trying
 to prevent other readers from being misinformed.

 Modern programming languages offer a lot of useful 'tools' that empower
 the kinds of programming constructs that at one time were only dreamed of.
 It would be wasteful if one didn't take advantage of them.

 Jeff


 On Thu, Jul 29, 2010 at 10:55 PM, Stephen Johnson onepagewo...@gmail.com
  wrote:

 Yes Jeff, you are correct, constant values are safe to use.

 On Jul 29, 7:23 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Stephen
 
  With all due respect, you are stating the obvious and the use case you
  present is like a text book example of last in first out/race ahead
  condition. Perhaps if the coder had declared the static variable final
 and
  initialized it in a static constructor it would have prevented multiple
  assignments - assuming a single class loader of course and a single
 class
  cache.
 
  Not that your point isn't valid. One does have to take care when using
 any
  language feature, Java or any language for that matter. That is obvious
 I
  hope.
 
  In any case I wouldn't advise anyone from avoiding using static class
 fields
  if it fits their use case. With care they can and are used without any
  problems.
 
  Jeff
 
  On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson 
 onepagewo...@gmail.comwrote:
 
 
 
 
 
   Hi Jeff (and possible Bill if you're using Java and not Python (not
   sure from the question since I don't know Python))
   (Assuming Java) Using static variables could cause all kinds of
   trouble if proper care is not taken to limit their accessibility
 since
   they are shared and all requests that are being handled by that
   particular JVM instance be accessing the same data. That data would
 be
   accessible for simultaneous requests and would also survive after the
   requests have finished processing and would be available to the next
   request(s). This data would exist until GAE shutdown that particular
   app instance on that JVM (or restarted due to a deployment, etc.)
   Other JVM instances of the app would have different values.
 
   So, for example, if we have:
 
   public class Beta {
 public int x;
   }
 
   public class Alpha {
public static Beta beta;
   }
 
   So if Servlet #1 receives a request and does:
 
Beta b = new Beta();
b.x = 5;
Alpha.beta.x = b;
 
   And then Servlet #2 receives a request and does:
Beta b = new Beta();
b.x = 17;
Alpha.beta.x = b;
 
   And then Servlet #1 continues processing:
 b.x = b.x + 5;
 ***  Oops! b.x is now 17, not 5 ***
 
   Also, this Beta object will exist even after the requests have all
   finished since the static instance will stick around. Note, that this
   occurs even though these objects are not Serializable.
 
   So, Jeff in response to:
If storing values in class static fields were problematic I'd guess
 that
this would break quite a number of web apps. What do you think?
   Well, static variables are by their very nature are supposed to be
   shared and are not a problem if used correctly and for that purpose,
   but in Bill's case he would be attempting to use a shared variable as
   if it were a private variable accessible only to a particular request
   and so would be used incorrectly and could cause problems for his web
   app.
 
   Okay, so static variables may not be ok. What about storing the data
   in an instance variable of the Servlet?? Well, that wouldn't work
   either since the servlet container only creates one instance of each
   servlet class, thus the instance variables of the servlet classes act
   almost like static variables, that is, they are shared amongst all
   requests to that servlet and would survive even after the requests
   have finished processing since the servlet container will keep the
   servlet instances alive until the servlet container shuts down.
 
   So, if Bill is using Java, then what should he do. Well,
   1.) I'm not sure why you have to re-sync the object A that is passed
   in the constructors of the other objects with the handler's object A.
   In Java, these would be the same object unless you are making some
   sort of clone (or copy). So, I think your approach works. At least
 for
   Java. Unless you've left some detail out.
   2.) So what you can do is you can use the ThreadLocal class to store
   object A. The ThreadLocal class 

Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-30 Thread Ikai L (Google)
I avoided this thread because I wanted to see some code first. It sounded
like the original poster wanted to use globals in a non-thread safe way.

Statics are not a bad thing, but using globals to pass state around that is
only useful in local scope is very, very bad.

On Fri, Jul 30, 2010 at 7:11 AM, Jeff Schwartz jefftschwa...@gmail.comwrote:

 Hi Stephen,

 I hope I wasn't perceived as someone trying to be right. I was only trying
 to prevent other readers from being misinformed.

 Modern programming languages offer a lot of useful 'tools' that empower the
 kinds of programming constructs that at one time were only dreamed of. It
 would be wasteful if one didn't take advantage of them.

 Jeff


 On Thu, Jul 29, 2010 at 10:55 PM, Stephen Johnson 
 onepagewo...@gmail.comwrote:

 Yes Jeff, you are correct, constant values are safe to use.

 On Jul 29, 7:23 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Stephen
 
  With all due respect, you are stating the obvious and the use case you
  present is like a text book example of last in first out/race ahead
  condition. Perhaps if the coder had declared the static variable final
 and
  initialized it in a static constructor it would have prevented multiple
  assignments - assuming a single class loader of course and a single
 class
  cache.
 
  Not that your point isn't valid. One does have to take care when using
 any
  language feature, Java or any language for that matter. That is obvious
 I
  hope.
 
  In any case I wouldn't advise anyone from avoiding using static class
 fields
  if it fits their use case. With care they can and are used without any
  problems.
 
  Jeff
 
  On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson 
 onepagewo...@gmail.comwrote:
 
 
 
 
 
   Hi Jeff (and possible Bill if you're using Java and not Python (not
   sure from the question since I don't know Python))
   (Assuming Java) Using static variables could cause all kinds of
   trouble if proper care is not taken to limit their accessibility since
   they are shared and all requests that are being handled by that
   particular JVM instance be accessing the same data. That data would be
   accessible for simultaneous requests and would also survive after the
   requests have finished processing and would be available to the next
   request(s). This data would exist until GAE shutdown that particular
   app instance on that JVM (or restarted due to a deployment, etc.)
   Other JVM instances of the app would have different values.
 
   So, for example, if we have:
 
   public class Beta {
 public int x;
   }
 
   public class Alpha {
public static Beta beta;
   }
 
   So if Servlet #1 receives a request and does:
 
Beta b = new Beta();
b.x = 5;
Alpha.beta.x = b;
 
   And then Servlet #2 receives a request and does:
Beta b = new Beta();
b.x = 17;
Alpha.beta.x = b;
 
   And then Servlet #1 continues processing:
 b.x = b.x + 5;
 ***  Oops! b.x is now 17, not 5 ***
 
   Also, this Beta object will exist even after the requests have all
   finished since the static instance will stick around. Note, that this
   occurs even though these objects are not Serializable.
 
   So, Jeff in response to:
If storing values in class static fields were problematic I'd guess
 that
this would break quite a number of web apps. What do you think?
   Well, static variables are by their very nature are supposed to be
   shared and are not a problem if used correctly and for that purpose,
   but in Bill's case he would be attempting to use a shared variable as
   if it were a private variable accessible only to a particular request
   and so would be used incorrectly and could cause problems for his web
   app.
 
   Okay, so static variables may not be ok. What about storing the data
   in an instance variable of the Servlet?? Well, that wouldn't work
   either since the servlet container only creates one instance of each
   servlet class, thus the instance variables of the servlet classes act
   almost like static variables, that is, they are shared amongst all
   requests to that servlet and would survive even after the requests
   have finished processing since the servlet container will keep the
   servlet instances alive until the servlet container shuts down.
 
   So, if Bill is using Java, then what should he do. Well,
   1.) I'm not sure why you have to re-sync the object A that is passed
   in the constructors of the other objects with the handler's object A.
   In Java, these would be the same object unless you are making some
   sort of clone (or copy). So, I think your approach works. At least for
   Java. Unless you've left some detail out.
   2.) So what you can do is you can use the ThreadLocal class to store
   object A. The ThreadLocal class acts like a Map but the values are
   specific to each thread and other threads don't see each other's
   values. So, at the beginning of the request you can store object A
   into the ThreadLocal 

Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-30 Thread Ikai L (Google)
A static isn't global, but in the OP's use case, it's way out of the scope
of what he needs to do, which is to pass around objects. Rather than passing
the object around, it sounded like he just wanted to stash the object into
global/static scope and pull it out. There are certainly use cases for this,
but I wanted to discourage it because it sounded like he wanted to do it on
a per query basis - and there'd be all the problems with global mutable
state, concurrency, etc. Statics are a great place for configuration (if
config is loaded via a query that'd be a correct use case) or things which
don't change frequently. I was just making a point that it seemed like the
OP was using it for something which *does* change all the time.

On Fri, Jul 30, 2010 at 10:42 AM, Jeff Schwartz jefftschwa...@gmail.comwrote:

 I'm not sure what you mean by 'globals'. Static fields are not global -
 they must be referenced using a class name.

 On Fri, Jul 30, 2010 at 1:23 PM, Ikai L (Google) ika...@google.comwrote:

 I avoided this thread because I wanted to see some code first. It sounded
 like the original poster wanted to use globals in a non-thread safe way.

 Statics are not a bad thing, but using globals to pass state around that
 is only useful in local scope is very, very bad.

 On Fri, Jul 30, 2010 at 7:11 AM, Jeff Schwartz 
 jefftschwa...@gmail.comwrote:

 Hi Stephen,

 I hope I wasn't perceived as someone trying to be right. I was only
 trying to prevent other readers from being misinformed.

 Modern programming languages offer a lot of useful 'tools' that empower
 the kinds of programming constructs that at one time were only dreamed of.
 It would be wasteful if one didn't take advantage of them.

 Jeff


 On Thu, Jul 29, 2010 at 10:55 PM, Stephen Johnson 
 onepagewo...@gmail.com wrote:

 Yes Jeff, you are correct, constant values are safe to use.

 On Jul 29, 7:23 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Stephen
 
  With all due respect, you are stating the obvious and the use case you
  present is like a text book example of last in first out/race ahead
  condition. Perhaps if the coder had declared the static variable final
 and
  initialized it in a static constructor it would have prevented
 multiple
  assignments - assuming a single class loader of course and a single
 class
  cache.
 
  Not that your point isn't valid. One does have to take care when using
 any
  language feature, Java or any language for that matter. That is
 obvious I
  hope.
 
  In any case I wouldn't advise anyone from avoiding using static class
 fields
  if it fits their use case. With care they can and are used without any
  problems.
 
  Jeff
 
  On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson 
 onepagewo...@gmail.comwrote:
 
 
 
 
 
   Hi Jeff (and possible Bill if you're using Java and not Python (not
   sure from the question since I don't know Python))
   (Assuming Java) Using static variables could cause all kinds of
   trouble if proper care is not taken to limit their accessibility
 since
   they are shared and all requests that are being handled by that
   particular JVM instance be accessing the same data. That data would
 be
   accessible for simultaneous requests and would also survive after
 the
   requests have finished processing and would be available to the next
   request(s). This data would exist until GAE shutdown that particular
   app instance on that JVM (or restarted due to a deployment, etc.)
   Other JVM instances of the app would have different values.
 
   So, for example, if we have:
 
   public class Beta {
 public int x;
   }
 
   public class Alpha {
public static Beta beta;
   }
 
   So if Servlet #1 receives a request and does:
 
Beta b = new Beta();
b.x = 5;
Alpha.beta.x = b;
 
   And then Servlet #2 receives a request and does:
Beta b = new Beta();
b.x = 17;
Alpha.beta.x = b;
 
   And then Servlet #1 continues processing:
 b.x = b.x + 5;
 ***  Oops! b.x is now 17, not 5 ***
 
   Also, this Beta object will exist even after the requests have all
   finished since the static instance will stick around. Note, that
 this
   occurs even though these objects are not Serializable.
 
   So, Jeff in response to:
If storing values in class static fields were problematic I'd
 guess that
this would break quite a number of web apps. What do you think?
   Well, static variables are by their very nature are supposed to be
   shared and are not a problem if used correctly and for that purpose,
   but in Bill's case he would be attempting to use a shared variable
 as
   if it were a private variable accessible only to a particular
 request
   and so would be used incorrectly and could cause problems for his
 web
   app.
 
   Okay, so static variables may not be ok. What about storing the data
   in an instance variable of the Servlet?? Well, that wouldn't work
   either since the servlet container only creates one instance of each
   servlet class, thus 

Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-30 Thread Jeff Schwartz
Yup, yup!

I'd bet there's a good design pattern for this.

I'd really like to see more online docs specifically dealing with design
pattern implementations geared towards the different aspects and intricacies
of appengine. The docs could even be tied via links to some of the great
Google IO videos out there on YouTube. Personally, I would love to see this
happen. At a minimum, it would be nice to consolidate the masses into a
centralized index.

Jeff

On Fri, Jul 30, 2010 at 2:47 PM, Ikai L (Google) ika...@google.com wrote:

 A static isn't global, but in the OP's use case, it's way out of the scope
 of what he needs to do, which is to pass around objects. Rather than passing
 the object around, it sounded like he just wanted to stash the object into
 global/static scope and pull it out. There are certainly use cases for this,
 but I wanted to discourage it because it sounded like he wanted to do it on
 a per query basis - and there'd be all the problems with global mutable
 state, concurrency, etc. Statics are a great place for configuration (if
 config is loaded via a query that'd be a correct use case) or things which
 don't change frequently. I was just making a point that it seemed like the
 OP was using it for something which *does* change all the time.

 On Fri, Jul 30, 2010 at 10:42 AM, Jeff Schwartz 
 jefftschwa...@gmail.comwrote:

 I'm not sure what you mean by 'globals'. Static fields are not global -
 they must be referenced using a class name.

 On Fri, Jul 30, 2010 at 1:23 PM, Ikai L (Google) ika...@google.comwrote:

 I avoided this thread because I wanted to see some code first. It sounded
 like the original poster wanted to use globals in a non-thread safe way.

 Statics are not a bad thing, but using globals to pass state around that
 is only useful in local scope is very, very bad.

 On Fri, Jul 30, 2010 at 7:11 AM, Jeff Schwartz 
 jefftschwa...@gmail.comwrote:

 Hi Stephen,

 I hope I wasn't perceived as someone trying to be right. I was only
 trying to prevent other readers from being misinformed.

 Modern programming languages offer a lot of useful 'tools' that empower
 the kinds of programming constructs that at one time were only dreamed of.
 It would be wasteful if one didn't take advantage of them.

 Jeff


 On Thu, Jul 29, 2010 at 10:55 PM, Stephen Johnson 
 onepagewo...@gmail.com wrote:

 Yes Jeff, you are correct, constant values are safe to use.

 On Jul 29, 7:23 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Stephen
 
  With all due respect, you are stating the obvious and the use case
 you
  present is like a text book example of last in first out/race ahead
  condition. Perhaps if the coder had declared the static variable
 final and
  initialized it in a static constructor it would have prevented
 multiple
  assignments - assuming a single class loader of course and a single
 class
  cache.
 
  Not that your point isn't valid. One does have to take care when
 using any
  language feature, Java or any language for that matter. That is
 obvious I
  hope.
 
  In any case I wouldn't advise anyone from avoiding using static class
 fields
  if it fits their use case. With care they can and are used without
 any
  problems.
 
  Jeff
 
  On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson 
 onepagewo...@gmail.comwrote:
 
 
 
 
 
   Hi Jeff (and possible Bill if you're using Java and not Python (not
   sure from the question since I don't know Python))
   (Assuming Java) Using static variables could cause all kinds of
   trouble if proper care is not taken to limit their accessibility
 since
   they are shared and all requests that are being handled by that
   particular JVM instance be accessing the same data. That data would
 be
   accessible for simultaneous requests and would also survive after
 the
   requests have finished processing and would be available to the
 next
   request(s). This data would exist until GAE shutdown that
 particular
   app instance on that JVM (or restarted due to a deployment, etc.)
   Other JVM instances of the app would have different values.
 
   So, for example, if we have:
 
   public class Beta {
 public int x;
   }
 
   public class Alpha {
public static Beta beta;
   }
 
   So if Servlet #1 receives a request and does:
 
Beta b = new Beta();
b.x = 5;
Alpha.beta.x = b;
 
   And then Servlet #2 receives a request and does:
Beta b = new Beta();
b.x = 17;
Alpha.beta.x = b;
 
   And then Servlet #1 continues processing:
 b.x = b.x + 5;
 ***  Oops! b.x is now 17, not 5 ***
 
   Also, this Beta object will exist even after the requests have all
   finished since the static instance will stick around. Note, that
 this
   occurs even though these objects are not Serializable.
 
   So, Jeff in response to:
If storing values in class static fields were problematic I'd
 guess that
this would break quite a number of web apps. What do you think?
   Well, static variables are by their very nature are 

[google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Tim Hoffman
The biggest problem I see with storing the value at a class/module
level
is you really need to make sure you clean up after yourself, otherwise
the
value may still be set when the next request is processed and that
value may not be
appropriate.

I would personally always grab/cache values in request object,
memcache, and or session
as appropriate.

That way there is no danger of exposing data to other requests.

But hey, if you want to use module level caches go for it.

I have been running appengine projects ever since it was released and
started out with some
module level cache, and regretted it ever since.  It was has proven to
be difficult ensure the cache
has been cleaned up, where as memcahce you can control out of
process.  (You can't shut an instance down
if it has an error and you can't remove a value from a module cache)

Rgds

T

On Jul 29, 4:19 pm, Bill Edwards twmaf...@gmail.com wrote:
 Hey guys,

 Is it horrible to use global variables?  I am currently executing a
 query at the beginning of my handler and storing the query result
 within class object A.  I subsequently need to access the query result
 within multiple different class objects, say B, C, and D.  It has been
 recommended to me to cache object A in the request object, but i need
 to access the variable from within various class objects, so I'm
 finding that I have to pass the object A in to the constructor for
 every new object i define, and then sync any changed state of object A
 with the handler's version of object A when the various class object
 functions are completed.

 So it really seems like the simplest way to do things is to just
 define a global variable.  Is there a better option?  Can I think I
 would ideally want to create something liek a session object to store
 the global object.

 Thanks!
 Bill

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Jeff Schwartz
Hi Tim.

Help me out here 'cause I don't understand what problem you see with storing
a value in a static field?

As far as I know (and I am limiting my discussion here to Java and servlets)
objects are not persisted across http requests unless they are serializable
and stored in session or in memcache and that takes programming effort
meaning you have to deliberately program the behavior.

Yes there are statefull web frameworks such as Wicket and JSF for instance
that will persist objects accross requests without programming effort but
even these are limited to model and view class instances for the most part.

As for classes (not instances) persisting across requests (and eliminating
those classes that are servlet and other server pluming classes) what
classes are persisted across requests?

If storing values in class static fields were problematic I'd guess that
this would break quite a number of web apps. What do you think?

Jeff

On Thu, Jul 29, 2010 at 7:31 AM, Tim Hoffman zutes...@gmail.com wrote:

 The biggest problem I see with storing the value at a class/module
 level
 is you really need to make sure you clean up after yourself, otherwise
 the
 value may still be set when the next request is processed and that
 value may not be
 appropriate.

 I would personally always grab/cache values in request object,
 memcache, and or session
 as appropriate.

 That way there is no danger of exposing data to other requests.

 But hey, if you want to use module level caches go for it.

 I have been running appengine projects ever since it was released and
 started out with some
 module level cache, and regretted it ever since.  It was has proven to
 be difficult ensure the cache
 has been cleaned up, where as memcahce you can control out of
 process.  (You can't shut an instance down
 if it has an error and you can't remove a value from a module cache)

 Rgds

 T

 On Jul 29, 4:19 pm, Bill Edwards twmaf...@gmail.com wrote:
  Hey guys,
 
  Is it horrible to use global variables?  I am currently executing a
  query at the beginning of my handler and storing the query result
  within class object A.  I subsequently need to access the query result
  within multiple different class objects, say B, C, and D.  It has been
  recommended to me to cache object A in the request object, but i need
  to access the variable from within various class objects, so I'm
  finding that I have to pass the object A in to the constructor for
  every new object i define, and then sync any changed state of object A
  with the handler's version of object A when the various class object
  functions are completed.
 
  So it really seems like the simplest way to do things is to just
  define a global variable.  Is there a better option?  Can I think I
  would ideally want to create something liek a session object to store
  the global object.
 
  Thanks!
  Bill

 --
 You received this message because you are subscribed to the Google Groups
 Google App Engine group.
 To post to this group, send email to google-appeng...@googlegroups.com.
 To unsubscribe from this group, send email to
 google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.




-- 
--
Jeff

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Tim Hoffman
Hi

On Jul 29, 8:40 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
 Hi Tim.

 Help me out here 'cause I don't understand what problem you see with storing
 a value in a static field?

Wouldn't have a clue.  I don't use java on appengine. You didn't
mention in your original
post you where  specifically talking about java.

In python class/module cached definitions last for as long as the app
instance is running.

T





 As far as I know (and I am limiting my discussion here to Java and servlets)
 objects are not persisted across http requests unless they are serializable
 and stored in session or in memcache and that takes programming effort
 meaning you have to deliberately program the behavior.

 Yes there are statefull web frameworks such as Wicket and JSF for instance
 that will persist objects accross requests without programming effort but
 even these are limited to model and view class instances for the most part.

 As for classes (not instances) persisting across requests (and eliminating
 those classes that are servlet and other server pluming classes) what
 classes are persisted across requests?

 If storing values in class static fields were problematic I'd guess that
 this would break quite a number of web apps. What do you think?

 Jeff





 On Thu, Jul 29, 2010 at 7:31 AM, Tim Hoffman zutes...@gmail.com wrote:
  The biggest problem I see with storing the value at a class/module
  level
  is you really need to make sure you clean up after yourself, otherwise
  the
  value may still be set when the next request is processed and that
  value may not be
  appropriate.

  I would personally always grab/cache values in request object,
  memcache, and or session
  as appropriate.

  That way there is no danger of exposing data to other requests.

  But hey, if you want to use module level caches go for it.

  I have been running appengine projects ever since it was released and
  started out with some
  module level cache, and regretted it ever since.  It was has proven to
  be difficult ensure the cache
  has been cleaned up, where as memcahce you can control out of
  process.  (You can't shut an instance down
  if it has an error and you can't remove a value from a module cache)

  Rgds

  T

  On Jul 29, 4:19 pm, Bill Edwards twmaf...@gmail.com wrote:
   Hey guys,

   Is it horrible to use global variables?  I am currently executing a
   query at the beginning of my handler and storing the query result
   within class object A.  I subsequently need to access the query result
   within multiple different class objects, say B, C, and D.  It has been
   recommended to me to cache object A in the request object, but i need
   to access the variable from within various class objects, so I'm
   finding that I have to pass the object A in to the constructor for
   every new object i define, and then sync any changed state of object A
   with the handler's version of object A when the various class object
   functions are completed.

   So it really seems like the simplest way to do things is to just
   define a global variable.  Is there a better option?  Can I think I
   would ideally want to create something liek a session object to store
   the global object.

   Thanks!
   Bill

  --
  You received this message because you are subscribed to the Google Groups
  Google App Engine group.
  To post to this group, send email to google-appeng...@googlegroups.com.
  To unsubscribe from this group, send email to
  google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib 
  e...@googlegroups.com
  .
  For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.

 --
 --
 Jeff

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Jeff Schwartz
I wasn't the original poster but I was curious about your caution regarding
class static fields.

Which Python framework are you using if you don't mind me asking?

Jeff


On Thu, Jul 29, 2010 at 10:49 AM, Tim Hoffman zutes...@gmail.com wrote:

 Hi

 On Jul 29, 8:40 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Hi Tim.
 
  Help me out here 'cause I don't understand what problem you see with
 storing
  a value in a static field?

 Wouldn't have a clue.  I don't use java on appengine. You didn't
 mention in your original
 post you where  specifically talking about java.

 In python class/module cached definitions last for as long as the app
 instance is running.

 T




 
  As far as I know (and I am limiting my discussion here to Java and
 servlets)
  objects are not persisted across http requests unless they are
 serializable
  and stored in session or in memcache and that takes programming effort
  meaning you have to deliberately program the behavior.
 
  Yes there are statefull web frameworks such as Wicket and JSF for
 instance
  that will persist objects accross requests without programming effort but
  even these are limited to model and view class instances for the most
 part.
 
  As for classes (not instances) persisting across requests (and
 eliminating
  those classes that are servlet and other server pluming classes) what
  classes are persisted across requests?
 
  If storing values in class static fields were problematic I'd guess that
  this would break quite a number of web apps. What do you think?
 
  Jeff
 
 
 
 
 
  On Thu, Jul 29, 2010 at 7:31 AM, Tim Hoffman zutes...@gmail.com wrote:
   The biggest problem I see with storing the value at a class/module
   level
   is you really need to make sure you clean up after yourself, otherwise
   the
   value may still be set when the next request is processed and that
   value may not be
   appropriate.
 
   I would personally always grab/cache values in request object,
   memcache, and or session
   as appropriate.
 
   That way there is no danger of exposing data to other requests.
 
   But hey, if you want to use module level caches go for it.
 
   I have been running appengine projects ever since it was released and
   started out with some
   module level cache, and regretted it ever since.  It was has proven to
   be difficult ensure the cache
   has been cleaned up, where as memcahce you can control out of
   process.  (You can't shut an instance down
   if it has an error and you can't remove a value from a module cache)
 
   Rgds
 
   T
 
   On Jul 29, 4:19 pm, Bill Edwards twmaf...@gmail.com wrote:
Hey guys,
 
Is it horrible to use global variables?  I am currently executing a
query at the beginning of my handler and storing the query result
within class object A.  I subsequently need to access the query
 result
within multiple different class objects, say B, C, and D.  It has
 been
recommended to me to cache object A in the request object, but i need
to access the variable from within various class objects, so I'm
finding that I have to pass the object A in to the constructor for
every new object i define, and then sync any changed state of object
 A
with the handler's version of object A when the various class object
functions are completed.
 
So it really seems like the simplest way to do things is to just
define a global variable.  Is there a better option?  Can I think I
would ideally want to create something liek a session object to store
the global object.
 
Thanks!
Bill
 
   --
   You received this message because you are subscribed to the Google
 Groups
   Google App Engine group.
   To post to this group, send email to google-appengine@googlegroups.com
 .
   To unsubscribe from this group, send email to
   google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib
 e...@googlegroups.com
   .
   For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 
  --
  --
  Jeff

 --
 You received this message because you are subscribed to the Google Groups
 Google App Engine group.
 To post to this group, send email to google-appeng...@googlegroups.com.
 To unsubscribe from this group, send email to
 google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.




-- 
--
Jeff

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To post to this group, send email to google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Tim Hoffman
Hi

On Jul 29, 11:32 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
 I wasn't the original poster but I was curious about your caution regarding
 class static fields.


Sorry missed that. Having not done any development with java on
appengine all my development (and hence statements about module level
caches)


 Which Python framework are you using if you don't mind me asking?


www.polytechnic.wa.edu.au is based on repoze.bfg (http://
bfg.repoze.org/)

The current project I am working on is based on bobo, zope.component,
formish and repoze.what. (and using a simple bfg based cms for help
content).

Rgds

T

 Jeff





 On Thu, Jul 29, 2010 at 10:49 AM, Tim Hoffman zutes...@gmail.com wrote:
  Hi

  On Jul 29, 8:40 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
   Hi Tim.

   Help me out here 'cause I don't understand what problem you see with
  storing
   a value in a static field?

  Wouldn't have a clue.  I don't use java on appengine. You didn't
  mention in your original
  post you where  specifically talking about java.

  In python class/module cached definitions last for as long as the app
  instance is running.

  T

   As far as I know (and I am limiting my discussion here to Java and
  servlets)
   objects are not persisted across http requests unless they are
  serializable
   and stored in session or in memcache and that takes programming effort
   meaning you have to deliberately program the behavior.

   Yes there are statefull web frameworks such as Wicket and JSF for
  instance
   that will persist objects accross requests without programming effort but
   even these are limited to model and view class instances for the most
  part.

   As for classes (not instances) persisting across requests (and
  eliminating
   those classes that are servlet and other server pluming classes) what
   classes are persisted across requests?

   If storing values in class static fields were problematic I'd guess that
   this would break quite a number of web apps. What do you think?

   Jeff

   On Thu, Jul 29, 2010 at 7:31 AM, Tim Hoffman zutes...@gmail.com wrote:
The biggest problem I see with storing the value at a class/module
level
is you really need to make sure you clean up after yourself, otherwise
the
value may still be set when the next request is processed and that
value may not be
appropriate.

I would personally always grab/cache values in request object,
memcache, and or session
as appropriate.

That way there is no danger of exposing data to other requests.

But hey, if you want to use module level caches go for it.

I have been running appengine projects ever since it was released and
started out with some
module level cache, and regretted it ever since.  It was has proven to
be difficult ensure the cache
has been cleaned up, where as memcahce you can control out of
process.  (You can't shut an instance down
if it has an error and you can't remove a value from a module cache)

Rgds

T

On Jul 29, 4:19 pm, Bill Edwards twmaf...@gmail.com wrote:
 Hey guys,

 Is it horrible to use global variables?  I am currently executing a
 query at the beginning of my handler and storing the query result
 within class object A.  I subsequently need to access the query
  result
 within multiple different class objects, say B, C, and D.  It has
  been
 recommended to me to cache object A in the request object, but i need
 to access the variable from within various class objects, so I'm
 finding that I have to pass the object A in to the constructor for
 every new object i define, and then sync any changed state of object
  A
 with the handler's version of object A when the various class object
 functions are completed.

 So it really seems like the simplest way to do things is to just
 define a global variable.  Is there a better option?  Can I think I
 would ideally want to create something liek a session object to store
 the global object.

 Thanks!
 Bill

--
You received this message because you are subscribed to the Google
  Groups
Google App Engine group.
To post to this group, send email to google-appengine@googlegroups.com
  .
To unsubscribe from this group, send email to
google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib
 e...@googlegroups.comgoogle-appengine%2Bunsubscrib
  e...@googlegroups.com
.
For more options, visit this group at
   http://groups.google.com/group/google-appengine?hl=en.

   --
   --
   Jeff

  --
  You received this message because you are subscribed to the Google Groups
  Google App Engine group.
  To post to this group, send email to google-appeng...@googlegroups.com.
  To unsubscribe from this group, send email to
  google-appengine+unsubscr...@googlegroups.comgoogle-appengine%2Bunsubscrib 
  e...@googlegroups.com
  .
  For more options, visit this group at
 

[google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Stephen Johnson
Hi Jeff (and possible Bill if you're using Java and not Python (not
sure from the question since I don't know Python))
(Assuming Java) Using static variables could cause all kinds of
trouble if proper care is not taken to limit their accessibility since
they are shared and all requests that are being handled by that
particular JVM instance be accessing the same data. That data would be
accessible for simultaneous requests and would also survive after the
requests have finished processing and would be available to the next
request(s). This data would exist until GAE shutdown that particular
app instance on that JVM (or restarted due to a deployment, etc.)
Other JVM instances of the app would have different values.

So, for example, if we have:

public class Beta {
   public int x;
}

public class Alpha {
  public static Beta beta;
}

So if Servlet #1 receives a request and does:

  Beta b = new Beta();
  b.x = 5;
  Alpha.beta.x = b;

And then Servlet #2 receives a request and does:
  Beta b = new Beta();
  b.x = 17;
  Alpha.beta.x = b;

And then Servlet #1 continues processing:
   b.x = b.x + 5;
   ***  Oops! b.x is now 17, not 5 ***

Also, this Beta object will exist even after the requests have all
finished since the static instance will stick around. Note, that this
occurs even though these objects are not Serializable.

So, Jeff in response to:
 If storing values in class static fields were problematic I'd guess that
 this would break quite a number of web apps. What do you think?
Well, static variables are by their very nature are supposed to be
shared and are not a problem if used correctly and for that purpose,
but in Bill's case he would be attempting to use a shared variable as
if it were a private variable accessible only to a particular request
and so would be used incorrectly and could cause problems for his web
app.

Okay, so static variables may not be ok. What about storing the data
in an instance variable of the Servlet?? Well, that wouldn't work
either since the servlet container only creates one instance of each
servlet class, thus the instance variables of the servlet classes act
almost like static variables, that is, they are shared amongst all
requests to that servlet and would survive even after the requests
have finished processing since the servlet container will keep the
servlet instances alive until the servlet container shuts down.

So, if Bill is using Java, then what should he do. Well,
1.) I'm not sure why you have to re-sync the object A that is passed
in the constructors of the other objects with the handler's object A.
In Java, these would be the same object unless you are making some
sort of clone (or copy). So, I think your approach works. At least for
Java. Unless you've left some detail out.
2.) So what you can do is you can use the ThreadLocal class to store
object A. The ThreadLocal class acts like a Map but the values are
specific to each thread and other threads don't see each other's
values. So, at the beginning of the request you can store object A
into the ThreadLocal object and then objects B, C, D, etc. can access
that object by key. One caveat is that these values would be available
to the next request that is handled by that thread so you'd need to
make sure you clear these values at either the ending or beginning of
each request.

Stephen

On Jul 29, 5:40 am, Jeff Schwartz jefftschwa...@gmail.com wrote:
 Hi Tim.

 Help me out here 'cause I don't understand what problem you see with storing
 a value in a static field?

 As far as I know (and I am limiting my discussion here to Java and servlets)
 objects are not persisted across http requests unless they are serializable
 and stored in session or in memcache and that takes programming effort
 meaning you have to deliberately program the behavior.

 Yes there are statefull web frameworks such as Wicket and JSF for instance
 that will persist objects accross requests without programming effort but
 even these are limited to model and view class instances for the most part.

 As for classes (not instances) persisting across requests (and eliminating
 those classes that are servlet and other server pluming classes) what
 classes are persisted across requests?

 If storing values in class static fields were problematic I'd guess that
 this would break quite a number of web apps. What do you think?

 Jeff





 On Thu, Jul 29, 2010 at 7:31 AM, Tim Hoffman zutes...@gmail.com wrote:
  The biggest problem I see with storing the value at a class/module
  level
  is you really need to make sure you clean up after yourself, otherwise
  the
  value may still be set when the next request is processed and that
  value may not be
  appropriate.

  I would personally always grab/cache values in request object,
  memcache, and or session
  as appropriate.

  That way there is no danger of exposing data to other requests.

  But hey, if you want to use module level caches go for it.

  I have been running appengine projects 

Re: [google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Jeff Schwartz
Stephen

With all due respect, you are stating the obvious and the use case you
present is like a text book example of last in first out/race ahead
condition. Perhaps if the coder had declared the static variable final and
initialized it in a static constructor it would have prevented multiple
assignments - assuming a single class loader of course and a single class
cache.

Not that your point isn't valid. One does have to take care when using any
language feature, Java or any language for that matter. That is obvious I
hope.

In any case I wouldn't advise anyone from avoiding using static class fields
if it fits their use case. With care they can and are used without any
problems.

Jeff



On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson onepagewo...@gmail.comwrote:

 Hi Jeff (and possible Bill if you're using Java and not Python (not
 sure from the question since I don't know Python))
 (Assuming Java) Using static variables could cause all kinds of
 trouble if proper care is not taken to limit their accessibility since
 they are shared and all requests that are being handled by that
 particular JVM instance be accessing the same data. That data would be
 accessible for simultaneous requests and would also survive after the
 requests have finished processing and would be available to the next
 request(s). This data would exist until GAE shutdown that particular
 app instance on that JVM (or restarted due to a deployment, etc.)
 Other JVM instances of the app would have different values.

 So, for example, if we have:

 public class Beta {
   public int x;
 }

 public class Alpha {
  public static Beta beta;
 }

 So if Servlet #1 receives a request and does:

  Beta b = new Beta();
  b.x = 5;
  Alpha.beta.x = b;

 And then Servlet #2 receives a request and does:
  Beta b = new Beta();
  b.x = 17;
  Alpha.beta.x = b;

 And then Servlet #1 continues processing:
   b.x = b.x + 5;
   ***  Oops! b.x is now 17, not 5 ***

 Also, this Beta object will exist even after the requests have all
 finished since the static instance will stick around. Note, that this
 occurs even though these objects are not Serializable.

 So, Jeff in response to:
  If storing values in class static fields were problematic I'd guess that
  this would break quite a number of web apps. What do you think?
 Well, static variables are by their very nature are supposed to be
 shared and are not a problem if used correctly and for that purpose,
 but in Bill's case he would be attempting to use a shared variable as
 if it were a private variable accessible only to a particular request
 and so would be used incorrectly and could cause problems for his web
 app.

 Okay, so static variables may not be ok. What about storing the data
 in an instance variable of the Servlet?? Well, that wouldn't work
 either since the servlet container only creates one instance of each
 servlet class, thus the instance variables of the servlet classes act
 almost like static variables, that is, they are shared amongst all
 requests to that servlet and would survive even after the requests
 have finished processing since the servlet container will keep the
 servlet instances alive until the servlet container shuts down.

 So, if Bill is using Java, then what should he do. Well,
 1.) I'm not sure why you have to re-sync the object A that is passed
 in the constructors of the other objects with the handler's object A.
 In Java, these would be the same object unless you are making some
 sort of clone (or copy). So, I think your approach works. At least for
 Java. Unless you've left some detail out.
 2.) So what you can do is you can use the ThreadLocal class to store
 object A. The ThreadLocal class acts like a Map but the values are
 specific to each thread and other threads don't see each other's
 values. So, at the beginning of the request you can store object A
 into the ThreadLocal object and then objects B, C, D, etc. can access
 that object by key. One caveat is that these values would be available
 to the next request that is handled by that thread so you'd need to
 make sure you clear these values at either the ending or beginning of
 each request.

 Stephen

 On Jul 29, 5:40 am, Jeff Schwartz jefftschwa...@gmail.com wrote:
  Hi Tim.
 
  Help me out here 'cause I don't understand what problem you see with
 storing
  a value in a static field?
 
  As far as I know (and I am limiting my discussion here to Java and
 servlets)
  objects are not persisted across http requests unless they are
 serializable
  and stored in session or in memcache and that takes programming effort
  meaning you have to deliberately program the behavior.
 
  Yes there are statefull web frameworks such as Wicket and JSF for
 instance
  that will persist objects accross requests without programming effort but
  even these are limited to model and view class instances for the most
 part.
 
  As for classes (not instances) persisting across requests (and
 eliminating
  those classes that 

[google-appengine] Re: Is it really bad to define global variables?

2010-07-29 Thread Stephen Johnson
Yes Jeff, you are correct, constant values are safe to use.

On Jul 29, 7:23 pm, Jeff Schwartz jefftschwa...@gmail.com wrote:
 Stephen

 With all due respect, you are stating the obvious and the use case you
 present is like a text book example of last in first out/race ahead
 condition. Perhaps if the coder had declared the static variable final and
 initialized it in a static constructor it would have prevented multiple
 assignments - assuming a single class loader of course and a single class
 cache.

 Not that your point isn't valid. One does have to take care when using any
 language feature, Java or any language for that matter. That is obvious I
 hope.

 In any case I wouldn't advise anyone from avoiding using static class fields
 if it fits their use case. With care they can and are used without any
 problems.

 Jeff

 On Thu, Jul 29, 2010 at 9:02 PM, Stephen Johnson 
 onepagewo...@gmail.comwrote:





  Hi Jeff (and possible Bill if you're using Java and not Python (not
  sure from the question since I don't know Python))
  (Assuming Java) Using static variables could cause all kinds of
  trouble if proper care is not taken to limit their accessibility since
  they are shared and all requests that are being handled by that
  particular JVM instance be accessing the same data. That data would be
  accessible for simultaneous requests and would also survive after the
  requests have finished processing and would be available to the next
  request(s). This data would exist until GAE shutdown that particular
  app instance on that JVM (or restarted due to a deployment, etc.)
  Other JVM instances of the app would have different values.

  So, for example, if we have:

  public class Beta {
    public int x;
  }

  public class Alpha {
   public static Beta beta;
  }

  So if Servlet #1 receives a request and does:

   Beta b = new Beta();
   b.x = 5;
   Alpha.beta.x = b;

  And then Servlet #2 receives a request and does:
   Beta b = new Beta();
   b.x = 17;
   Alpha.beta.x = b;

  And then Servlet #1 continues processing:
    b.x = b.x + 5;
    ***  Oops! b.x is now 17, not 5 ***

  Also, this Beta object will exist even after the requests have all
  finished since the static instance will stick around. Note, that this
  occurs even though these objects are not Serializable.

  So, Jeff in response to:
   If storing values in class static fields were problematic I'd guess that
   this would break quite a number of web apps. What do you think?
  Well, static variables are by their very nature are supposed to be
  shared and are not a problem if used correctly and for that purpose,
  but in Bill's case he would be attempting to use a shared variable as
  if it were a private variable accessible only to a particular request
  and so would be used incorrectly and could cause problems for his web
  app.

  Okay, so static variables may not be ok. What about storing the data
  in an instance variable of the Servlet?? Well, that wouldn't work
  either since the servlet container only creates one instance of each
  servlet class, thus the instance variables of the servlet classes act
  almost like static variables, that is, they are shared amongst all
  requests to that servlet and would survive even after the requests
  have finished processing since the servlet container will keep the
  servlet instances alive until the servlet container shuts down.

  So, if Bill is using Java, then what should he do. Well,
  1.) I'm not sure why you have to re-sync the object A that is passed
  in the constructors of the other objects with the handler's object A.
  In Java, these would be the same object unless you are making some
  sort of clone (or copy). So, I think your approach works. At least for
  Java. Unless you've left some detail out.
  2.) So what you can do is you can use the ThreadLocal class to store
  object A. The ThreadLocal class acts like a Map but the values are
  specific to each thread and other threads don't see each other's
  values. So, at the beginning of the request you can store object A
  into the ThreadLocal object and then objects B, C, D, etc. can access
  that object by key. One caveat is that these values would be available
  to the next request that is handled by that thread so you'd need to
  make sure you clear these values at either the ending or beginning of
  each request.

  Stephen

  On Jul 29, 5:40 am, Jeff Schwartz jefftschwa...@gmail.com wrote:
   Hi Tim.

   Help me out here 'cause I don't understand what problem you see with
  storing
   a value in a static field?

   As far as I know (and I am limiting my discussion here to Java and
  servlets)
   objects are not persisted across http requests unless they are
  serializable
   and stored in session or in memcache and that takes programming effort
   meaning you have to deliberately program the behavior.

   Yes there are statefull web frameworks such as Wicket and JSF for
  instance
   that will persist objects accross