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]