📄 poolobjectfactory.java
字号:
/* * Licensed under the X license (see http://www.x.org/terms.htm) */package org.ofbiz.minerva.pool;/** * Creates objects to be used in an object pool. This is a class instead of * an interface so you can ignore any of the methods you don't need. * * @author Aaron Mulder (ammulder@alumni.princeton.edu) */public abstract class PoolObjectFactory { /** * Creates a new object to be stored in an object pool. This is the * instance that will actually be sotred in the pool and reused. If you * want to wrap it somehow, or return instances of a different type that * refers to these, you can implement prepareObject. * @see #prepareObject * @param parameters Any parameters specified for creating the object. * This will frequently be null, so the factory must have some * reasonable default. If the factory does not use parameters * to create objects, feel free to ignore this. */ public abstract Object createObject(Object parameters) throws Exception; /** * Tells whether a pooled object matches the specified parameters. * This is only called if the client requested an object with * specific parameters. Usually all objects are "the same" so this * is not necessary. */ public boolean checkValidObject(Object source, Object parameters) { return true; } /** * Indicates to the factory that the pool has started up. This will be * called before any other methods of the factory are called (on behalf of * this pool). * @param pool The pool that is starting. You may decide to allow * multiple pools you use your factory, or to restrict it to a one-to-one * relationship. * @throws java.lang.IllegalArgumentException * Occurs when the pool is null. */ public void poolStarted(ObjectPool pool) { if (pool == null) throw new IllegalArgumentException("Cannot start factory with null pool!"); } /** * Prepares an object to be returned to the client. This may be used to * configure the object somehow, or actually return a completely different * object (so long as the original can be recovered in translateObject or * returnObject). This will be called whenever an object is returned to * the client, whether a new object or a previously pooled object. * @param pooledObject The object in the pool, as created by createObject. * @return The object to return to the client. If different, the pooled * object must be recoverable by translateObject and returnObject. */ public Object prepareObject(Object pooledObject) { return pooledObject; } /** * If the objects supplied to the client are different than the objects in * the pool, extracts a pool object from a client object. This should only * be called between prepareObject and returnObject for any given pool * object (and associated client object). However, it may be called once * after an object has been released if the garbage collector and a client * attempt to release an object at the same time. In this case, this * method may work, return null, or throw an exception and the pool will * handle it gracefully. The default implementation returns the parameter * object (assumes client and pooled objects are the same). * @param clientObject The client object, as returned by prepareObject * @return The pooled object, as originally returned by createObject */ public Object translateObject(Object clientObject) { return clientObject; } /** * Prepares an object to be returned to the pool. Any cleanup or reset * actions should be performed here. This also has the same effect as * translateObject (only relevant if the pooled objects are different than * the objects supplied to the client). * @param clientObject The client object, as returned by prepareObject * @return The pooled object, as originally returned by createObject, ready * to be put back in the pool and reused. */ public Object returnObject(Object clientObject) { return clientObject; } /** * Indicates to the factory that the pool is closing down. This will be * called before all the instances are destroyed. There may be calls to * returnObject or translateObject after this, but no calls to * createObject or prepareObject (on behalf of this pool). * @param pool The pool that is closing. You may decide to allow * multiple pools you use your factory, or to restrict it to a one-to-one * relationship. * @throws java.lang.IllegalArgumentException * Occurs when the pool is null. */ public void poolClosing(ObjectPool pool) { if (pool == null) throw new IllegalArgumentException("Cannot close factory with a null pool!"); } /** * Permanently closes an object, after it is removed from the pool. The * object will not be returned to the pool - after this, it is gone. This * is called when the pool shrinks, and when the pool is shut down. */ public void deleteObject(Object pooledObject) { } /** * Decides whether a request for an object should be fulfilled by an * object checked out of the pool previously, or a new object. In general, * every request should generate a new object, so this should return null. * @return An existing object, if this request is effectively the same as * a previous request and the result should be shared. <B>null</B> * if this is a unique request and should be fulfilled by a unique * object. */ public Object isUniqueRequest() { return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -