I'm wondering how you can satisfy both "Soup to nuts" and "Less is more" with one solution ... or are these multiple visions for multiple solutions?
For the record, I am not in favour of turning Struts into a "stack" solution. In my opinion, one of the strengths of Struts 1 was that we provided only the core web framework, and didn't make decisions for web developers as to which solution they should choose for persistence, etc. We were always very consious that if we were to choose one, it would be seen to be favoured above others, when that was not our intent. That being the case, it was clear that our users could select whatever best matched their application. And that last part - selecting the best match - brings me to the other reason that I don't want to see us going down the "stack" path. The problem is that we cannot possibly know what's best for our users' applications. Just as an example, in all the years that I've been developing Java web apps, not once have I been in a position to pick up an ORM package and use it for my app. Instead, the apps are all built upon custom APIs or services frameworks. With a "stack" solution, the first thing I would have to do it figure out (a) if and (b) how I can remove the pieces of the stack I don't want or need, and what the implications are for doing so. I know the response to this is going to be "but we want to provide the greatest leg up for our users", but the question is, what proportion of the framework's potential user base will really be able to use the entire stack that we might provide? And for those who can't, how will we convince them that they can unplug / replace the bits they don't want or need without having to know the internals of the framework? For that matter, how will we convince ourselves? -- Martin Cooper On 9/6/06, Ted Husted <[EMAIL PROTECTED]> wrote:
For Struts Next, here are my personal goals. * xStruts. I would like Struts to become a framework so elegant that developers working in other environments will want to implement it too. IOW, the xUnit of web development frameworks. Overarching vision: "Share the wealth." * Struts DAO. Today, the framework seamlessly integrates XWork, OGNL, and Spring, and FreeMarker with JSP or Velocity. Through Results, we integrate with JasperReports, PDF, JFreeCharts, and so forth. Next, we should look toward providing the same type of seamless integration with Cayene, iBATIS, JDO, or as a third-party option, Hibernate. Overarching vision: "Play well with others." * Struts Stack. Bundle a proven set of extensions with Struts Core to create a complete MVC web development development, powerful enough to create "best of breed" applications, like Confluence and Jive, "out of the box". Extension could include packages like Display Tag, Struts Menu, Acergi, Web Flow, and iBATIS or Cayenne (Sadly, Hibernate is still LGPL), along with an example development platform featuring Eclipse, HSQL, Jetty, Subversion, MailMan, and Trac. The Stack would be "proven" with a range of practical example applications, backed by realistic requirements and use cases. Overarching vision: "Soup to nuts." * Struts Plugins. Right now, Struts 2 is a "pluggable" framework. We start with a set of interfaces, and plugin a proven, general-purpose implementation. As it stands, we implement plugins using two approaches, "bootstrap" and "config-behind-code". In both cases, the "plugins" are just XML documents. Some bootstrap documents are bundled in the JAR, others are provided by the application. At startup, the framework is hardwired to look for the "bootstrap" configuration documents, like struts-default.xml (packages), default.xml (validators), struts.xml (custom packages), which can in turn bootstrap other configuration documents. At runtime, the framework looks for "config-behind-code" plugins, like "Classname-validation.xml", "Classname-conversion.properties", and "Classname.properties" (localization). I'd suggest that we try to adopt a consistent approach to plugins so that everything is configured the same way. Ideally, we should not be tempted to include "optional" members that only work when we provide a third-party JAR with our application. We should be able to drop in a plugin configuration as easily as we drop in a JAR. By utilizing a clear plugin strategy, we can avoid distribution bloat while making it easier for both novice *and* expert developers to create the optimum environment for any given application. Overarching vision: "Less is more" -Ted. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]