I have a couple of questions/thoughts/observations that have arisen:
- the chain configuration appears to apply across the application as a whole rather than per module. This differs from the 1.2 request processor which can be varied/subclassed on a per module basis. (Of course, you can still subclass RequestProcessor on a per-module basis, but the whole point of the chain is that you should not need to do that)

well, I think we have found that very few active Struts developers use modules, so some module-centric things get overlooked, unfortunately.

That said, the per-application config is the loading of the catalog factory. It *is* possible to change which command is looked up in the catalogs and executed to process the request as part of the controller-config on per-module basis.

- the chain seems to be quite good at allowing you to vary the request processing flow. It is more difficult to apply configuration or make services accessible to groups of commands in the chain. One way I can see to do this is by subclassing ComposableRequestProcessor (not that old chestnut again), overriding init(ActionServlet,ModuleConfig), then adding the relevant services to the chain context, using getApplicationScope().put(...). Another way, apparently, would be to load the configuration in the constructor or synchronized block of one of the chain commands, then use getApplicationScope().put(). It would be nice if you could configure chain commands using some form of dependency injection, a la Spring, and allow these services to be added via the chain config file. (I suppose I should be addressing this to the chain developers mailing list, although I suspect that most of the chain developers are on this list as well).

(yes, I think this is effectively the chain developers list :) )

Don't forget that you can configure basic properties on any command simply by setting xml attributes and letting digester and beanutils handle the population. This is limited to values, not references, and is limited by all the limitations for type conversion that BeanUtils has, but it can still get you pretty far.

It's not so elegant, but for anything beyond that, I'd probably just have command properties whose values were spring bean names, and then have the command retrieve the Spring ApplicationContext from the ServletContext, and look up a bean from there.

Of course, it's possible to create commands and chains in a spring beans XML file too; it's a bit awkward in terms of syntax, but it can be done. Technically, you could create an entire alternative CatalogFactory in Spring (or as many as you like) -- there's just no good way to inject a CatalogFactory instance into a ComposableRequestProcessor instance, because of the way that Struts initialization happens. You could have a SpringAwareComposableRequestProcessor which found the Spring ApplicationContext during the init(...) method and looked up its CatalogFactory there.

I think that in general, the Struts 1.x initialization process is awfully constraining, but I haven't had any substantially better ideas about how to do it.

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