At 5:34 PM -0700 6/28/06, Paul Benedict wrote:
I have two concerns on the 1.3.x line. What do you think?

1) Spring 2.0 has fabulous support for dependency injection for Struts. In particular, the great Autowiring(Tiles)RequestProcessor will automatically inject dependencies into the actions as they are created. This supports the "legacy" RequestProcessor and I have no personal plans to depart from its use. So my question today is: does the RP in 1.3 function just as it did in 1.2? If not, I may not want to upgrade to 1.3.x until it does.

You can use an AutowiringRequestProcessor in Struts 1.3, but you will not gain any behavior which has only been implemented in commands since Struts 1.2. Specifically, any action mapping or forward mapping can specify a chain command which should be executed as part of processing.

As far as I can remember (but don't bet money), none of the other major functional changes in 1.3 are in the chain commands only. You could probably go for a while using some other subclass of RequestProcessor instead of ComposableRequestProcessor, but I think everyone is on board in general with deprecating the original request processing functionality, so over time, this statement is likely to become less true.

Also, as Frank noted, it is pretty easy to write custom commands that get actions in a different way, and in fact, in general, the whole point of this is that it is much easier now to make changes to the request processing cycle without having to have an infinite combination of request processor classes which all have different lineages depending on whether you want or don't want Tiles processing, want or don't want X, want or don't want Y, etc.

Admittedly, if lots of people embrace casually changing the RP chain, we will have some work to do in making that a little more straightforward, but it's far from a huge burden now.

2) I learned the tough way that it is [a] impossible to write a stateless application in Struts and [b] use Struts' locality features at the same time. This is because Struts only stores the locale in the session, and there is no way (currently) to move that into a cookie, or into request scope. I found scattered code among RequestProcessor, RequestUtils and TaglibUtils which look only into the session for the current locale.

I propose (and I will write this) that we allow pluggable implementations into how to store the locale. It will be defaulted into the session, with other pluggable implementations provided. However (sorry fans of CoR) this implementation must be wrapped into a bean so that other libraries, like Tiles and Taglibs, can retrieve the locale and set it without knowing the pluggable strategy. So the solution itself cannot be limited to the RP chain, even though that is where it is initiated.

I don't see any problem with that. Being a fan of the composable request processor isn't the same as being a zealot who wants the CRP to do everything!

I think this just raises one of the fundamental weaknesses of Struts 1.x - the lack of a dependency injection management system leaves the process of setting up services for use by multiple components in a fragile and awkward state. I have really soured on the idea that everything should just be thrown into the ServletContext to be found by whomever needs it.

That said, I don't think you should not do the work you describe, just because you may have to leave the Localizer (or whatever you call it) in the ServletContext under a well known key. It's just that it feels so outdated!

Joe

--
Joe Germuska
[EMAIL PROTECTED] * http://blog.germuska.com
"You really can't burn anything out by trying something new, and
even if you can burn it out, it can be fixed.  Try something new."
        -- Robert Moog

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to