Don Brown wrote:
I've gone back and forth how and to what level of detail Struts Ti can/should support Struts Action 1.x applications. When I say Struts Ti, at this point, I'm referring to WebWork 2.2 since we haven't imported the code yet. Below is my thoughts that I invite comments on.

Basically, I see three ways to approach Struts Action 1.x (hereby referred to simply as 1.x) support in Struts Ti: graph 1.x into Struts Ti, develop tools/libraries to help the two frameworks co-exist, and simply include the latest release of 1.x with Struts Ti as is.

1. Graph 1.x into Struts Ti - This approach tries to take 1.x code and restructure it as Ti objects. For example, we'd - Create a subclass of Configuration to which would expose 1.x configuration files - Recode the 1.x chain commands as interceptors or at least an interceptor that calls a chain
 - Develop a custom interceptor to plug in commons validator
 - Write a custom ActionInterceptor and ActionProxy to call Struts Actions
 - Add a custom ObjectFactory to create 1.x Actions correctly
 - Rewrite the taglibs to pull data Ti-style

Advantages: From a users perspective, you'd be (hopefully) run your 1.x application as is, yet gradually take advantage of Ti features on a per Action basis.

Disadvantage: A ton of work, and more than likely, there would be gaps in 1.x features or at a minimum, certain things wouldn't work quite right, especially for more advanced 1.x applications.

2. Develop tools/libraries to help both frameworks to co-exist better - First, we'd include the latest release of 1.x with Struts Ti. Then, we'd create optional extensions to both frameworks that allows them to share information. For example, we'd write: - A Ti interceptor that would make available the Struts message resource bundles to Ti Actions and pages - A Commons Validator interceptor to allow Ti Actions to re-use validation configuration files - An Ant task that converts a Struts configuration file into a Ti configuration file, logging where certain features don't quite match up
 - A way to use Dynabeans with Ti ModelDriven Actions
 - A tiles Result type to allow Ti apps to use Tiles

Advantages: We don't pretend to run 1.x apps directly on Ti, yet by providing 1.x jars, we can provide 100% backwards compatibility with 1.x. Legacy 1.x apps can start to use Ti gradually, yet not be required to duplicate information. Should take much less time the option #1.

Disadvantages: The collection of tools would require additional configuration to use.

3. Only include the latest release of 1.x - In this case, Ti doesn't do anything to help migration outside of documentation. We could still run 1.x apps, but assume apps using Ti will be rewritten anyways

Advantages: Can run 1.x apps. Easy. 1.x apps might not even be planning to migrate in pieces anyways.

Disadvantages: No support for gradual 1.x migration.

---

Of the three, I'm in favor of the middle one. I've tried different methods of graphing the code together, but while it would be possible to run simple 1.x apps, any more complicated ones, the very ones that need migration assistance, would find all sorts of hidden problems. Furthermore, it still require devs to change their app to at least use the new Servlet.

I think including 1.x with Ti is important because it shows we are committed to 1.x support and Struts is still a one-stop-shop. This also allows us to change things like customize the chain to aid the co-existence support unseen to the user. 1.x is getting quite flexible with commons chain so we could take advantage of that here.

Finally, I do think migration tools are important. The primary migration use case I imagine is a user with a 1.x application that might need a new module or section. Instead of writing it with 1.x, they might want to try Ti, so they'd add the Ti filter and code up the section as a Ti package with its own namespace. This user wouldn't want to duplicate all their message bundles or perhaps even their validation configuration.

One of the strongest features Ti has going for it is the possibility for a smooth migration for 1.x applications. How can we best provide this for the 1.x user?

Don

I have to ask if the goal behind 1 through 3 is the right goal... In other words, should the goal be

 1 - allow a Struts 1.x app to run unchanged on Ti
 2 - allow a Struts 1.x app to run unchanged on Ti, w/ some caveats
 3 - allow a Struts 1.x app to run on Ti, with only minor changes
 4 - allow a Struts 1.x app to run on Ti, with a well defined set of
     migration changes, possibly supported by automated tools

I thought there was a general leaning towards something more like 4, with a corresponding minimization of code in Ti solely for the sake of 1.x compatibility. IMHO the right balance would be somewhere between 3 and 4; 1 and 2 impose a higher burden on Ti than should be expected or required of a 'Struts 2.0'.

I know, that totally subverts the discussion, but I think deciding this issue informs that discussion. Unless I missed something that answers this issue already :-)

L.


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

Reply via email to