| <?xml version="1.0"?> |
| <!-- |
| /* |
| * Copyright 2001-2004 The Apache Software Foundation. |
| * |
| * Licensed 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 Services - Pool Service</title> |
| </properties> |
| |
| <body> |
| |
| <section name="Pool Service"> |
| |
| <p> |
| The Pool Service extends the functionality of the Factory Service by adding |
| support for pooling objects intantiated from the given class name or |
| Class object reference. Pooling of objects stabilizes memory consumption and |
| reduces garbage collection making response times in server applications |
| more predictable. |
| </p> |
| |
| <p> |
| When a new instance is requested from the service, it first checks its pool |
| if one is available. If the the pool is empty, a new object will be instantiated |
| from the given class. If the class is specified by its name, the request to create |
| an instance will be forwarded to the Factory Service. |
| </p> |
| |
| <p> |
| For pooled objects implementing the Recyclable interface, a recycle method |
| will be called, when they are taken from the pool, and a dispose method, |
| when they are returned to the pool. Implementations of the methods should |
| clear and initialize the pooled instances correspondingly. Objects |
| that do not implement the interface can also be pooled, if they do not |
| need to perform any specific actions during pooling. A RecyclableSupport class |
| can be extended to get a minimal implementation of the interface. |
| </p> |
| |
| <p> |
| An ArrayCtorRecyclable interface extends the Recyclable interface providing |
| a more efficient recycle method with less reflection for recycling frequently |
| used objects having constuctors with parameters. |
| </p> |
| |
| </section> |
| |
| <section name="Configuration"> |
| |
| <source><![CDATA[ |
| # ------------------------------------------------------------------- |
| # |
| # S E R V I C E S |
| # |
| # ------------------------------------------------------------------- |
| # Classes for Turbine Services should be defined here. |
| # Format: services.[name].classname=[implementing class] |
| # |
| # To specify properties of a service use the following syntax: |
| # service.[name].[property]=[value] |
| |
| services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService |
| . |
| . |
| . |
| # ------------------------------------------------------------------- |
| # |
| # P O O L S E R V I C E |
| # |
| # ------------------------------------------------------------------- |
| |
| # Default capacity of pools of the Object pooling service. |
| # |
| # Default: 128 |
| services.PoolService.pool.capacity = 128 |
| |
| # Class specific capacities used instead of the default if specified. |
| # |
| #services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512 |
| ]]></source> |
| |
| </section> |
| |
| <section name="Usage"> |
| |
| <p> |
| The Pool Service can be called instead of the Factory Service, when instantiating |
| objects that are needed repeatedly e.g. for processing client requests. Intances |
| of RunData implementations, ParameterParser and CookieParser implementations, |
| Pull Service tools, etc, are typical examples of pooled objects. Used objects |
| must be returned to the Pool Service for recycling. The TurbinePool class is a |
| static accessor for common methods of the Pool Service: |
| </p> |
| |
| <source><![CDATA[ |
| // Get a pooled DOM parser. |
| DocumentBuilder parser = |
| TurbinePool.getInstance("javax.xml.parsers.DocumentBuilder"); |
| |
| // Parse an XML document. |
| Document doc = parser.parse(myfile); |
| |
| // Return the parser to the pool. |
| TurbinePool.putInstance(parser); |
| ]]></source> |
| |
| </section> |
| |
| </body> |
| </document> |