Imagine you are within a component. You need to get the global object. Then you need to get the specific HashMap. Then you need to get the object from inside the HashMap. Then you need to call the method on the object to get the property you want to know.
These are too many steps, especially when you need it several times within a page as several components need to know this information several times. The components themselves are stupid and dont have a glue about other components within the same page. And tapestry also ignores the fact the components from the same page share the same page data if you read from the global object. So I thought I could save lots of performance to store it within the page so I dont have to iterate through the objects and hashmaps all the time..... > --- Urspr�ngliche Nachricht --- > Von: Andreas Andreou <[EMAIL PROTECTED]> > An: Tapestry users <[email protected]> > Betreff: Re: ThreadLocal example pleeeeease! > Datum: Thu, 02 Jun 2005 15:07:56 +0300 > > Why can't you use a custom Global object and > initialize the map in its constructor (will only get invoked once) > ??? > > > [EMAIL PROTECTED] wrote: > > >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] > > > > > > > > > > > --------------------------------------------------------------------- > 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]
