Thanks. Ok, I try again. The following assumptions are made:
1. The number of groups can change on the database without having to change the java code. (It is not a problem to restart the web application if that happens.) 2. All the data is loaded on start-up, independent on how many members are logged in. Right now I do it on setupForRequest(RequestContext context) and store it in a HashMap The problem only is I need to parse the HashMap every time and hundreds of times for every page. Imagine the following situation: www.domain.com is the English version es.domain.com is the Spanish version (I know you can override the locale, but this is also a good example of "group specific data" without using the visit object The domain name would be the key of the HashMap. If you have lots of components on a page that need to know the language to use for the graphics or text and you dont think about it at all, you end up gettings hundreds of database queries for every page. If you use the HashMap approach you need to go through the HashMap hundreds of times....I am looking for an easy way to "remember" the language and for instance domain/group specific data.... > --- Urspr�ngliche Nachricht --- > Von: "Patrick Casey" <[EMAIL PROTECTED]> > An: "'Tapestry users'" <[email protected]> > Betreff: RE: ThreadLocal example pleeeeease! > Datum: Wed, 1 Jun 2005 11:15:13 -0700 > > > Public static final fAList = new HashMap(10000); > Public static final fBList = new HashMap(10000); > Public static final fCList = new HashMap(10000); > > Public Object getMember(String key) { > If (isGroupA) > Return fAList.get(key); > Else if (isGroupB) > Return fBList.get(key); > Else if (isGroupC) > Return fCList.get(key); > } > > > -----Original Message----- > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] > > work.org] > > Sent: Wednesday, June 01, 2005 11:03 AM > > To: Pablo Ruggia > > Cc: [email protected] > > Subject: Re: ThreadLocal example pleeeeease! > > > > Thank you! The problem however is the following. > > > > Assuming I have 30,000 members online at the same time, > > 10,000 belong to group A, > > 10,000 belong to group B, > > and > > 10,000 belong to group C. > > > > I would then keep in memory 10,000 instances of > > configuration data for group A people, > > 10,000 for group B people data and 10,000 for group C people > > related data. > > > > I only want to have 1 instance of the data of group A in memory, > > 1 for B and 1 for c. > > > > > > Assuming it is 1kbyte of data per configuration group data it would be > the > > difference between 3 kbytes in memory altogether as every group > > would share the data and 90 Mbytes where every single member of the > 10,000 > > people keeps copy of its group data. > > > > Do you know what I mean ? > > > > Sarah > > > --- Urspr�ngliche Nachricht --- > > > Von: Pablo Ruggia <[EMAIL PROTECTED]> > > > An: Tapestry users <[email protected]> > > > Betreff: Re: ThreadLocal example pleeeeease! > > > Datum: Tue, 31 May 2005 21:50:34 -0300 > > > > > > Yes, it's possible. > > > Personally, I put this logic in setupForRequest method of my engine. > > > I created a class, UserContext, like this: > > > > > > public class UserContext { > > > > > > static ThreadLocal _visitLocal = new ThreadLocal(); > > > > > > public static Object getVisit() { > > > return (Visit) _visitLocal.get(); > > > } > > > > > > public static void setVisit(Object visit) { > > > _visitLocal.set(visit); > > > } > > > } > > > > > > > > > And then, in setupForRequest: > > > > > > protected void setupForRequest(RequestContext context) { > > > if(getVisit() !=null) > > > UserContext.setVisit(getVisit()); > > > } > > > > > > NOTE: getVisit() in baseEngine, do not create the visit object, like > > > the Page does. > > > > > > > > > So, anywhere you can put: > > > > > > UserContext.getVisit(). > > > > > > The same you can do with Global object. > > > > > > Let me know if that helped you. > > > > > > > > > > > > > > > On 5/31/05, Hensley, Richard <[EMAIL PROTECTED]> wrote: > > > > Sarah, > > > > > > > > Do you have a Visit? > > > > > > > > This sounds like session specific information that is normally > stored > > in > > > the > > > > Visit. I would consider constructing a method in my Visit that knows > > how > > > to > > > > navigate the global object correctly. > > > > > > > > -----Original Message----- > > > > From: [EMAIL PROTECTED] > > > [mailto:[EMAIL PROTECTED] > > > > > > > > Sent: Tuesday, May 31, 2005 9:49 AM > > > > To: [email protected] > > > > Subject: ThreadLocal example pleeeeease! > > > > > > > > Could anyone of you post a quick example how to correctly > > > > use ThreadLocal within a Tapestry page and a Tapestry component? > > > > > > > > My global object currently is a map of group data and the key is the > > > group > > > > key. Different page getter methods need parameters that is derived > > from > > > the > > > > group data ..... > > > > > > > > E.g. administrator is on: > > > > > > > > admin.domain.com > > > > > > > > moderators on moderators.domain.com > > > > > > > > users on www.domain.com > > > > > > > > guests on guests.domain.com > > > > > > > > a method that is called getMenuOptions should retrieve the menu > > options. > > > > > > > > The menu can contain 4 different kinds of data. So it is all in a > > global > > > map > > > > and the database is only queried once. > > > > > > > > But this leads to having to parse the map all the time > > > > the method getMenuOptions or any other method that will indirectly > > call > > > it, > > > > is called. > > > > > > > > and I want to sort of shift it into some sort of local variables to > be > > > able > > > > to directly access it. > > > > > > > > Is that possible using ThreadLocal ? If so, how ? > > > > > > > > Thank you! > > > > > > > > > --------------------------------------------------------------------- > > > > 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] > > > > > > > --------------------------------------------------------------------- > > 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]
