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

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"?>

    <author email="janert at ieee dot org">Philipp K. Janert</author>
    <title>Jakarta Overview</title>

  <meta name="keyword" content="jakarta, java"/>

        <section name="Libraries, Tools, and APIs">
          <subsection name="Ant">
            <p>Build tool, XML driven, OS independent (replaces make)</p>
              <li><b>Documentation:&nbsp;</b>Extensive online user manual and 
              <li><b>News:&nbsp;</b>Latest entry: 15.Feb.02</li>

          <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>
              <li><b>Documentation:&nbsp;</b>Extensive online user manual</li>
              <li><b>News:&nbsp;</b>Single entry: 27.Oct.01</li>

          <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:
                <p>Easy to use wrapper around reflection and 
                  <li><b>News:&nbsp;</b>Single Entry: 24.Dec.01</li>

                <p>Additional collection classes for specal purposes:</p>
                  <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>
                  <li><b>News:&nbsp;</b>Single Entry: 14.Jul.01</li>

                <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>

                  <li><b>Documentation:&nbsp;</b>Extensive introduction 
                    hidden in Javadoc</li>
                  <li><b>News:&nbsp;</b>Single Entry: 16.Oct.01</li>

              <li><b>DBCP: Database Connection Pool Package</b>
                  <li><b>Misc:&nbsp;</b>No proper webpage, just CVS listing</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
                  <li><b>Documentation:&nbsp;</b>Overview, supported protocols, 
                    and Javadoc</li>
                  <li><b>Version:&nbsp;</b>2.0 alpha 1</li>
                  <li><b>News:&nbsp;</b>Last Entry: 05.Oct.01 - three entries 

                <p>Manipulating beans using the XPath syntax (?)</p>
                  <li><b>Misc:&nbsp;</b>No proper webpage, just CVS listing</li>

                <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>
                  <li><b>Documentation:&nbsp;</b>Overview, Javadoc, and XML syntax 
                    reference, documentation appears somewhat immature</li>
                  <li><b>Version:&nbsp;</b>1.0 alpha 1</li>
                  <li><b>News:&nbsp;</b>Single Entry: 13.Sep.01</li>

                <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>
                  <li><b>Documentation:&nbsp;</b>Very good description in 
                  <li><b>News:&nbsp;</b>Single Entry: 20.Feb.02</li>

                <p>Generalized Object Pool Interface (?)</p>
                  <li><b>Misc:&nbsp;</b>No proper webpage, just CVS listing</li>

                <p>Framework to define input validators in XML (?)</p>

          </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>
              <li><b>Documentation:&nbsp;</b>Very clear Example and Javadoc</li>

          <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>
              <li><b>Documentation:&nbsp;</b>Extensive online user and
                developers manual, but hard to find out how it 
                works quickly.</li>
              <li><b>News:&nbsp;</b>Good (no dates!)</li>

          <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,
            <p>Jakarta ORO package is possibly the more
            complete regular expression package than Jakarta
              <li><b>Documentation:&nbsp;</b>Javadoc only</li>
              <li><b>News:&nbsp;</b>Last release: 17.Jan.02, five releases in 

          <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>
              <li><b>Documentation:&nbsp;</b>Great description and history</li>
              <li><b>News:&nbsp;</b>Single Entry: March 6 2002,
                but extensive project history.</li>

          <subsection name="Regexp">
            <p>Pure Java Regular Expression package</p>
              <li><b>Documentation:&nbsp;</b>Javadoc only</li>
              <li><b>News:&nbsp;</b>Good, (no dates)</li>

          <subsection name="Taglibs">
            <p>A collection of JavaServer Pages (JSP) custom tag 
              libraries useful in building web applications.</p>
              <li><b>Documentation:&nbsp;</b>Detailed descriptions of 
                all subpackages, extensive online tutorial</li>

          <subsection name="Watchdog">
            <p>Validation tests for the Servlet and 
              JavaServer Pages specifications</p>
              <li><b>Documentation:&nbsp;</b>None: no nothing</li>

        </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>
              <!-- 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:
                  <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>Exception support</li>
                <li><b>Documentation:&nbsp;</b>Overview, UML package and class
                <li><b>News:&nbsp;</b>Last release: 31. Jan. 02 (6 releases in 

              <p>LogKit is a logging toolkit designed for secure 
                performance oriented logging in applications.</p>
                <li><b>Documentation:&nbsp;</b>Extensive online whitepaper and 
                <li><b>News:&nbsp;</b>Last Revision: 31.Jan.02 (typo!)
                  six releases in 2001</li>
              <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>
                <li><b>Documentation:&nbsp;</b>Great short descriptions for 
                  individual components, Javadoc.</li>
                <li><b>News:&nbsp;</b>Last Revision: 30.Jan.02 (5 entries for 
              <ul>Individual utilities for:
                <li>Command line parsing</li>
                <li>Component Utils (?)</li>
                <li>Thread utils (mutexes, ...)</li>
                <li>Data Source Mgt (?)</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>

              <p>Minimal Application Server (manages classloader, security 
                and logging needs)</p>
              <p>Purpose somewhat unlear, possibly still starting out.</p>
                <li><b>Documentation:&nbsp;</b>Very sketchy</li>
                <li><b>News:&nbsp;</b>12.Nov.01, very few entries</li>

              <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>
                  <li><b>Documentation:&nbsp;</b>Some examples, Javadoc</li>
                  <li><b>Version:&nbsp;</b>No official release yet</li>
                  <li><b>News:&nbsp;</b>No dates</li>


          <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>
              <li><b>Documentation:&nbsp;</b>Extensive tutorials and HowTos, but
                hard to find out how it works quickly.</li>
              <li><b>News:&nbsp;</b>Last Entry: 10.Feb.02 (5 entries for 2001)</li>

          <subsection name="Lucene">
            <p>Large-scale text search (and indexing?) engine.</p>
              <li><b>Documentation:&nbsp;</b>Extensive FAQ, Tutorial, Links 
                to offsite articles, Javadoc</li>
          <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>
              <li><b>Documentation:&nbsp;</b>Very extensive: Several FAQs, 
                User Guide, Developer Guide, but a simple "Hello
                world" example application appears to be missing.</li>

          <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:&nbsp;</b>Last Entry: 08.Mar.02 (monthly status reports
              for entire project)</p>

                <li><b>Documentation:&nbsp;</b>Extensive: Several Overview
                  documents, HowTos, Javadoc. Apparently no worked
                  "Hello world" example.</li>

              <p>Reusable services for use with Turbine.</p>
                <li><b>Documentation:&nbsp;</b>Short individual descriptions.</li>
              <ul>Individual Services for:
                <li>Bean population from input (Intake)</li>
                <li>Naming (JNDI Wrapper)</li>
                <li>File uploads</li>
                <li>Velocity integration</li>

              <p>Set of existing Turbine code and Fulcrum services, 
                refactored as components, with the intent to move
                it into the Commons.</p>
                <li><b>Version:&nbsp;</b>Apparently just starting out.</li>

              <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>
                <li><b>Documentation:&nbsp;</b>Extensive: Tutorial, User Guide, 
                  Developer Guide, Database integration Howtos</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>


          <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).
              <li><b>Documentation:&nbsp;</b>Extensive: Great printable user
                and Developers guide, very clear comparison with 
                other projects.</li>
              <li><b>News:&nbsp;</b>Last Release: 09.Dec.01 (11 Entries for 
        </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


          <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>
              <li><b>News:&nbsp;</b>1.2.1 released 13. Dec. 00, 
                2.0a2 released 01. Dec. 01</li>

          <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>
              <li><b>Documentation:&nbsp;</b>Extensive, but unclear</li>
              <li><b>News:&nbsp;</b>Last Entry: 2002/03/15 (confusing)</li>

          <subsection name="Tomcat 3">
            <p>Official Reference Implementation of the 
              Servlet 2.2 and JSP 1.1</p>
              <li><b>News:&nbsp;</b>About bi-weekly updates</li>

          <subsection name="Tomcat 4">
            <p>Official Reference Implementation of the 
              Servlet 2.3 and JSP 1.2</p>
              <li><b>News:&nbsp;</b>About bi-weekly updates</li>

        </section> <!-- Server Applications -->


# Document ends here #

To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to