WebWork/XWork, along with Sitemesh, Quartz, OSCache, and a few other projects, are part of the larger OpenSymphony project/consortium, similar to Apache or Codehaus. All of the projects are available as open source and license under the OpenSymphony License
, which is a modified Apache license. (For clarification, most of the projects will be moving to an Apache License v.2 in the near future).
Inside of OpenSymphony, there is a project called OSCore which includes a number of general utilities. WebWork and XWork both utilize this small library.
With regard to a comparison of WebWork and Tapestry, I will attempt to answer this question as best as possible; however, please realize that I am far from a Tapestry expert. My experience is limited to playing to see some of the slick things it can do. Please feel free to correct any mis-statements I make.
WebWork is designed around the principle of the command pattern. In fact, it is really a wrapper XWork - a generic command-pattern framework. Wait... wait... Wrappers, command pattern, etc. Does one need to know this all in order to write effective WW code? Some may disagree, but I think not. As a WW developer your focus is primarily on the execute() methods of your Actions. This method contains the logic that is responsible for executing your logic and then sending the request to some "view" for output. For example, a basic CRUD Action would look something like this:
Inside of the view code, parameters are being passed in for user.firstName, user.lastName, etc. These are set directly on the User object provided by the getUser() method above.
With WebWork, an underlying goal is get away from the intricacies and problems associated with the HTTP/HTML world as fast as possible. The application logic is separated away from the view technology as much as possible. Most WW developers advocate staying away from the request and response objects as much as humanly possible. For example, one of our internal has a few dozen Actions with only 2 tied to the servlet API. This makes it significantly easier to test and develop with the use of mock objects.
From my brief introduction to Tapestry, it provides a component driven model. With this, you get the framework involved in it - a powerful framework once you overcome the learning curve and the inability to potentially leverage current skill base - JSP, Velocity, Freemarker, etc. Personally, I think tapestry is tied into itself too much and is too heavy.
Personally, I found the WW framework significantly easier to learn and to teach others. I hope that answers the question or starts you on the right path (WW
). Feel free to ping me with any additional questions.