1 /*
2 * Scope: a generic MVC framework.
3 * Copyright (c) 2000-2002, The Scope team
4 * All rights reserved.
5 *
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 *
14 * Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * Neither the name "Scope" nor the names of its contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
21 *
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
26 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
27 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 *
35 *
36 * $Id: ObjectPoolManager.java,v 1.5 2002/09/05 15:41:46 ludovicc Exp $
37 */
38 package org.scopemvc.util;
39
40
41 import java.util.HashMap;
42 import java.util.Map;
43 import org.apache.commons.logging.Log;
44 import org.apache.commons.logging.LogFactory;
45
46 /***
47 * Manages pooling of instances of different classes.
48 *
49 * @author <A HREF="mailto:haruki_zaemon@users.sourceforge.net">Simon Harris</A>
50 * @created 05 September 2002
51 * @version $Revision: 1.5 $ $Date: 2002/09/05 15:41:46 $
52 */
53 public class ObjectPoolManager {
54
55 private final static Log LOG = LogFactory.getLog(ObjectPoolManager.class);
56
57 /***
58 * The singleton instance of this class
59 */
60 private final static ObjectPoolManager INSTANCE = new ObjectPoolManager();
61
62 /***
63 * Object pools keyed by class
64 */
65 private final Map poolByClass = new HashMap();
66
67 /***
68 * Constructor.
69 */
70 private ObjectPoolManager() { }
71
72 /***
73 * Obtains the singleton instance of this class.
74 *
75 * @return The instance value
76 */
77 public static ObjectPoolManager getInstance() {
78 return INSTANCE;
79 }
80
81 /***
82 * Obtains the pool for the given class
83 *
84 * @param clazz TODO: Describe the Parameter
85 * @return The objectPool value
86 */
87 public final ObjectPool getObjectPool(Class clazz) {
88 synchronized (poolByClass) {
89 ObjectPool pool = (ObjectPool) poolByClass.get(clazz);
90 if (pool == null) {
91 pool = new BasicObjectPool(new BasicPoolableObjectFactory(clazz));
92 addObjectPool(clazz, pool);
93 }
94 return pool;
95 }
96 }
97
98 /***
99 * Obtains an instance of the sepcified class from the pool. Blocks if no
100 * free instances.
101 *
102 * @param clazz TODO: Describe the Parameter
103 * @return TODO: Describe the Return Value
104 */
105 public final Object borrowObject(Class clazz) {
106 return getObjectPool(clazz).borrowObject();
107 }
108
109 /***
110 * Obtains an instance of the specified class from the pool. Returns null if
111 * no free instances.
112 *
113 * @param clazz TODO: Describe the Parameter
114 * @return TODO: Describe the Return Value
115 */
116 public final Object borrowObjectIfExists(Class clazz) {
117 return getObjectPool(clazz).borrowObjectIfExists();
118 }
119
120 /***
121 * Returns an instance to the pool.
122 *
123 * @param object TODO: Describe the Parameter
124 */
125 public final void returnObject(Object object) {
126 getObjectPool(object.getClass()).returnObject(object);
127 }
128
129 /***
130 * Adds a pool to be managed.
131 *
132 * @param clazz The element to be added to the ObjectPool attribute
133 * @param pool The element to be added to the ObjectPool attribute
134 */
135 public final void addObjectPool(Class clazz, ObjectPool pool) {
136 synchronized (poolByClass) {
137 // REDTAG: Need to ensure it doesn't exist already
138 poolByClass.put(clazz, pool);
139 }
140 }
141 }
This page was automatically generated by Maven