Chris,

That is exactly what I see.

Does anyone have a problem with changing the declaration of the
Dispatcher instance, and providing some visibility of the Dispatcher
instance (such as shoving it into the ApplicationContext)?

-Wes

On Tue, Feb 15, 2011 at 8:48 AM, musomesa <musom...@aol.com> wrote:
> Hi Wes,
>      Here is what I see:
>
> StrutsPrepareFilter init method:
>    creates InitOperations init
>        calls init.initDispatcher
>            initDispatcher calls createDispatcher
>                which returns a new Dispatcher
> The new Dispatcher is given to PrepareOperations's constructor which store
> is in its Dispatcher field
> =====
>
> StrutsPrepareFilter doFilter method:
>    calls  prepare.assignDispatcherToThread()
>    which calls Dispatcher.setInstance(dispatcher)
>        here dispatcher is the field created as StrutsPrepareFilter's init
> method ran
>    It (the dispatcher) is stored in the ThreadLocal field of Dispatcher
>
> =====
>
> In the private Dispatcher field of PrepareOperations is the same as the
> ThreadLocal<Dispatcher>
> in the Dispatcher. I think the intent was visibility so the that the client
> thread can access it
> but then there can't be any thread safety issues as it is already shared so
> it could as well
> be static (?)
>
> Cheers
> Chris
>
> On 2/14/2011 4:34 PM, Wes Wannemacher wrote:
>>
>> Sorry to keep coming back to this guys, but I'm still mulling over this...
>>
>> If any of you get the chance, can you look over StrutsPrepareFilter,
>> InitOperations, PrepareOperations and StrutsExecuteFilter and tell me
>> that a single Dispatcher instance isn't simply shared across all of a
>> web-app's lifecycle? If I'm right, and the ThreadLocal<Dispatcher>
>> declaration is pointless, then that will make it pretty easy for me to
>> subclass one of the filters to make the Dispatcher visible.
>>
>> Thanks!
>>
>> -Wes
>>
>> On Fri, Feb 11, 2011 at 5:30 PM, Wes Wannemacher<w...@wantii.com>  wrote:
>>>
>>> Rene,
>>>
>>> Thanks for the pointer...
>>>
>>> I guess i still have a few concerns about some of this. I am starting
>>> to feel like the king of having things that I want to do to struts,
>>> but never finding the time to do them. If only I could make some money
>>> w/o being expected to fulfill customer demands ;-)
>>>
>>> I know Don set out a while ago to refactor the Dispatcher and the
>>> FilterDispatcher and we have Prepare/Execute filters and
>>> Prepare/Execute operations. Which I think is pretty cool, but one
>>> thing I still can't seem to find is what the scope of the Dispatcher
>>> and of some of the objects that the Dispatcher uses. So, it is pretty
>>> clear that the Dispatcher instance is a Threadlocal, but it looks like
>>> the Dispatcher is instantiated in the InitOperations. What is unclear
>>> to me is that it looks like this happens in (looking at the filters,
>>> not the listener or servlet) in the public void init(FilterConfig) of
>>> StrutsPrepareFilter, which is run once (right?). So, is a Dispatcher
>>> singleton simply passed around?
>>>
>>> Looking at InitOperations, it would seem like if this were run for
>>> each request (which I am pretty sure it is not), then it would
>>> reinitialize the framework with each request.
>>>
>>> So, my questions are as follows -
>>>
>>> 1. Is this optimal? I could be wrong, but I thought a Dispatcher
>>> instance was created per-thread... I think I thought so because
>>> Dispatcher.instance is a threadlocal. None of the other properties in
>>> the dispatcher are declared static (they are all instance properties).
>>> I've never really read up much on threadlocals, so if my understanding
>>> is completely flawed (and showing right now) then I apologize.
>>>
>>> 2. Should we consider refactoring some of this again? I like the
>>> design, but I feel like we broke out the stuff that should happen
>>> before execution, then execution itself, but it doesn't feel very
>>> IoC-ish. *Operations could maybe be servicified so that we could maybe
>>> make some of this stuff happen as a matter of wiring/configuration
>>> rather than simply just being broken up.
>>>
>>> 3. If I am right that Dispatcher is a singleton, then my original
>>> problem is really just a matter of visibility. Am I the only one that
>>> has ever wanted a reference to the container outside of the framework?
>>> If the Dispatcher is a singleton, would anyone object to having it in
>>> the ServletContext as an attribute? I suppose I could create an
>>> alternate Prepare or Execute filter that inherits from one of the
>>> originals and make the stuff I want visible.
>>>
>>> I don't know if any of this needs any action right now, but one thing
>>> that kind of bugs me about struts right now is that in Don's absence,
>>> I'd like to feel like we, as a team, have a good understanding of how
>>> the Dispatcher does its magic... I don't want to speak for everyone,
>>> but right now i feel like I do *not* have a good understanding.
>>>
>>> Thoughts?
>>>
>>> -Wes
>>>
>>> On Fri, Feb 11, 2011 at 5:21 AM, Rene Gielen<gie...@it-neering.net>
>>>  wrote:
>>>>
>>>> You need to get hands on the Dispatcher, it hold the correct (even after
>>>> reloading ...) reference to the Container.
>>>> While StrutsPrepareFilter initializes the Dispatcher, it does not expose
>>>> it
>>>> the the ServletContext. Actually, if you look into
>>>> StrutsListener.contextInitialized(), you find what you are looking for.
>>>> Nevertheless, from a short glance it does not look like they play nice
>>>> together. AFAICS StrutsPrepareFilter should be modified the following
>>>> way:
>>>> in the init method, look if ServletContext contains a Dispatcher for
>>>> attribute key StrutsStatics.SERVLET_DISPATCHER (if the Listener was
>>>> configured). If found - use it. If not, create it and expose it under
>>>> the
>>>> said attribute key
>>>>
>>>> We should review if configuring Listener and Filter together do make
>>>> sense,
>>>> and if yes, if they need better interaction - especially for
>>>> prepareOperations.
>>>>
>>>> - René
>>>>
>>>
>>>
>>> --
>>> Wes Wannemacher
>>>
>>> Head Engineer, WanTii, Inc.
>>> Need Training? Struts, Spring, Maven, Tomcat...
>>> Ask me for a quote!
>>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
> For additional commands, e-mail: dev-h...@struts.apache.org
>
>



-- 
Wes Wannemacher

Head Engineer, WanTii, Inc.
Need Training? Struts, Spring, Maven, Tomcat...
Ask me for a quote!

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@struts.apache.org
For additional commands, e-mail: dev-h...@struts.apache.org

Reply via email to