⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 commonspoolobjectpool.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: CommonsPoolObjectPool.java 12422 2008-07-29 19:28:48Z tcarlson $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.util.pool;import org.mule.api.lifecycle.Disposable;import org.mule.api.lifecycle.InitialisationException;import org.mule.api.object.ObjectFactory;import org.mule.config.PoolingProfile;import org.mule.config.i18n.MessageFactory;import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.commons.pool.PoolableObjectFactory;import org.apache.commons.pool.impl.GenericObjectPool;/** * <code>CommonsPoolProxyPool</code> is an implementation of {@link ObjectPool} * that internally uses the commons-pool {@link GenericObjectPool} and uses a * {@link ObjectFactory} for creating new pooled instances. */public class CommonsPoolObjectPool implements ObjectPool{    /**     * logger used by this class     */    protected static final Log logger = LogFactory.getLog(CommonsPoolObjectPool.class);    /**     * The pool     */    protected GenericObjectPool pool;    /**     * The ObjectFactory used to create new pool instances     */    protected ObjectFactory objectFactory;    /**     * The pooling profile used to configure and initialise pool     */    protected PoolingProfile poolingProfile;    /**     * Creates a new pool and an Object factory with the UMODescriptor     *      * @param descriptor the descriptor to use when constructing MuleProxy objects in     *            the pool     */    public CommonsPoolObjectPool(ObjectFactory objectFactory, PoolingProfile poolingProfile)    {        this.objectFactory = objectFactory;        this.poolingProfile = poolingProfile;    }    public void initialise() throws InitialisationException    {        GenericObjectPool.Config config = new GenericObjectPool.Config();        if (poolingProfile != null)        {            config.maxIdle = poolingProfile.getMaxIdle();            config.maxActive = poolingProfile.getMaxActive();            config.maxWait = poolingProfile.getMaxWait();            config.whenExhaustedAction = (byte) poolingProfile.getExhaustedAction();        }        pool = new GenericObjectPool(getPooledObjectFactory(), config);        try        {            applyInitialisationPolicy();        }        catch (Exception e)        {            throw new InitialisationException(e, this);        }    }    /**     * Template method to be overridden by implementations that do more than just     * invoke objectFactory     *      * @return     */    protected PoolableObjectFactory getPooledObjectFactory()    {        return new PoolabeObjectFactoryAdaptor();    }    protected void applyInitialisationPolicy() throws Exception    {        if (poolingProfile != null)        {            int numToBorrow = 0;            int initPolicy = poolingProfile.getInitialisationPolicy();            if (initPolicy == PoolingProfile.INITIALISE_ALL)            {                numToBorrow = poolingProfile.getMaxActive();            }            else if (initPolicy == PoolingProfile.INITIALISE_ONE)            {                numToBorrow = 1;            }            List holderList = new ArrayList(numToBorrow);            try            {                for (int t = 0; t < numToBorrow; t++)                {                    holderList.add(objectFactory.getInstance());                }            }            finally            {                for (int t = 0; t < holderList.size(); t++)                {                    Object obj = holderList.get(t);                    if (obj != null)                    {                        this.returnObject(obj);                    }                }            }        }    }    public Object borrowObject() throws Exception    {        if (pool != null)        {            return pool.borrowObject();        }        else        {            throw new InitialisationException(                MessageFactory.createStaticMessage("Object pool has not been initialized."), this);        }    }    public void returnObject(Object object)    {        if (pool != null)        {            try            {                pool.returnObject(object);            }            catch (Exception ex)            {                // declared Exception is never thrown from pool; this is a known bug                // in                // the pool API            }        }    }    public int getNumActive()    {        return pool.getNumActive();    }    public int getMaxActive()    {        return pool.getMaxActive();    }    public void dispose()    {        if (pool != null)        {            try            {                pool.close();            }            catch (Exception e)            {                // close() never throws - wrong method signature            }            finally            {                pool = null;            }        }    }    public void clear()    {        if (pool != null)        {            pool.clear();        }    }    public void close()    {        if (pool != null)        {            try            {                pool.close();            }            catch (Exception e)            {                // close() never throws - wrong method signature            }            finally            {                pool = null;            }        }    }    public void setObjectFactory(ObjectFactory objectFactory)    {        this.objectFactory = objectFactory;    }    public ObjectFactory getObjectFactory()    {        return objectFactory;    }    /**     * Wraps org.mule.object.ObjectFactory with commons-pool PoolableObjectFactory     */    class PoolabeObjectFactoryAdaptor implements PoolableObjectFactory    {        public void activateObject(Object obj) throws Exception        {            // nothing to do        }        public void destroyObject(Object obj) throws Exception        {            if (obj instanceof Disposable)            {                ((Disposable) obj).dispose();            }        }        public Object makeObject() throws Exception        {            return objectFactory.getInstance();        }        public void passivateObject(Object obj) throws Exception        {            // nothing to do        }        public boolean validateObject(Object obj)        {            return true;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -