It's now been over half a year since the last stable release of Cactus, a framework for unit-testing server-side Java code. However, that doesn't mean that the project has become less active, quite the contrary. With Christopher Lenz and Julien Ruaux two new committers have joined the game.

The focus for the next release of Cactus (which should be coming rather soon - honestly) has been on ease of use. In the past, it had often been quite hard to integrate Cactus in a development environment, be it an IDE or an automated build system based on Ant. The upcoming release of Cactus will provide custom Ant tasks that can transparently run tests on a variety of containers, as well as a plugin for the Eclipse IDE that extends the existing JUnit runner with the capability of running In-Container tests.

Other enhancements include:

A new ServletTestSuite class that enables a collection of normal JUnit tests to be executed inside a servlet container

Cactus test cases can have begin() and end() methods, which are similar to the JUnit setUp() and tearDown() but get invoked on the client side.

A new helper class (JspTagLifecycle) that simplifies testing of JSP tag libraries by providing a stub JSP engine

Integration of the Jetty servlet container

The ServletTestRunner can can perform the XSLT transformation for displaying a HTML test report on the server side

For more details, see the full feature list [1] and the list of changes [2].

CLI has been redesigned and as such the next general release will be 2.0. The initial implementation of the redesign is not yet in CVS so user comments and feedback have not been gathered yet. More information will be posted to the mailing lists when appropriate.

Commons Codec

Editor: Tim O'Brien

The initial release of Commons Codec 1.1 was release. Commons Codec contains original phonetic encoders, a Hex encoder, and a Base64 encoder integrated from xmlrpc and Commons HttpClient both of which were derived from original source code in Catalina. Codec 1.1 is mostly RFC 2045 and will be followed up shortly with release 1.1.1 to bring the project into full compliance with RFC 2045. This project is currently seeking input on which stream oriented Base64 encoder to integrate into a 1.2 release - please send suggestions to the Commons developer mailing list.

Commons File Upload

Editor: Martin Cooper

File Upload has gone through some significant changes recently. The code base has been overhauled to address several outstanding bug reports, as well as provide a much more solid base for customization. At the same time, real documentation has been added that addresses a large majority of uses of the File Upload component. A 1.0 Beta 2 release is anticipated as soon as the few outstanding bug reports are addressed.

User feedback would be very much appreciated.

Commons Betwixt

Editor: Robert Burrell Donkin

In the last couple of months betwixt has been slowly moving forwards. Bugs were fixed and the following functionality added: setter for encoding when writing beans, support for reading composite map entries, support for specifying custom updater in the .betwixt file and suport for writing mixed content.

Hopefully they'll be more of the infamous refactoring happening soon - there's even a wiki page for those brave souls that feel like contributing some design wisdom.

Commons Digester

Editor: Robert Burrell Donkin

April saw the release of a new Digester release. This was rushed out to fix a backwards compatibility issue with 1.4.x. So, the release notes contains pretty much all the Digester activity for March and April.

There are some exciting developments (probably) coming up in the near future including support for some validation:

and also Digester plugins (which allow the digestion to be specified in the xml to be read in!).

Commons Beanutils

Editor: Robert Burrell Donkin

Slow but steady progress for BeanUtils. Bugs fixed - the number of bug reports and requests for enhancements is impressive and it takes time to process them with the quality that's required - but please keep them coming. We've been moving towards beanification of BeanUtils - creating proper classes that provide the functionality behing the static utility classes. This will allow different instances which can have their properties set and convertors registered just for that instances rather than globally.

Log4j

Editor: Mark Womack

A new book on log4j entitled "The complete log4j manual", { { { ISBN 2-9700369-0-8 } } }, authored by fellow log4j committer, Ceki Gülcü, has been published early March. The book is available directly from the author and in select bookshops throughout the world [0].

Development for the 1.3 version of log4j continues.

The jakarta-log4j-sandbox cvs repository has been created with filter, selector, and servlet related classes moved into it for initial contents [1]. The log4j-sandbox, similar to other Jakarta sandbox cvs repositories, is meant to allow for less restrictive development related to log4j. Experimental changes/tools can be explored without exposing the changes to the core log4j release. As the code matures, it will be folded into the log4j core release based on core committer acceptance.

Changes made to the log4j and log4j-sandbox build scripts to support { { { CheckStyle } } } and Jalopy targets.

Various changes from Paul Smith, Scott Deboy, Oliver Burns, and Mark Womack were applied to the to the Chainsaw gui tool. Before the changes, Chainsaw was was configured to receive events via a single socket. Now it can receive events from any remote appender by configuring it (via a normal log4j xml configuration file) to use a matching Receiver plugin. Changes were also made to allow for customized gui's to be built on top of the core Chainsaw table model using a new { { { ChainsawAppender } } }.

MDC support was added to the { { { XMLLayout } } } class and the Chainsaw gui tool by Paul Smith. { { { PatternLayout } } } was also extended to support the output of all defined MDC key/values [2].

Ceki Gülcü recently extended { { { LoggingEvent } } } to allow properties [3]. Properties are meant to be set by Layout and Appender classes as they output/process logging events. Properties are per logging event where MDC values are per thread.

There was a good discussion about changes needed in the { { { LoggingEvent } } } class to allow instances to be reconstituted when received from remote sources that do not use { { { LoggingEvent } } } as the transport type (like XML for example). Changes will be applied to define a verbose constructor that takes the required { { { LoggingEvent } } } info [4].

Raymond { { { DeCampo } } } started a discussion about cleaning up and extending the existing { { { JDBCAppender } } }. This is a goal for the 1.3 release [8].

Jacob Kjome was accepted as a commiter for the log4j cvs. Paul Smith and Scott Deboy were accepted as committers for the log4j-sandbox cvs [9].

A new version of Chainsaw (v2) is currently under development in the log4j-sandbox with Scott Deboy and Paul Smith leading the effort10. This new version provides a much deeper and richer gui tool for viewing logging events. Development continues at a fevered pace and feedback is welcomed and desired.

The Avalon logging facade, { { { Log4JAvalonLogger } } }, has been added to the log4j core release for v1.3 per the submission by Peter Donald11.

Lucene is preparing for building of 1.3 RC1. We are just waiting for one or two more contributions to be checked into the CVS repository.

This month Lucene received a bug fix that was causing certain failures on Windows JVMs, due to a bug in java.io.File's renameTo (File) method. The fix came from Matt Tucker of Jive Software [1]. Tatu Saloranta refactored QueryParser, making it much easier to extend and provide custom query parsing behaviour. [2]

For those who want to learn more about idexing text with Lucene, a new article on that subject has been published on Onjava.com. [3]

Struts is currently in a holding pattern, awaiting final releases of all its Commons dependencies. A previous dependency on Commons DBCP, and hence Commons Pool, has been removed by reverting to the generic data source used in earlier versions of Struts. The one oustanding dependency is on Commons File Upload. It is anticipated that Struts 1.1 RC2 will be released shortly after a File Upload final release.

Tapestry

Editor: Howard M. Lewis Ship

The Tapestry project is quickly coming together as a Jakarta project. The final release of Tapestry 2.3 was released at the end of February [1] and work on the radically improved 3.0 release is surging towards an initial beta release in the near future. Neil Clayton is working on a revised and improved Tutorial and Howard Lewis Ship is squeezing in some time to write an improved User's Guide. Tapestry is now building under Gump. A vote on Tapestry's acceptance as a full-fledged Jakarta project is currently in progress, with all indications of a succesful outcome.

Meanwhile, new committer David Solis has been providing bug fixes, a suite of WML components, and documentation. Tapestry is really thriving under the Jakarta banner!