1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   *
12   * 
13   */
14  
15  package com.liferay.portlet;
16  
17  import com.liferay.portal.kernel.log.Log;
18  import com.liferay.portal.kernel.log.LogFactoryUtil;
19  import com.liferay.portal.util.PropsValues;
20  
21  import javax.servlet.http.HttpServletResponse;
22  
23  import org.apache.commons.pool.BasePoolableObjectFactory;
24  import org.apache.commons.pool.ObjectPool;
25  import org.apache.commons.pool.impl.StackObjectPool;
26  
27  /**
28   * <a href="RenderResponseFactory.java.html"><b><i>View Source</i></b></a>
29   *
30   * @author Brian Wing Shun Chan
31   */
32  public class RenderResponseFactory {
33  
34      public static RenderResponseImpl create(
35              RenderRequestImpl renderRequestImpl, HttpServletResponse response,
36              String portletName, long companyId)
37          throws Exception {
38  
39          return create(renderRequestImpl, response, portletName, companyId, 0);
40      }
41  
42      public static RenderResponseImpl create(
43              RenderRequestImpl renderRequestImpl, HttpServletResponse response,
44              String portletName, long companyId, long plid)
45          throws Exception {
46  
47          if (PropsValues.COMMONS_POOL_ENABLED) {
48              if (_log.isDebugEnabled()) {
49                  _log.debug(
50                      "Borrowing:\t" + _instance._pool.getNumIdle() + "\t" +
51                          _instance._pool.getNumActive());
52              }
53          }
54  
55          RenderResponseImpl renderResponseImpl = null;
56  
57          if (PropsValues.COMMONS_POOL_ENABLED) {
58              renderResponseImpl =
59                  (RenderResponseImpl)_instance._pool.borrowObject();
60          }
61          else {
62              renderResponseImpl = new RenderResponseImpl();
63          }
64  
65          renderResponseImpl.init(
66              renderRequestImpl, response, portletName, companyId, plid);
67  
68          return renderResponseImpl;
69      }
70  
71      public static void recycle(RenderResponseImpl renderResponseImpl)
72          throws Exception {
73  
74          if (PropsValues.COMMONS_POOL_ENABLED) {
75              if (_log.isDebugEnabled()) {
76                  _log.debug(
77                      "Recycling:\t" + _instance._pool.getNumIdle() + "\t" +
78                          _instance._pool.getNumActive());
79              }
80  
81              _instance._pool.returnObject(renderResponseImpl);
82          }
83          else if (renderResponseImpl != null) {
84              renderResponseImpl.recycle();
85          }
86      }
87  
88      private RenderResponseFactory() {
89          _pool = new StackObjectPool(new Factory());
90      }
91  
92      private static Log _log = LogFactoryUtil.getLog(
93          RenderResponseFactory.class);
94  
95      private static RenderResponseFactory _instance =
96          new RenderResponseFactory();
97  
98      private ObjectPool _pool;
99  
100     private class Factory extends BasePoolableObjectFactory {
101 
102         public Object makeObject() {
103             return new RenderResponseImpl();
104         }
105 
106         public void passivateObject(Object obj) {
107             RenderResponseImpl renderResponseImpl = (RenderResponseImpl)obj;
108 
109             renderResponseImpl.recycle();
110         }
111 
112     }
113 
114 }