Thank you Christopher, but Peter made the same (ThreadLocal) proporsal
a bit earlier in the thread.
However, as for the other point concerning interface change, I'm not
looking for a quick solution but rather redesign our current
architecture. The 'hidden' parameter transfer may be not a best
practice, but it has some great advantages. For example, if I need the
current user's country somewhere deep in the BL I could change all
interfaces inbetween and add the country (or locale) parameter, but
than I have one of nine methods having this parameter. If I am
consequent, I'd have to add standard parameters like current userId,
locale, etc to each method in each interface which wouldn't make
method signatures better readable. Consider:
public void sendMessage(Message message) against
public void sendMessage(Message message, UserId currentUserId,
SessionId currentSessionId, Locale currentLocale.....)
which one is better to understand?

Using a hidden CallContext is like using the request/session in the
webapp or using interceptors/piggybaging in middleware. Since we are
talking about must-have (but not must use) parameters in each call, I
think the advantages are greater than the drawbacks.

regards
Leon




On 7/21/06, Christopher Schultz <[EMAIL PROTECTED]> wrote:
Leon,

> As far as I see I have two opportunuties:
> 1. To alter all interfaces in all layers and add a CallContext
> parameter which would contain additional information gathered in the
> top level and evaluated on demand
> or 2. Have this CallContext object in somewhere in the VM, where I can
> access it from everywhere in the application without to actually
> change interfaces. The only location for the second case is imho the
> current Thread.

As much as I cringe bringing this up, there is another possibility: use
a ThreadLocal.

You can basically use the Thread as a storage device, which sort of fits
into your solution #2. The advantage is that you do not have to subvert
the existing thread management strategy in Tomcat.

> Now I have the unpleasant
> situation that i need some information pretty deep in some use cases
> of the application (like current locale) which I only have at the top
> (servlet) level.

I think that if you really need this information deep in your code, then
you simply should modify your interfaces, etc. I realize that you
probably want to get this solved as quickly as possible, but if you
start coming up with unusual ways of getting data from one part of the
call chain to another, then people who have to work on your code are
going to get confused and angry.

If you decide to do something crazy, make sure you document it fully,
including the reasons why you didn't use standard method parameters to
achieve the same end.

-chris






---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to