Sorry if this is repost for any of you, I did not get it myself. 

This will be long.

Here are some of my thought concerning building a proper web application (framework).
Please mind that I started from the position of PHP user that barely knew Java
and MVC concept. The second part is the reason why I wrote this post so if you
do not have time just skip the part one

* PART ONE *
* Title: How I became a cocoon user * 
First I started to use cocoon in quite a PHP + templates style. I mean I've
been using pipelining in cocoon just to provide the website with a common
look. I've been handling the forms myself, which means managing the whole
state machine with hidded input fields and so on.

The actions at the time were a bliss. Especially when XSP action was
introduced. When you do not know how to work with a bean model XSP action +
ESQL is really a helpful thing.

Then the problems came:
  - there were just too many actions
  - the sitemap language was a nightmare ( as matches, selectors and other
    sitemap components are just enough for document rendering, I think that
    coding "flow" in the sitemap was even a step backward from the ease I had
    in PHP). Especially when action-sets disappeared in 2.1 :)
  - when the SimpleFormTransformer was intruduced it was much easier (and
    cleaner) to fill the form with values but still it was not what tigers
    like the most.
  - my software users (and me really too) would like the software to present
    more advanced GUI - the most simple GUI there is is not usually ergonomic
    enough.

At the time cocoon flow started to emerge and the potential was (is) huge. It
was really nice to move all the logic to javascript code. I am still at the
stage that I find calling actions from flow very useful. Maybe it should be all
placed in business logic classes but as I said: up till now XSP action + ESQL
rock!

Today I am still coding my software the way I described (do not know how to do
it the other way) so I started to fill a little stressed about the fact that
it is not way I should do it.

* PART TWO *
* Title: toward the perfect web application and why such lame as me couldn't
* achieve it with cocoon in it's current state
* Title 2: a taste for even more

Some of my research thoughts (this is the main purpose of this mail):

flow + persistence + woody is not enough to create a full blown web 
application. Why? Just because web application is (according to me and my 
current knowledge state):

1. data model
2. business logic (in specific database actions)
3. flow (which pages are shown, what actions are being fired)
4. GUI

ad 1. We can build various data models in cocoon (beans, xml). That's fine. 
There is always some "but": the support for persistence is quite none. 
All the samples use the "temporary" solution creating sesions only for
their own purpose. Some Avalon component would be needed I think (I am still
digging into Avalon lifecycle - it's not easy). The rest would be a piece of 
cake.

ad 2. We can code business logic in components, actions
ad 3. flow is flow :) we got it

WE DO NOT HAVE GUI FRAMEWORK!

While Woody is nice and a "great leap for mankind" it's not enough to build a 
full blown up GUI.

While looking for Eclipse plugins I have found a commercial package called 
W4Toolkit (http://www.w4toolkit.com). It is i think similar to .NET philosophy 
but coded entirely in Java. Please mind that I do not want to advertise any of 
the products. I am just pointing ideas ( I do not even like both :) ) 

Both .NET and W4Toolkit:
  - abstract coding web applications completely. While in .NET you can use 
  ASP.NET pages which mix HTML with web controls, in W4Toolkit you have only 
  Java objects. Both give user a set of controls like: 
  - menu
  - tree control
  - panel
  - tabbed pane
  - standard form controls like edits, listbox, selects and so on.
  
This is the first step: provide user with controls that would allow him to build 
a complete GUI ( implementing a tree control, either server side or client side 
is not easy) 

Second thing to do is to provide user with an invensive event model. For those: 

  - .NET uses single hidden input which stores a page state ( binary form ) - 
  really stupid from my point of view - for some pages the page content is a few 
  kilobytes while state takes nearly 50 kB
  
  - W4Toolkit uses JavaScript intensively. Not a good idea in some environments 
  also, but it allows to do quite anything concerning events - you can render a 
  submit button as an image or a link, you can trigger an event while expanding 
  a tree )
  
What are the biggest pros of unified GUI framework? 
 - you abstract web programming even more. Writing a web application with a rich 
 GUI would feel like writing a Java Swing application. There are even layout 
 managers in W4Toolkit so you can do panel.add( control, layout.NORTH );

 - you do not respond to "low level" submit names, hidden inputs and other weird 
 techniques but just HANDLE THE EVENT ! It is not so big problem to handle 
 events if all you have is a single form but try to explain somebody new in the 
 team how everything works now if you build your page out of :
         - menu part pipeline
         - toolbar pipeline
         - sidepar pipeline
         - some treeview
         - some form view 
         - some content view
         - a status bar

I find aggregation to be a breakthrough in generating documents, reports and so 
on. because first you have small parts and then you join them into a bigger 
parth. With GUI it's different. You have to provide some FUNCTIONALITY so you 
design your UI as a whole and then decouple it to smaller pieces. They are very 
tight together. Now you have to do tricks to provide integrations of various GUI 
elements. 

Some of you would say : use Struts, I say : I have been looking at Scarab 
bugtracker. While it provides some nice guis (not very advanced though - the 
most interesting is a tabbed page) IT'S A MONSTER!

I think we all know what are the cocoon's advantages. I think that it's a lot 
harder to add things to .NET that cocoon can (and to make it so pleasant to 
use) rather than extend cocoon with some GUI functionality. I have the 
impression that all other frameworks work very well for the purposes the 
small group of developers had in mind while in cococon you could do just 
anything.

I have learned a lot during last year of struggle with cocoon. A completely new 
philosophy to build web based "things" but I am still not the one that could 
start such big project. 

What do you think ? 
        LG
-- 
            __
         | /  \ |        Leszek Gawron            //  \\
        \_\\  //_/      [EMAIL PROTECTED]          _\\()//_
         .'/()\'.     Phone: +48(600)341118     / //  \\ \
          \\  //  recursive: adj; see recursive  | \__/ |

Reply via email to