Greetings!
I have been following some of the recent discussions on this
mailing list about possible directions for the Jakarta project.
I would like to offer the following observation: To have code and
projects coming out of Jakarta being more widely adopted,
developers first need to be aware of them, then they have to be
able to judge whether a Jakarta project is suitable for the
developers' needs.
I believe that the Jakarta website could do more to make its
products easily accessible. It is often not easy to tell what a
project is actually about, what the project's scope is, how
its functionality is achieved, or how mature and usable the
existing code base is.
Evaluating an of-the-shelf component usually is an iterative
process: In a first step one tries to determine the overall
purpose of the component, and whether it is suitable for one's
purpose at all. In later steps, one may consider how the component
works, and what distinguishes it from comparable/competing
products.
The Jakarta subprojects support this evaluation and decision
process to various degrees. The one that I am most familiar with
(Velocity) is exceptional in this regard (mere coincidence?). But
some (sub-)projects force the potential user to study the Javadoc
to find out which problem the project attempts to solve, which is
probably unacceptable for many visitors.
I think it would be helpful for everyone (in particular in light
of the desire to see Jakarta code being more widely adopted in
outside projects) to try to improve the information offered here,
and to support visitors in their evaluation and decision process
as much as possible.
After this introduction...
Here is what I have done: I have scoured the entire Jakarta
website and compiled information not only on each project, but
also on each of the subprojects (such as those in the Commons,
or those that are part of Avalon or Turbine), which are not
immediately visible when visiting the Jakarta homepage.
For each project, I have included a short, one-paragraph
description (often taken from the projects webpage), but I also
tried to give a sense of the maturity and the activity of the
project. For anybody wanting to use (as opposed to develop)
Jakarta code in their own projects, this information will play a
significant part in their final decision. (I report the version
number as proxy for the maturity and the extend of the News
section of each project as proxy for its activity.)
I hope that by providing the information not only about the
top level project, but also about all the individual subprojects
in one location, a visitor to the site will have an easier
time assessing purpose and scope of each of the projects.
I would hope that this can be extended in the future to include
the following:
- a concise abstract, stating what the project is about and
what purpose it serves (the foundation for which I hope
to provide here, based on what many projects already offer on
their individual homepages)
- a description how the project works, possibly by walking the
visitor through a "Hello, world" example application. (Some
Jakarta projects are exemplary in this, others are not. In
particular for the larger projects, such as Avalon, Turbine,
Struts, Jetspeed it is not easy to find out how to use them
in one's own work and what benefits would be derived. Very
extensive study is needed to find out whether the project
would even be applicable.)
- a comparison with comparable projects (Velocity is exemplary
in that).
I am not deeply familiar with many of the Jakarta projects (in
particular, I can't quite fathom the full extend of some of the
frameworks, such as Avalon or Turbine, at this time), but in the
spirit of 'release-early/release-often' I would like to make the
information I have compiled so far available to the community. Any
feedback (if polite) is welcome, in particular corrections from
people more knowledgeable about a given project. I will try to
incorporate anything useful and feed it back into the community.
As time goes on, I will try to fill in other pieces as well (such
as worked examples) - any help or advice is welcome, of course!
The compilation follows below - I have tried to encode it using
the jakarta-site XML tags. My apologies if I am not using them
properly. I think it would be wonderful if the document could be
made available on the Jakarta website for review (unfortunately, I
don't maintain a personal website at the moment).
Best regards,
Ph. Janert
-----------------------------------------------------------------
Philipp K. Janert, Ph.D. janert at ieee dot org
# Document begins below #
<?xml version="1.0"?>
<document>
<properties>
<author email="janert at ieee dot org">Philipp K. Janert</author>
<title>Jakarta Overview</title>
</properties>
<meta name="keyword" content="jakarta, java"/>
<body>
<section name="Libraries, Tools, and APIs">
<subsection name="Ant">
<p>Build tool, XML driven, OS independent (replaces make)</p>
<ul>
<li><b>Documentation: </b>Extensive online user manual and
FAQ</li>
<li><b>Version: </b>1.4.1</li>
<li><b>News: </b>Latest entry: 15.Feb.02</li>
</ul>
</subsection>
<subsection name="BCEL: Byte Code Engineering Library">
<p>Classes to analyze and modify the compiled bytecode
(instead of the java source code).</p>
<p>The Byte Code Engineering Library (formerly
known as JavaClass) is intended to give users a
convenient possibility to analyze, create, and
manipulate (binary) Java class files (those ending
with .class).</p>
<ul>
<li><b>Documentation: </b>Extensive online user manual</li>
<li><b>Version: </b>???</li>
<li><b>News: </b>Single entry: 27.Oct.01</li>
</ul>
</subsection>
<subsection name="Commons">
<p>Repository for small scale, reusable, code components
that are useful in multiple Jakarta subprojects.</p>
<p>Contains also a "Sandbox": A workspace for more
experimental Java component development.</p>
<ul>Components in the Commons Proper:
<li><b>BeanUtils</b>
<p>Easy to use wrapper around reflection and
introspection</p>
<ul>
<li><b>Documentation: </b>Javadoc</li>
<li><b>Version: </b>1.2</li>
<li><b>News: </b>Single Entry: 24.Dec.01</li>
</ul>
</li>
<li><b>Collections</b>
<p>Additional collection classes for specal purposes:</p>
<ul>
<li>Special-purpose implementations of Lists and
Maps for fast access</li>
<li>Adapter classes from Java1-style containers
(arrays, enumerations) to Java2-style collections.</li>
<li>Methods to test or create typical set-theory
properties of collections such as union,
intersection, and closure.</li>
</ul>
<ul>
<li><b>Documentation: </b>Javadoc</li>
<li><b>Version: </b>1.0</li>
<li><b>News: </b>Single Entry: 14.Jul.01</li>
</ul>
</li>
<li><b>Digester</b>
<p>Digester provides a higher level, more
developer-friendly interface to SAX events, because
most of the details of navigating the XML element
hierarchy are hidden -- allowing the developer to
focus on the processing to be performed.</p>
<p>Many Jakarta projects read XML configuration files
to provide initialization of various Java objects
within the system. There are several ways of doing
this, and the Digester component was designed to
provide a common implementation that can be used in
many different projects.</p>
<p>Basically, the Digester package lets you configure
an XML -> Java object mapping module, which triggers
certain actions called rules whenever a particular
pattern of nested XML elements is recognized. A rich
set of predefined rules is available for your use, or
you can also create your own.</p>
<ul>
<li><b>Documentation: </b>Extensive introduction
hidden in Javadoc</li>
<li><b>Version: </b>1.1.1</li>
<li><b>News: </b>Single Entry: 16.Oct.01</li>
</ul>
</li>
<li><b>DBCP: Database Connection Pool Package</b>
<p></p>
<ul>
<li><b>Documentation: </b>None</li>
<li><b>Version: </b>1.5</li>
<li><b>News: </b>None</li>
<li><b>Misc: </b>No proper webpage, just CVS listing</li>
</ul>
</li>
<li><b>HTTP Client</b>
<p>The Jakarta Commons HTTP Client component provides
an efficient, up-to-date, and feature-rich package
implementing the client side of the most recent HTTP
standards and recommendations.</p>
<p>Designed for extension while providing robust
support for the base HTTP protocol, the HTTP Client
component may be of interest to anyone building
HTTP-aware client applications such as web browsers,
web service clients, or systems that leverage or
extend the HTTP protocol for distributed
communication.</p>
<ul>
<li><b>Documentation: </b>Overview, supported protocols,
and Javadoc</li>
<li><b>Version: </b>2.0 alpha 1</li>
<li><b>News: </b>Last Entry: 05.Oct.01 - three entries
total</li>
</ul>
</li>
<li><b>JXPath</b>
<p>Manipulating beans using the XPath syntax (?)</p>
<ul>
<li><b>Documentation: </b>None</li>
<li><b>Version: </b>1.3</li>
<li><b>News: </b>None</li>
<li><b>Misc: </b>No proper webpage, just CVS listing</li>
</ul>
</li>
<li><b>Latka</b>
<p>Latka is a functional (end-to-end) testing tool. It
is implemented in Java, and uses an XML syntax to
define a series of HTTP (or HTTPS) requests and a set
of validations used to verify that the request was
processed correctly.</p>
<ul>
<li><b>Documentation: </b>Overview, Javadoc, and XML syntax
reference, documentation appears somewhat immature</li>
<li><b>Version: </b>1.0 alpha 1</li>
<li><b>News: </b>Single Entry: 13.Sep.01</li>
</ul>
</li>
<li><b>Logging</b>
<p>Simple wrapper API around multiple logging APIs</p>
<p>The Logging package is an ultra-thin bridge between
different logging libraries. Commons components may
use the Logging API to remove compile-time and
run-time dependencies on any particular logging
package, and contributors may write Log
implementations for the library of their choice.</p>
<p><ul>Includes prebuilt support for the following:
<li> Log4J from Apache's Jakarta project.</li>
<li>JDK Logging API, included in JDK 1.4
or later systems.</li>
<li>LogKit from Apache's Jakarta project.</li>
<li>NoOpLog implementation that simply swallows all
log output, for all named Log isntances</li>
<li>SimpleLog implementation that writes all log
output, for all named Log instances, to System.out.</li>
</ul></p>
<ul>
<li><b>Documentation: </b>Very good description in
JavaDoc</li>
<li><b>Version: </b>1.0</li>
<li><b>News: </b>Single Entry: 20.Feb.02</li>
</ul>
</li>
<li><b>Pool</b>
<p>Generalized Object Pool Interface (?)</p>
<ul>
<li><b>Documentation: </b>None</li>
<li><b>Version: </b>1.5</li>
<li><b>News: </b>None</li>
<li><b>Misc: </b>No proper webpage, just CVS listing</li>
</ul>
</li>
<li><b>Validator</b>
<p>Framework to define input validators in XML (?)</p>
<ul>
<li><b>Documentation: </b></li>
<li><b>Version: </b>1.6</li>
<li><b>News: </b>None</li>
</ul>
</li>
</ul>
</subsection> <!-- Commons -->
<subsection name="ECS: Element Construction Set">
<p>Java API to generate markup tags, rather than using
println(). It directly supports HTML 4.0 and XML, but
can easily be extended to create tags for any markup language.</p>
<ul>
<li><b>Documentation: </b>Very clear Example and Javadoc</li>
<li><b>Version: </b>1.4.1</li>
<li><b>News: </b>None</li>
</ul>
</subsection>
<subsection name="JMeter">
<p>Pure Java desktop application designed to load
test functional behavior and measure performance.</p>
<p>Can load and performance test HTTP and FTP servers
as well as arbitrary database queries (via JDBC).</p>
<p>Swing support to make a graphical analysis of
performance or to test your server, script, object
behavior under heavy concurrent load.</p>
<ul>
<li><b>Documentation: </b>Extensive online user and
developers manual, but hard to find out how it
works quickly.</li>
<li><b>Version: </b>1.7beta</li>
<li><b>News: </b>Good (no dates!)</li>
</ul>
</subsection>
<subsection name="ORO: Regular Expression Library">
<p>The Jakarta-ORO Java classes are a set of
text-processing Java classes that provide Perl5 compatible
regular expressions, AWK-like regular expressions, glob
expressions, and utility classes for performing
substitutions, splits, filtering filenames, etc.</p>
<p>This library is the successor to the OROMatcher,
AwkTools, PerlTools, and TextTools libraries from ORO,
Inc.</p>
<p>Jakarta ORO package is possibly the more
complete regular expression package than Jakarta
Regexp.</p>
<ul>
<li><b>Documentation: </b>Javadoc only</li>
<li><b>Version: </b>2.0.5</li>
<li><b>News: </b>Last release: 17.Jan.02, five releases in
2001</li>
</ul>
</subsection>
<subsection name="POI">
<p>APIs for manipulating OLE 2 file formats</p>
<p>Set of APIs for creating, reading, and writing files
based upon the OLE 2 Compound Document Format using only
Java (no native stuff). OLE 2 Compound Document Format
based files include most Microsoft Office files such as
XLS and DOC.</p>
<ul>
<li><b>Documentation: </b>Great description and history</li>
<li><b>Version: </b>1.1-dev</li>
<li><b>News: </b>Single Entry: March 6 2002,
but extensive project history.</li>
</ul>
</subsection>
<subsection name="Regexp">
<p>Pure Java Regular Expression package</p>
<ul>
<li><b>Documentation: </b>Javadoc only</li>
<li><b>Version: </b>1.3-dev</li>
<li><b>News: </b>Good, (no dates)</li>
</ul>
</subsection>
<subsection name="Taglibs">
<p>A collection of JavaServer Pages (JSP) custom tag
libraries useful in building web applications.</p>
<ul>
<li><b>Documentation: </b>Detailed descriptions of
all subpackages, extensive online tutorial</li>
<li><b>Version: </b></li>
<li><b>News: </b>Great</li>
</ul>
</subsection>
<subsection name="Watchdog">
<p>Validation tests for the Servlet and
JavaServer Pages specifications</p>
<ul>
<li><b>Documentation: </b>None: no nothing</li>
<li><b>Version: </b>None</li>
<li><b>News: </b>None</li>
</ul>
</subsection>
</section> <!-- Libraries, Tools, and APIs -->
<section name="Frameworks and Engines">
<subsection name="Avalon">
<!-- purported benefits of Avalon are hard to find out! -->
<p>Component-oriented framework and set of components for
appliction development.</p>
<p>The main goal of this project is to design a way for
different projects to share resources avoiding as much
as possible efforts duplication.</p>
<p>Extensive printable book</p>
<li><b>Framework</b>
<!-- No overview or list of features and functionalities -->
<p>The Avalon framework consists of interfaces that
define relationships between commonly used application
components, best-of-practice pattern enforcements, and
several lightweight convenience implementations of the
generic components.</p>
<p>At the core of the Avalon framework is the Component.
A Component is defined as a passive entity that performs a
specific role, in other words, a Component is acted upon
(passive) and takes on a specific role in regards to
being configurable, composable, intitializable, disposable,
or stoppable.</p>
<p>Components and interfaces are provided for:
<ul>
<li>Component management and composition</li>
<li>Activity and role management (in the above sense)</li>
<li>Configuration and parameter management</li>
<li>Context management</li>
<li>Loggin</li>
<li>Threading</li>
<li>Exception support</li>
</ul>
</p>
<ul>
<li><b>Documentation: </b>Overview, UML package and class
diagrams</li>
<li><b>Version: </b>4.1.2</li>
<li><b>News: </b>Last release: 31. Jan. 02 (6 releases in
2001)</li>
</ul>
</li>
<li><b>LogKit</b>
<p>LogKit is a logging toolkit designed for secure
performance oriented logging in applications.</p>
<ul>
<li><b>Documentation: </b>Extensive online whitepaper and
Javadoc</li>
<li><b>Version: </b>1.0.1</li>
<li><b>News: </b>Last Revision: 31.Jan.02 (typo!)
six releases in 2001</li>
</ul>
</li>
<li><b>Excalibur</b>
<p>Collection of ready to use components and utilities</p>
<p>Also provides a Scratchpad, for components under development</p>
<p>The status of individual components is not always clear.</p>
<ul>
<li><b>Documentation: </b>Great short descriptions for
individual components, Javadoc.</li>
<li><b>Version: </b>4.1</li>
<li><b>News: </b>Last Revision: 30.Jan.02 (5 entries for
2001)</li>
</ul>
<ul>Individual utilities for:
<li>Command line parsing</li>
<li>Collections</li>
<li>Component Utils (?)</li>
<li>Thread utils (mutexes, ...)</li>
<li>Data Source Mgt (?)</li>
<li>I18N</li>
<li>IO Utils (File Filters and copying routines
on Streams and Readers)</li>
<li>LogKit Mgt (define the log categories on a
component basis)</li>
<li>Resource Monitoring (notification when a
resource has changed)</li>
<li>Pooling support (?)</li>
<li>Property Utils (wildcard-like lookup of key-value pairs)</li>
<li>Proxy (?)</li>
</ul>
</li>
<li><b>Phoenix</b>
<p>Minimal Application Server (manages classloader, security
and logging needs)</p>
<p>Purpose somewhat unlear, possibly still starting out.</p>
<ul>
<li><b>Documentation: </b>Very sketchy</li>
<li><b>Version: </b>4.0a2</li>
<li><b>News: </b>12.Nov.01, very few entries</li>
</ul>
</li>
<li><b>Cornerstone</b>
<p>Cornerstone is a set of services for the Phoenix
kernel. It contains "blocks" that plug into
Phoenix. Example blocks include ConnectionManager,
SocketManager, Scheduler etc.</p>
<p>Seems somewhat immature</p>
<ul>
<li><b>Documentation: </b>Some examples, Javadoc</li>
<li><b>Version: </b>No official release yet</li>
<li><b>News: </b>No dates</li>
</ul>
</li>
</subsection>
<subsection name="Cactus">
<p>Cactus is a simple test framework for unit testing
server-side java code (Servlets, EJBs, Tag Libs, Filters, ...). </p>
<p>It uses JUnit and extends it.</p>
<p>It focusses on integration unit testing, but also supports
code logic and functional unit testing.</p>
<p>It provides testing for servlets (etc) within the actual
servlet container, as opposed to testing them within a
testing scaffold.</p>
<ul>
<li><b>Documentation: </b>Extensive tutorials and HowTos, but
hard to find out how it works quickly.</li>
<li><b>Version: </b>1.3</li>
<li><b>News: </b>Last Entry: 10.Feb.02 (5 entries for 2001)</li>
</ul>
</subsection>
<subsection name="Lucene">
<p>Large-scale text search (and indexing?) engine.</p>
<ul>
<li><b>Documentation: </b>Extensive FAQ, Tutorial, Links
to offsite articles, Javadoc</li>
<li><b>Version: </b>1.02</li>
<li><b>News: </b>None</li>
</ul>
</subsection>
<subsection name="Struts">
<p>Model,View,Controller Framework for server
side development.Struts uses a special Servlet
as a switchboard to route requests from Web browsers
to the appropriate Java ServerPage (JSP).</p>
<p>Specifically designed for combining Servlets and JSPs,
but works well with JDBC, EJB, JND, and Velocity.</p>
<p>Provides support for mapping of form data to Java Beans.</p>
<p>Relies on Custom Tags and JSP. Possibly plays better
with other J2EE technologies than Turbine. Easier to
retrofit to an existing project than Turbine.</p>
<ul>
<li><b>Documentation: </b>Very extensive: Several FAQs,
User Guide, Developer Guide, but a simple "Hello
world" example application appears to be missing.</li>
<li><b>Version: </b>1.0.2</li>
<li><b>News: </b></li>
</ul>
</subsection>
<subsection name="Turbine">
<p>Servlet based MVC framework, but also provides
functionality that may be of use outside of a
web appliction.</p>
<p>Built around "services": Singleton objects which may
also have an init() and destroy() lifecycle. Many
services come prepackaged (cf. entry below for Fulcrum).</p>
<p>Possibly less J2EE conformant, more of an alternative!</p>
<p><b>News: </b>Last Entry: 08.Mar.02 (monthly status reports
for entire project)</p>
<li><b>Turbine</b>
<ul>
<li><b>Documentation: </b>Extensive: Several Overview
documents, HowTos, Javadoc. Apparently no worked
"Hello world" example.</li>
<li><b>Version: </b>2.2b1</li>
<li><b>News: </b>None</li>
</ul>
</li>
<li><b>Fulcrum</b>
<p>Reusable services for use with Turbine.</p>
<ul>
<li><b>Documentation: </b>Short individual descriptions.</li>
<li><b>Version: </b>None</li>
<li><b>News: </b>None</li>
</ul>
<ul>Individual Services for:
<li>Cache</li>
<li>Factory</li>
<li>Bean population from input (Intake)</li>
<li>JSP</li>
<li>Localization</li>
<li>Mimetypes</li>
<li>Naming (JNDI Wrapper)</li>
<li>Pooling</li>
<li>Scheduler</li>
<li>Security</li>
<li>Templates</li>
<li>File uploads</li>
<li>Velocity integration</li>
<li>XML-RPC</li>
<li>XSLT</li>
</ul>
</li>
<li><b>Stratum</b>
<p>Set of existing Turbine code and Fulcrum services,
refactored as components, with the intent to move
it into the Commons.</p>
<ul>
<li><b>Documentation: </b>Experiemental</li>
<li><b>Version: </b>Apparently just starting out.</li>
<li><b>News: </b>None</li>
</ul>
</li>
<li><b>Torque</b>
<p>Torque is a persistence layer. It generates all
the database resources required from a single XML
Schema document.</p>
<p>The generation of your object model will produce Java
source files that can be used to represent your
database. These classes enable you to create, edit,
delete, and select objects that represent rows in your
database tables. Torque includes a runtime environment
to run the generated classes. </p>
<p>Torque uses a single XML database schema to generate
the SQL for your target database and Torque's Peer-based
object relation model representing your XML database
schema. Additionally, an HTML document describing the
database can be generated if you wish to make a
browseable version of the database schema.</p>
<p>Handling of DB relationships (Foreign Key relationships)
in the mapping to Objects not quite clear.</p>
<ul>
<li><b>Documentation: </b>Extensive: Tutorial, User Guide,
Developer Guide, Database integration Howtos</li>
<li><b>Version: </b>None</li>
<li><b>News: </b>None</li>
</ul>
</li>
<li><b>Turbine Developer Kit (TDK)</b>
<p>The Turbine Development Kit (TDK) is a package that
bundles a copy of Turbine, Tomcat, jar files,
documentation and other utilities in order to help you
get started with Turbine as quickly as possible.</p>
<ul>
<li><b>Documentation: </b>Tutorial</li>
<li><b>Version: </b>2.2b1</li>
<li><b>News: </b>None</li>
</ul>
</li>
</subsection>
<subsection name="Velocity">
<p>Templating engine: replaces placeholders in document
templates with dynamic content at runtime. The content
is taken from application classes, which are placed
into a VelocityContext at runtime.</p>
<p>Templates can contain conditional statments and loop
constructs for cases when the number of dynamic content
entries is not known ahead of time.</p>
<p>Can be used to generate HTML, but also about anything
else (SQL, for instance).
<ul>
<li><b>Documentation: </b>Extensive: Great printable user
and Developers guide, very clear comparison with
other projects.</li>
<li><b>Version: </b>1.2</li>
<li><b>News: </b>Last Release: 09.Dec.01 (11 Entries for
2001)</li>
</ul>
</subsection>
</section> <!-- Frameworks and Engines -->
<section name="Server Applications">
<subsection name="Alexandria">
<p>CVS, Javadoc, Source code, Documentation management
system, to allow you to browse multiple and remote source
repositoriesGenerate Javadoc across multiple java
projects.</p>
<ul>
<li><b>Documentation: </b>Sketchy</li>
<li><b>Version: </b>None</li>
<li><b>News: </b>None</li>
</ul>
</subsection>
<subsection name="James">
<p>Portable email server for all common formats.</p>
<p>Design goals are portability, protocol abstraction,
resource abstraction, mail transport and storage in
single server.</p>
<ul>
<li><b>Documentation: </b>Uneven</li>
<li><b>Version: </b>2.0a2</li>
<li><b>News: </b>1.2.1 released 13. Dec. 00,
2.0a2 released 01. Dec. 01</li>
</ul>
</subsection>
<subsection name="Jetspeed">
<p>Information Portal, making data available
via the web or a WAP-enabled phone.</p>
<p>Jetspeed is independent of content type. The actual
presentation of the data is handled via XSL and delivered
to the user for example via the combination of Java Server
Pages (JSPs) and HTML.</p>
<p>Jetspeed provides support for templating and content
publication frameworks such as Cocoon, WebMacro and Velocity.</p>
<p>Jetspeed is built on top of Turbine.</p>
<ul>
<li><b>Documentation: </b>Extensive, but unclear</li>
<li><b>Version: </b>1.3a2</li>
<li><b>News: </b>Last Entry: 2002/03/15 (confusing)</li>
</ul>
</subsection>
<subsection name="Tomcat 3">
<p>Official Reference Implementation of the
Servlet 2.2 and JSP 1.1</p>
<ul>
<li><b>Documentation: </b>Extensive</li>
<li><b>Version: </b>3.3</li>
<li><b>News: </b>About bi-weekly updates</li>
</ul>
</subsection>
<subsection name="Tomcat 4">
<p>Official Reference Implementation of the
Servlet 2.3 and JSP 1.2</p>
<ul>
<li><b>Documentation: </b>Extensive</li>
<li><b>Version: </b>4.0.3</li>
<li><b>News: </b>About bi-weekly updates</li>
</ul>
</subsection>
</section> <!-- Server Applications -->
</body>
</document>
# Document ends here #
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>