<?xml version="1.0"?>

<!--
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
-->

<document>

 <properties>
  <title>Turbine</title>
  <author email="jon@latchkey.com">Jon S. Stevens</author>
 </properties>

 <body>

 <section name="What is Turbine?">

 <p>
    Turbine is a servlet based framework that allows experienced Java
    developers to quickly build secure web applications. Parts of
    Turbine can also be used independently of the web portion of Turbine
    as well. In other words, we strive to make portions of Turbine
    easily available for use in other applications.
 </p>

 <p>
    <strong>A web based application is an application where users use
    their favorite web browser in order to access secure business
    logic.</strong>
 </p>

 <p>
    A couple example web applications that can benefit from using this
    framework include e-commerce shopping cart
    systems, Yahoo style link conservatories and project / <a
    href="http://scarab.tigris.org/">bug/issue</a> tracking systems as
    well as cool XML integration applications like <a
    href="http://portals.apache.org/jetspeed-1/">Jetspeed</a>.
 </p>

 <p>
    <strong>A platform for building applications, not just running
    them.</strong>
 </p>

 <p>
    Many commercial (and non-commercial!) software companies will
    attempt to sell you an "Application Server", but what few people
    realize is that it is only half of the battle to creating a web
    application. There is often quite a lot of code that your engineers
    end up re-inventing the wheel with or grabbing various packages from
    all over the net with various licenses that you may or may not agree
    to.
 </p>

 <p>
    The point of Turbine is to collect that code into one location and
    make it easy to create re-usable components (such as
    ParameterParsing, Database Connection Pools, Job Scheduling,
    GlobalCaches, integration with other tools such as Torque, Velocity,
    etc...) all under a <a href="/common/license.html">license</a>
    (Apache) that allows you to create useful websites for your
    customers without worrying about viral code. Turbine is not the end
    all answer, but it sure is a nice way to make your development life
    easier.
 </p>

 <p>
    This framework has an intended audience that is directed at web
    engineers, not necessarily the web designers. By using this
    framework, it is possible for the web engineers to build intuitive
    high level systems for the web designers to use, but the low level
    framework is strictly for web engineers. Turbine is not a web
    application server. It is a tool for building web applications. Your
    <a href="http://tomcat.apache.org/">servlet engine</a> is your
    application server and the application that you develop using this
    framework is your web application.
 </p>

 <p>
    <strong>Integration with Velocity is well
    defined and makes doing applications using these tools painless for
    both the developers and the web designers!</strong>
 </p>

 <p>
    Turbine can be integrated with existing <a
    href="http://velocity.apache.org/engine/">Velocity</a>, <a
    href="http://java.sun.com/products/jsp/">Java Server Pages (JSP)</a>
    and <a href="http://cocoon.apache.org/">Cocoon</a> technologies by
    specially creating Screens that use Services to parse templates.
    Screens can also be created to read files from other websites as
    well as off disk. This makes it easy to have designers simply put
    the body of a page on disk and Turbine can serve these files when
    requested. All of this is described in more detail in the
    documentation section below.
 </p>

 <p>
    The reason why Turbine works so well is because it applies object oriented
    principles to the entire process of building a complex secure web application.
    We try to follow the
    <a href="http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html">Model
    2 methodology</a> yet expand on it to encompass "View" technologies other
    than just JSP as well as more mature methodologies such as
    <a href="./howto/action-event-howto.html">Action
    Event</a> handling. Turbine is considered as Model 2 <strong>+ 1</strong>. :-) Please
    see the <a href="model2+1.html">discussion</a> of Model 2+1 for more information.
 </p>

 <p>
    This all sounds like a bunch of marketing talk, but in reality,
    Turbine has been developed by developers for developers. We are not
    trying to sell you something that does not really work, instead we
    are trying to solve (or do something about) the problems that our
    fellow developers keep having over and over again. Come be a part of
    the revolution!
 </p>

 </section>

<section name="Where do I get releases?">

  <p>
    Please refer to the main
    <a href="http://turbine.apache.org/download.html">Turbine Download
    page</a>.
  </p>

</section>

<section name="How do I contribute, give feedback, fix bugs and so on?">

<p>
We really need and appreciate any contributions you can give. This
includes documentation help, source code and feedback. Discussion
about changes should come in the form of source code and/or very
detailed and well thought out constructive feedback. The <a
href="how-to-help.html">How To Help</a> document has details and hints
how to get engaged with Turbine Development. We also have a <a
href="todo.html">To Do</a> document that describes work to do with
the current Turbine code.
</p>

<ul>
    <li>
        We have a <a href="http://turbine.apache.org/contact.html">Turbine mailing
        lists</a> for discussion.</li>
    <li>
        You can also access the <a href="scm-usage.html">Turbine SVN
        repository</a></li>
</ul>

</section>

 </body>
 </document>
