##### General Information

- Overview
- Features
- Specification
- Getting Started
- Howto Build Turbine
- Changes

##### Documentation

- Services
- Howtos
- Wiki
- JavaDocs

##### Development

- Proposals
- How To Help
- Todo

##### Project Documentation

- Project Information
- Project Reports

##### Apache

- Apache Website
- License
- How the ASF works
- Sponsorship
- Thanks
- Security

## Project Map

On this page, you can find a functional breakdown of Turbine codebase. This should help you in getting familiar with the tools that Turbine offers to you. Also, it will help you locate people that are experts in the field of a specific functional block, so you can contact them if you encounter a problem, or better yet have made a patch that fixes it.

Turbine Core

In the Core part of Turbine you will find the Turbine Servlet, the single entry point to your application, and the classes that form the framework of HTTP-interfaced application following MVC design pattern. Here you will find the base classes you will have to extend to fill in the framework with your application's logic. See the specification for more details.

Essential Services

This block contains the Service Framework that forms the basis of Turbine infrastructure. It allows defining utility classes with pluggable implementation (that means that you can customize and override the utility classes provided by Turbine easily) that can take part in the startup and shutdown sequence of the application.

Content generation services

This block groups together various services that aid you in the process of creating the user interface of your application. Most important, you will find here services that provide templating functionality, that allows you to create the HTML/XML/WML presentation layer of your application independently form your Java sources. The services provided are actually wrappers around templating packages developed independently from Turbine, such as Velocity. Also, there is a service that allows you to use Sun's JSP technology for creating templates. Other services that fall into this block are the Pull service, allowing you to create tool boxes (read more about Pull model), Localization service, that allows you to crate bundles of messages that your application displays translated into different languages, that can be easily manipulated, and the Upload service, that handles uploading files from HTML forms.

Database access

Database tools in Turbine include connection pooling service, which can transparently delegate to J2EE application server's pooling facilities, of provide connection pooling in lightweight, servlet container only environment. An important element you will find in this block is Peers framework, that is one of the corner stones of Turbine framework along with Services and Modules. Peers allow you to create relationship between tables in a relational database and classes in your application. It also allows to create queries in an Object-oriented way.

Object services

One of the greatest advantages of working in Java Servlets environment, is the statefullness of your application. You can create object and hold them in memory, to avoid repeated loading information form external sources, like disk files or the database. Turbine provides a few Services that will help you with management of these objects. One of them is Pool service that allows you to create pools of reusable object that may be acquired from the pool by a thread processing a request, and recycled when no longer needed. Cache service will help you with managing objects that contain information that can be reused multiple times.

Auxilary Services

In this section you will find other services that might be useful in the building your application. For example XMLRPC service that allows communication between applications within a heterogenous environment using XML-based protocol over HTTP. There are also services allowing manipulation of XML content using XSLT, and a service that manages creating contexts for performing JNDI operations.

E-mail messages

Turbine can help you with creating and sending e-mail. Also with the help of templates, just as those you use for displaying HTML pages.

Utility classes

This block encompasses the various utility classes contained in Turbine. You should check those classes, as they solve some common problems encountered in web application making.

Turbine tools

In this block, you will find tools that ship together with Turbine. These tools are runnable from the command line, and are used for the development purposes, not during the normal operation of an application. The tools include Torque, the tool for generating Peer Framework classes for your application, Intake that generates classes for automation of processing of complex HTML forms.

## Updating project map

This section is meant for Turbine developers.

Whenever you want to work on bringing the project map up to date, you should run the `update-classlist.sh` script contained in the `xdocs/project-map` directory. It will bring the `classlist` file, also in that directory in sync with the Turbine source files. It will also create a cvs diff of the `classlist` file and save the result into `changes` file. Open it and see the changes in the codebase between the last time the project map was updated, and the present. When you commit the modified xdocs, don't forget to commit `classlist` file as well!