001: /*
002: * Copyright 2002 Sun Microsystems, Inc. All
003: * rights reserved. Use of this product is subject
004: * to license terms. Federal Acquisitions:
005: * Commercial Software -- Government Users
006: * Subject to Standard License Terms and
007: * Conditions.
008: *
009: * Sun, Sun Microsystems, the Sun logo, and Sun ONE
010: * are trademarks or registered trademarks of Sun Microsystems,
011: * Inc. in the United States and other countries.
012: */
013: package com.sun.portal.portlet.impl;
014:
015: import java.io.StringWriter;
016: import java.io.ByteArrayOutputStream;
017:
018: import javax.servlet.http.HttpServletRequest;
019: import javax.servlet.http.HttpServletResponse;
020:
021: import javax.portlet.RenderRequest;
022: import javax.portlet.RenderResponse;
023:
024: import com.sun.portal.common.pool.ObjectPool;
025: import com.sun.portal.common.pool.ObjectManager;
026:
027: import java.util.logging.Logger;
028: import java.util.logging.Level;
029:
030: import com.sun.portal.portletcontainercommon.PortletContainerRenderRequest;
031: import com.sun.portal.portletcontainercommon.PortletContainerRenderResponse;
032:
033: import com.sun.portal.portletcontainercommon.descriptor.PortletDescriptor;
034: import com.sun.portal.log.common.PortalLogger;
035:
036: /**
037: * This class maintains reusable portlet response objects in a pool.
038: * <P>
039: * Clients can use the <code>obtainObject()</code> method to retrieve an
040: * portlet response object, and <code>releaseObject()</code> to release
041: * it back to the pool once is done with it.
042: **/
043: public class RenderResponsePool extends ObjectPool {
044:
045: private static java.util.logging.Logger _logger = PortalLogger
046: .getLogger(RenderResponsePool.class);
047:
048: private static class RenderResponsePoolManager implements
049: ObjectManager {
050:
051: public RenderResponsePoolManager(Logger logger) {
052: }
053:
054: /**
055: * Creates a new object.
056: * <P>
057: * @param param Passed in params if needed.
058: */
059: public Object createObject(Object param) {
060: RenderResponseImpl rRes = new RenderResponseImpl();
061:
062: _logger.finest("PSPL_PAECSPPI0010");
063:
064: return rRes;
065: }
066:
067: /**
068: * Destroys an object.
069: */
070: public void destroyObject(Object o) {
071: //do nothing
072: }
073: }
074:
075: // constructor
076: public RenderResponsePool(int minSize, int maxSize,
077: boolean overflow, int partitionSize, Logger logger) {
078:
079: super (new RenderResponsePoolManager(logger), minSize, maxSize,
080: overflow, partitionSize);
081: }
082:
083: /**
084: * Obtains an portlet response object from the pool.
085: * <P>
086: * @param res The <code>HttpServletResponse</code> object
087: * @param writer the <code>StringWriter</code> object
088: * <P>
089: * @return <code>RenderResponse</code>
090: */
091: public RenderResponse obtainObject(HttpServletRequest req,
092: HttpServletResponse res, RenderRequest rReq,
093: PortletContainerRenderRequest pContReq,
094: PortletContainerRenderResponse pContRes,
095: StringWriter writer, ByteArrayOutputStream output,
096: PortletDescriptor pDescriptor) {
097:
098: _logger.finest("PSPL_PAECSPPI0011");
099:
100: RenderResponseImpl rRes = (RenderResponseImpl) (getPool()
101: .obtainObject(null));
102: rRes.init(req, res, rReq, pContReq, pContRes, writer, output,
103: pDescriptor, _logger);
104: return rRes;
105: }
106:
107: /**
108: * Releases an object back to the pool.
109: *
110: * @param <code>RenderResponse</code>
111: */
112: public void releaseObject(RenderResponse rRes) {
113: ((RenderResponseImpl) rRes).clear();
114: getPool().releaseObject(rRes);
115: _logger.finest("PSPL_PAECSPPI0012");
116: }
117: }
|