
When implementing Strecks, the aim has been to be as unobtrusive as possible in the
RequestProcessor extension implementation. Most of the extension functionality is
implemented by delegate classes, in each case represented by an interface.
The delegate implementation classes can themselves be changed using entries in a 
strecks.properties, which should be placed on the application's classpath. 
If not present, then the application defaults are used.
An example of a delegate is ActionCreator, an interface which represents functionality 
for creating an Action instance 
when a Struts mapping is encountered for the first time in a request. 
ActionCreator has a single method:
public interface ActionCreator
{
	public Action createAction(Class actionClass) throws Exception;
}
The default implementation is 
org.strecks.controller.ActionCreatorImpl, which 
creates an action controller, and reads any action bean annotations, using these to 
configure the action controller. 
To change the ActionCreator implementation class, 
you would need an entry in strecks.properties
such as the following:
action.creator.impl=[fully qualified action creator implementation class name]
In the following sections we discuss the individual extension points, and their roles.
| Property name | builder.impl | 
| Purpose | The Builder is the object used to create and configure the other delegate classes | 
| Default | org.strecks.builder.PropertiesBuilder | 
| Property name | action.creator.impl | 
| Purpose | Responsible for instantiating controller actions, and for reading action bean annotations and using these to configure the controller action | 
| Default | org.strecks.controller.ActionCreatorImpl | 
| Property name | delegate.impl | 
| Purpose | Provides the entry point for the per-action execution. Called via a RequestProcessor.processActionPerform()extension method.
	Also responsible for calling the action interceptors. | 
| Default | org.strecks.controller.ControllerProcessorDelegateImpl | 
| Property name | form.wrapper.impl | 
| Purpose | Provides functionality for decorating Action forms so that they can be used for Streck's annotation-based validation and bind-handling functionality. Required to allow action forms to be annotation-enabled | 
| Default | org.strecks.form.handler.ValidateBindFormWrapper | 
| Property name | form.validation.handler.impl | 
| Purpose | Provides hooks for applying Streck's validation mechanisms to action forms. | 
| Default | org.strecks.form.handler.FormValidationHandlerImpl | 
| Property name | form.validation.handler.impl | 
| Purpose | Provides hooks for integrating Streck's action forms with Struts' form population mechanism. | 
| Default | org.strecks.form.handler.FormPopulateSourceImpl | 
In general, you probably won't need to change these implementation classes. 
The main exception is the form handler: using the 
org.strecks.form.handler.FormValidationHandlerImpl can be useful
because it temporarily holds form validation errors in the session. These are removed at the 
start of the next request. This is useful for implementing the Redirect After Post pattern in
your applications.