org.apache.xmlrpc.server

Interface RequestProcessorFactoryFactory

public interface RequestProcessorFactoryFactory

The request processor is the object, which is actually performing the request. There is nothing magic about the request processor: It may very well be a POJO. The {@link RequestProcessorFactoryFactory} is passed to the {@link AbstractReflectiveHandlerMapping} at startup. The mapping uses this factory to create instances of {@link RequestProcessorFactory}, which are used to initialize the {@link ReflectiveXmlRpcHandler}. The handler in turn uses its factory to create the actual request processor when a request comes in.

However, the question arises, when and how the request processor is created and whether it needs request specific initialization. The {@link RequestProcessorFactoryFactory} is an object, which makes that logic pluggable. Unfortunately, we aren't done with a single factory: We even need a factory for factories. The rationale is best explained by looking at the different use cases and how to implement them.

The default {@link RequestProcessorFactoryFactory} is the {@link RequestSpecificProcessorFactoryFactory}. It creates a new processor instance for any request. In other words, it allows to request processor to have some state. This is fine, if the request processor is a lightweight object or needs request specific initialization. In this case, the actual request processor is created and invoked when calling {@link RequestProcessorFactory#getRequestProcessor(XmlRpcRequest)}.

An alternative implementation is the {@link StatelessProcessorFactoryFactory}, which may be used to create stateless request processors. Stateless request processors are typically heavyweight objects, which have an expensive initialization phase. The processor factory, which is created by {@link #getRequestProcessorFactory(Class pClass)} contains an initialized singleton, which is returned by {@link RequestProcessorFactory#getRequestProcessor(XmlRpcRequest)}.

Other alternatives might be a {@link RequestProcessorFactoryFactory}, which maintains a pool of {@link RequestProcessorFactory} instances. The instances are configured by calling {@link RequestProcessorFactory#getRequestProcessor(XmlRpcRequest)}.

Nested Class Summary
static interfaceRequestProcessorFactoryFactory.RequestProcessorFactory
This is the factory for request processors.
static classRequestProcessorFactoryFactory.RequestSpecificProcessorFactoryFactory
This is the default implementation of {@link RequestProcessorFactoryFactory}.
static classRequestProcessorFactoryFactory.StatelessProcessorFactoryFactory
This is an alternative implementation of {@link RequestProcessorFactoryFactory}.
Method Summary
RequestProcessorFactoryFactory.RequestProcessorFactorygetRequestProcessorFactory(Class pClass)
This method is invoked at startup.

Method Detail

getRequestProcessorFactory

public RequestProcessorFactoryFactory.RequestProcessorFactory getRequestProcessorFactory(Class pClass)
This method is invoked at startup. It creates a factory for instances of pClass.
Copyright © 2001-2007 Apache Software Foundation. All Rights Reserved.