
                  A  P  A  C  H  E     C  O  C  O  O  N

                                @version@
  

  What is it?
  -----------

  Apache Cocoon is a web development framework built around the concepts of
  separation of concerns (making sure people can interact and collaborate on a
  project, without stepping on each other toes) and component-based web
  development.

  Cocoon implements these concepts around the notion of 'component pipelines',
  each component on the pipeline specializing on a particular operation. This
  makes it possible to use a Lego(tm)-like approach in building web solutions,
  hooking together components into pipelines without any required programming.

  Cocoon is "web glue for your web application development needs". It is a glue
  that keeps concerns separate and allows parallel evolution of all aspects of
  a web application, improving development pace and reducing the chance of
  conflicts.




  Requirements
  ------------

  Cocoon has been designed to coexist and interoperate side-by-side with your
  existing J2EE solutions or to give them new functionality without requiring
  any change in the existing infrastructure.

  Cocoon is implemented both as a Java servlet and a Java command line
  application. The following requirements exist for installing it:

   o  A Java 1.3 or later compatible virtual machine for your operating system.

   o  A Servlet API 2.3 compatible Servlet Engine or J2EE Application Server. 
      [not required for command line operation]




  Installation Instructions and Documentation
  -------------------------------------------

  Read the INSTALL.txt file in this directory for the installation instructions.

  The documentation available as of the date of this release is included in this
  directory. Read the INSTALL.txt for more information.

  If you are updating from a previous release of Cocoon, make sure
  that you read the installation instructions on updating first.
  
  Look for the most updated documentation on the Apache Cocoon web site
  (http://cocoon.apache.org/).




  Licensing and legal issues
  --------------------------

  Cocoon is licensed under the Apache Software License, a license of the BSD
  family, and contains software which is compatible with the BSD licensing style.

  For more information, please read the LICENSE files in the /legal directory.




  Credits
  -------

  For more information on credits and due reference to included software, please
  read the CREDITS.txt file in this directory.



  Thanks for using Apache Cocoon.





                                           The Apache Cocoon Project
                                           http://cocoon.apache.org/

