I think we could have both - a stack and focused library solution. The core artifact should be kept as clean as possible, however, I like the idea of an "Able" artifact/subproject that delivers the full stack for greenfield apps or new users. You could argue that the "Able" stack project could go somewhere like OpenSymphony, but that would result in much less exposure, and I think having a full stack in the Struts project would help to sharpen the core library.

Don

Martin Cooper wrote:
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]





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

Reply via email to