Allows a service to exist "per thread" (in each thread). This involves an inner proxy, with a ThreadLocal whose initial value is derived from a {@link org.apache.tapestry.ioc.ObjectCreator}. Method invocations are delegated to the per-thread service instance. The proxy also implements {@link org.apache.tapestry.ioc.services.ThreadCleanupListener} so that it can discard theper-thread implementation.
This scheme ensures that, although the service builder method will be invoked many times over the life of the application, the service decoration process occurs only once. The final calling chain is: Service Proxy --> Decorator(s) --> PerThread Proxy --> (per thread) instance.