The problem is that one developer's litter is another developer's treasure :)

Right now, a lot of components are already pointing to the components we've 
scattered about the contexts. If we just move them into our own context, then 
those references would break.

To create a migration path, we'd first have to provide an ViewContext to 
replace direct access to the components, deprecate direct acess, and then, in a 
future release, move the components our own state mechanism.

-Ted.

On Thu, 02 Dec 2004 09:35:47 -0800, Don Brown wrote:
> I agree with everything you wrote, however, what I was specifically
> talking about was some sort of storage bean that all the global
> Struts components could be stored in, so we don't have all these
> Struts objects littering the servlet context.  Yes, for each
> request, a ViewContext instance would be created, initialized with
> this storage bean.
>
> Don
>
> Ted Husted wrote:
>
>> The public API bean (where the "rubber meets the road") could *
>> not* be stored in application scope, since some of the Struts
>> resources are request and session based.
>>
>> The original idea was the ViewContext (fka ConfigHelper) would be
>> created on a per-request basis (like a Velocity tool). The
>> ViewContext might hold references to members in request, session,
>> or application scope, but the ViewContext client doesn't need to
>> know that. All of the tags and tools can then refer to the
>> ViewContext, rather than having to know where all the "bodies are
>> buried". The ViewContext interface could be based on the Velocity
>> tools APIs (http://jakarta.apache.org/velocity/tools/struts/). I
>> worked with these guys initially, and they are very tough about
>> defining what you need, but no more.
>>
>> Internally, we might want to define an ActionContext that
>> provides the same utility as the Action class and would also
>> include the properties from the ActionForm. The idea being you
>> could recode an Action class to use an ActionContext just by
>> changing the references.
>>
>> Aside from the Action, we might also define a ResourceContext
>> subset that could be shared with the business layer. The
>> ResourceContext would include the messaging methods, so that the
>> business layer could create Commons Resources messages (as part
>> of a Command) and return them to Struts. This is an interface
>> that we might define as part of the Commons Resources project, so
>> that it is not tainted as a Struts import. Of course, the
>> ActionContext would implement ResourceContext, so that we can
>> exchange the same object with the business layer.
>>
>> All of these interfaces would implement Commons Chain Context
>> (hence the suffix).
>>
>> The ActionContext could be called from an ActionCommand
>> interface, a Chain Command-like interface with one method:
>>
>> void Execute(ActionContext context)
>>
>> Support for conventional Actions would stay in place, but as an
>> alternative, a class could implement ActionCommand and unbind
>> itself from the HTTP API.
>>
>> I would suggest we implement these interfaces as "experimental"
>> in 1.3.x, so that we can work with them ourselves for a while. In
>> 1.4.x, we could do things like refactor for Spring, and then
>> finalize the new interfaces in 1.5.x.
>>
>> I know I should reduce this to code, but I'm away this week, and
>> trying to keep a few balls in the air until I get back.
>>
>> Eventually, we may to put a collection of Controller beans in
>> application scope, open per module. This might be a place where a
>> BeanFactory might be useful, but I think there are some other
>> issues we need to iron out first. (Else start the revolution!)
>>
>> -Ted.
>>
>> On Tue, 30 Nov 2004 16:00:49 -0800, Don Brown wrote:
>>
>>
>>> On the topic of a Struts API bean, I completely agree.  We
>>> should have one bean, probably actually stored in the servlet
>>> context, which contains references to all the Struts-specific
>>> components like configuration elements and message resources.
>>> Now this, and the Spring topic, do overlap since this API bean
>>> could actually be a Spring BeanFactory which might be a more
>>> flexible approach actually.
>>>
>>> This would be separate from the ActionContext idea which would
>>> hold references to objects necessary for the execution of
>>> actions (chain context, http request/response, all current
>>> Action helper methods, etc).
>>>
>>> Ted, in fact, suggested an API bean previously as well, and I
>>> believe has even started sketching out what one might look like.
>>>
>>> Don
>>>
>>> Joe Germuska wrote:
>>>
>>>
>>>> While I'm one who has had good experiences with Spring's
>>>> BeanFactory for managing my business objects, maybe we should
>>>> focus first on defining what Struts is and what needs to be
>>>> configured.  This would allow us to move more flexibly to
>>>> various configuration approaches, or conceivably support more
>>>> than one.
>>>>
>>>> I've been thinking for a while that we should stop storing so
>>>> many things directly in the ServletContext and instead,
>>>> define a "Struts" object which would hold these things.  I've
>>>> mentioned this obliquely a few times and not gotten much
>>>> response, so maybe no one else likes the idea.  Or maybe it's
>>>> been too oblique. Benefits of something like this would be
>>>> reducing dependencies on the Servlet API and providing a
>>>> better environment for testing.
>>>>
>>>> Is there any interest in this, or is it cracked?  If it's not
>>>> cracked, we might also take a longer-term look at abstracting
>>>> the session, which seems tedious, but has some of the same
>>>> issues. We may never need to truly abstract away the
>>>> HttpServletRequest, since the Chain context will have the
>>>> same lifecycle and serve about the same purpose.
>>>>
>>>> Now, then:  This whole thread started as a different question
>>>> and was motivated by an earlier question.  Assuming that we
>>>> continue to use Digester to instantiate and populate
>>>> ActionConfig objects, I would like to add a "generic" mapped
>>>> property to ActionConfig so that rather than writing trivial
>>>> and boring subclasses of ActionConfig, one can simply set
>>>> properties on it.  I'd make it a Properties because I'd
>>>> expect it to have strings, but I would accept arguments to
>>>> make it a map instead with the idea that later other Objects
>>>> might get in there.  (Ugh, but all that casting!)  Assuming
>>>> no one objects in the next day or two, I'll assume it's ok,
>>>> and I'll call it "props", just because I would rather not
>>>> screw around waiting for another name.
>>>>
>>>> The motivation for this was a perceived flaw in the
>>>> ChainAction and chain DispatchAction classes which won't know
>>>> in which catalog to look for the command either one is
>>>> supposed to execute.  A generic property map would allow the
>>>> ChainAction to define the name of the properties it wants for
>>>> its configuration, rather than requiring that its
>>>> ActionConfig implement some specific interface just to get
>>>> one more property in.
>>>>
>>>> Joe
>>>>
>>>>
>>> ----------------------------------------------------------------
>>> ---- - To unsubscribe, e-mail: dev-
>>>[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]

Reply via email to