Archive for May, 2006

Aranea Web Framework 1.0 M3 Released

Tuesday, May 16th, 2006

This release provides improvements in configuration, JSP tag API, AJAX and popups. Since the release was delayed due to technical problems it also contains early support for holding session state on client and lightweight JSP container.

The Aranea 1.0 M3 release is a major milestone on the way to the final release. It contains both functional and API improvements, and numerous bugfixes. The major improvements are as follows:

  • JSP tags. We want it to make it very simple to create new Aranea JSP tags and customize existing ones. For that we have refactored the current tag library to be closer to the standard API and now provide a simple set of utility classes instead of scattered functions.
  • Configuration. Aranea now supports the Configuration by convention by providing a default, overridable configuration. It is now possible to configure simple Aranea setups using only web.xml, yet be able to override (or add your own) filters when needed.
  • Popups. Popup API has been significantly improved and now it should be very easy to open and use arbitrary popups windows.
  • Partial page update. Partial page update allows to update only parts of the HTML page by sending a background AJAX request. Its performance has been significantly improved in this milestone.
  • Client state serialization. Aranea allows now to serialize the session state to client (optionally compressing it) to save server memory. This functionality is in prototype stage at the moment and will be finalized in 1.0 M4.
  • Lightweight JSP container. Aranea uses an internal implementation of parts of the JSP spec to power the live examples in the distribution. This feature (which will become an Aranea subproject) is also in its prototype phase and more information will follow later.

The next release is 1.0 M4, which is scheduled for June and should be a last, feature complete milestone before the final release, which will follow right after.

Aranea is an Open Source (APL 2.0) Java Hierarchical Model-View-Controller Web Framework that provides a common simple approach to building the web application components, reusing custom or general GUI logic and extending the framework. The framework enforces programming using Object-Oriented techniques with POJOs and provides a JSP tag library that facilitates programming web GUIs without writing HTML.

SourceForge CVS up, problems continue

Saturday, May 13th, 2006

The SourceForge CVS servers came back up (albeit with a new CVSROOT), but our troubles have just started. It seems that SourceForge have lost a few days worth of CVS commits in the new repository, and since we use branches a lot and our issue tracker relies on some magic CVS tags we’re still in trouble with getting our act together…

We’ll try to put the release up on Monday or Tuesday, so stay tuned (the nightly builds are also out-of-date thanks to the CVS state). We’re also definitely migrating away from SourceForge before something will destroy the CVS servers alltogether :) .

M3 delayed thanks to SourceForge

Thursday, May 11th, 2006

Thanks to SourceForge CVS service being indefinitely down, again, we have to delay the M3 release until next week. It seems that we will have to move our CVS repository elsewhere (most likely to our own private server that hosts araneaframework.org). It is just annoying that SourceForge behaves this way, not every Open Source project can afford a private server.

On a more positive note we also include support for client state in the 1.0 M3 release in addition to the planned improvements.

Where JSF and Portlets went wrong…

Wednesday, May 3rd, 2006

JSF and Portlets promised to integrate the web, but in reality they just brought more confusion and lock-in. One of the main Aranea goals is to provide a viable lightweight alternative for web integration.

JSF promise was to be able to reuse web components among different frameworks that correspond to one standard. However the standard, as always, have left more things open than specified, and in reality we didn’t even come near to actually reusing components between frameworks (try using ICEFaces components with ADFFaces). What’s worse, JSF have imposed on us a highly complex and clumsy API, that one needs to follow to achieve even a little reusability and broke the familiar way of capturing logic in custom JSP tags.

While third-party options (like Facelets) do make programming with JSF easier, one still has to jump through hoops just to get simple reusable components. And since the components are not really Java objects, there is almost no good way to enforce a normal contract for their communication.

The trouble is that we already have a great tool for building and integrating disparate components—it is called the Java programming language. Object-oriented design have been proven to be a viable solution for already two decades, and it is just sad to see that the designers of JSF have ignored it to pursue type unsafe and hard to debug design that looks more than a bit like Struts, revisited.

Which brings us to our second offender—Portlets. Although Portlets were the first to achieve actual remote integration among different web applications, they also did that with a model that is limiting in every way possible. There is almost no communication between portlets, there is no way to embed portlets in other portlets, and some of the worst aspects of servlets (like static configuration and global contexts) have been carbon copied to the portlet spec. However instead we get modes, window states, persistent store and user profiles, which don’t have much to do with the integration itself and should really have been provided on top of that and not all in one spec.

In my mind these specifications share the same trouble as the infamous EJBs:

  • They are designed by a committee
  • They are not standardizing something existing, but creating a new solution on paper
  • They are designed largely by and for tool makers, instead of developers

Now, selling tools is a great goal for those of us who make them. But tool-oriented specifications have insofar turned out to be less than successful. The EJB world is rapidly moving towards lightweight solutions like Spring and Hibernate, which instead of providing shiny tool support have a simple and clean design and just do their job well. The developers became so bitter from the tools, mappings and bytecode postprocessing, that Plain Old Java Objects became a buzzword that sells considerably better than MDA.

Now the situation is rapidly improving in the application server ecosystem, and with EJB 3.0 being a mix of Spring and Hibernate with a healthy dose of annotations, we are definitely looking to a brighter future (though the point of the rubber stamping perfectly good open source frameworks as a standard is still unclear to me).

However the situation in the web framework ecosystem is yet to achieve the same level of enlightenment. Currently we are looking at a large number of incompatible web frameworks that kill any hope of integration and reuse even before it appears. Many of these frameworks are really innovative (Wicket, Tapestry, RIFE come to mind and Seaside deserves an honorable mention), but there is no way to use their strength without also accepting their weaknesses.

It is our belief that different approaches are needed for different types of web applications. For example blog engines do well with a REST semantics, while complex enterprize applications do better with a component semantics and in some other cases one needs differently proportioned mix of the two or something altogether different. Aranea goal is to capture different types of these semantics in a simple and clean component model:

  • Services capture REST semantics
  • Widgets capture stateful component semantics

However to become actually useful you also need to connect the two, so we have Components that are a supertype of both and capture component lifecycle, communication and hierarchy. As a result we get a lightweight implementation of the Hierarchical Model-View-Controller pattern that allows to actually use both approaches at the same time.

What’s more, since service and widgets capture the essence of their semantics they should allow to host similar constructions from different web frameworks providing an interoperability layer with a simple and clean API (widget interface has 4 meaningful methods not counting the 4 more lifecycle ones and does not need any configuration). It is indeed our intention that the minimalistic Aranea core would be usable to integrate together different web frameworks, allowing to seamlessly use them together in one application combining (to some extent) different approaches when needed.

Next to that goal it becomes relatively simple to just reuse components between applications a la JSF or combine several subapplications into one a la Portlets. Remote integration is trickier, but it shouldn’t be too hard to host portlets or provide a WSRP adaptor.

Although we still have to talk in future tense about integrating the open source web frameworks (and possibly JSF), we have already achieved a lot of reusability and integration in terms inside and between applications, as well as with an internal legacy web framework. We hope that it will go just as smoothly with the other frameworks and we will be able to deliver on the JSF and Portlet promise.

Nightly builds up and running

Tuesday, May 2nd, 2006

We have put up the nightly build system, so now you can get the latest Aranea snapshot without having to wait for the next release. Be wary though, it may be not too stable.

You may want to check out the latest snapshot, since now Aranea runs with “No Configuration Required ™” approach of configuring by convention. We are nearing the M3 release, which will come either this or next week (as all the critical bugs are solved).