1. 程式人生 > >Apache Commons Pool官方文件

Apache Commons Pool官方文件

原文連結  譯者:張坤

Apache Commons Pool 開源軟體庫提供了一個物件池API和一系列物件池實現。Apache Commons Pool 2.x與1.x相比實現了一個可重寫的物件池實現。另外,效能和可伸縮性也有了改進,2.x版本包含魯棒的例項追蹤和物件池監控。2.x版本需要JDK6以上版本。

釋出

檢視下載頁面獲取發行版本。

特性

org.apache.commons.pool2包下定義了幾個物件池介面和基類,在建立新的物件池實現時可
以參考。

PooledObjectFactory

PooledObjectFactory提供了一個管理物件池物件生命週期的通用介面。

public interface PooledObjectFactory<T> {
PooledObject<T> makeObject();
void activateObject(PooledObject<T> obj);
void passivateObject(PooledObject<T> obj);
boolean validateObject(PooledObject<T> obj);
void destroyObject(PooledObject<T> obj);
}

使用1.x版本的使用者應該會注意到,在1.x中直接通過建立PoolableObjectFactorys來管理物件
池內的物件,版本2中通過PooledObjectFactorys來管理物件池內的物件(PooledObject)。
這些包裝器物件維護物件池的狀態,可以通過PooledObjectFactory內的方法來訪問比如物件
池內某個物件的建立時間或最後使用時間。DefaultPooledObject類可以用來追蹤物件池內對
象的狀態。實現一個PoolableObjectFactory的最簡單方式就是通過繼承
BasePooledObjectFactory。BasePooledObjectFactory提供了一個makeObject()方法,這個
方法內部實現為wrap(create()),其中wrap和create都是抽象方法。你可以通過實現create方
法來建立你想通過物件來管理的底層物件,然後通過wrap方法來包裝在PooledObject中建立
的例項。使用DefaultPooledObject包裝器,可以如下

@Override
public PooledObject<Foo> wrap(Foo foo) {
return new DefaultPooledObject<Foo>(foo);
}

這裡的Foo是一個被“池化”的型別(create()方法返回的型別)。KeyedPooledObjectFactory
也為KeyedObjectPool定義了一個類似的介面:

public interface KeyedPoolableObjectFactory<K,V> {
PooledObject<V> makeObject(K key);
void activateObject(K key, PooledObject<V> obj);
void passivateObject(K key, PooledObject<V> obj);
boolean validateObject(K key, PooledObject<V> obj);
void destroyObject(K key, PooledObject<V> obj);
}

BaseKeyedPooledObjectFactory提供了KeyedPooledObjectFactory的一個抽象實現。
org.apache.commons.pool2.impl 包下提供了物件池實現。

GenericObjectPool

GenericObjectPool提供了一系列配置選項,比如可以容納的活躍或者空閒的例項個數,空閒
物件的清除策略,等等。在版本2中,還提供對被遺棄物件的追蹤和移除。

SoftReferenceObjectPool

SoftReferenceObjectPool可以根據需要增長,但是可以允許虛擬機器在需要時從物件池中清除
物件。

物件池從2.x遷移到2.y

使用2.x系列版本的客戶端程式碼在使用最新的2.x發行版本時不需要做任何改變。
新的2.x發行版可能會支援一些新的配置屬性。這些將會在變更日誌中列出。需要注意,
Apache Commons Pool中的MBean介面(以MXBean或MBean結尾),比如
DefaultPooledObjectInfoMBean, GenericKeyedObjectPoolMXBean 或者
GenericKeyedObjectPoolMXBean為了支援新的屬性,在不同版本之間發生改變。這些介面
不應該被客戶端所實現,所以這些介面不需要考慮向後相容性.

物件池從1.x遷移到2.x

Apache Commons Pool從1.x遷移到2.x需要一些程式碼改動。最大改動應該是包
org.apache.commons.pool更名為org.apache.commons.pool2和PooledObjectFactory的一些
實現類發生了改變。

雖然一些屬性的名稱為了一致性已經發生了改變,但是Apache Commons Pool確保了同名的屬性在不同版本的池中有相同的含義。一些關鍵的實現類(GenericObjectPool 和 GenericKeyedObjectPool)保留了原來的屬性,所以我們在升級的過程中可以不用修改這些屬性的名稱。不過,我們還是推薦使用新的屬性名稱。